公共 CocoaPods
打開隱藏目錄持搜,可以使用命令:
//打開隱藏的命令:
defaults write com.apple.finder AppleShowAllFiles -bool true
//關閉隱藏的命令:
defaults write com.apple.finder AppleShowAllFiles -bool false
接著需要重啟一下 Finder吉殃, 可以按住 option + 右鍵 Finder 圖標選擇重啟辞居。然后打開隱藏目錄 .cocoapods (這個目錄在你的個人目錄底下, ~/.cocoapods
或 /Users/[username]/.cocoapods
)
可以看到上圖, .cocoapods 目錄下的 repos 其實是 repository (倉庫)的縮寫寨腔。 repos 中存放的時倉庫的集合。這里的 master 就是 CocoaPods 官方建立的倉庫率寡,也就是我們所謂的公共庫迫卢。
specs 目錄下存放的就是所有提交到 CocoaPods 的開源庫的 podspec 文件的集合。
其結構如下圖所示:
其組成方式:
specName -- version -- specName.podspec
( master 里現在是 specName.podspec.json冶共,這個 .json 文件就是 podspec 文件加了個后綴乾蛤。我們可以采用 pod ipc spec
這個命令來將 spec 文件轉換成 .json)
那這個文件夾是如何來得呢?其實捅僵,這個文件夾是在你安裝了 CocoaPods 后家卖,第一次執(zhí)行 pod install
時, CocoaPods 通過命令 pod setup
來建立的(這條命令會自動執(zhí)行)庙楚。
上述是官方的 repo 上荡,私有庫的話可以看下我們前面的翻譯或者查看官方文檔,但是官方文檔有一些過程寫的不是特別詳細馒闷,自己實現的時候遇到了一些坑酪捡,特此梳理一下過程,按照官方文檔內容實現一個私有的 spec repo 纳账。根據官方的原理逛薇,我們只需要創(chuàng)建一個和 master 相類似結構的目錄就可以實現私有的 spec repo,當然你可以 fork 一個官方的 repo疏虫,但是它包含了太多沒有必要地庫在里面永罚,這在編譯倉庫的時候需要浪費大量的時間啤呼,所以我們只要自己重新創(chuàng)建一個就可以了。
1.創(chuàng)建一個私有的 Spec Repo
在你的 git 服務器上創(chuàng)建一個 repo呢袱。這里你可以在 github 或者你自己的 git 服務器上實現官扣。公司內部使用的話這里推薦大家使用私有的倉庫,但是 github 的私有倉庫是要收費的 $7/month (壕請無視 - -!)产捞。大部分公司都是有自己的git服務器醇锚,不過一般只能在公司內網使用,或者可以選擇Gitlab,Coding, Bitbucket任意一種坯临。我們以在 github 上創(chuàng)建為例:
如圖所示焊唬,我們在 github 上創(chuàng)建一個空的倉庫,命名為 O2Specs 看靠,這個倉庫是用來存放我們自己所有的私有庫的 spec 文件赶促,就如同官方的 https://github.com/CocoaPods/Specs 是用來存放所有官方的 specs 文件一樣。
然后我們就可以執(zhí)行:
pod repo add REPO_NAME SOURCE_URL
其中的 REPO_NAME 是我們要添加的私有 repo 的名稱(這里我們待會填的是: O2Specs)挟炬,后面是倉庫的 git 地址鸥滨。這里做的其實是創(chuàng)建的工作,也就是在 ~/.cocoapods/repo
目錄下添加了一個以你的私有 repo 為名的文件夾谤祖,但是并沒有添加 spec 文件婿滓。
在終端執(zhí)行命令:
pod repo add O2Specs https://github.com/marklin2012/O2Specs.git
這里用的是 https 地址,當然你也可以用 git 地址粥喜,不過這樣有可能失敗凸主。如果失敗,很大因素是你 github 的 ssh 在本地沒有配置好额湘,配置方法可以看這里:Generating SSH keys卿吐,成功后可以看得到 .cocoapods 目錄如下圖所示:
至此,我們已經在本地得到我們自己的私有倉庫 O2Specs 锋华,這是一個空的倉庫嗡官。
2.添加私有的 Repo 安裝到你的 CocoaPods 中
這個步驟需要我們事先完成 CocoaPods 依賴庫的搭建,具體可以查看我們另外一篇教程:制作 CocoaPods 依賴庫毯焕。如果這里你想先看看效果衍腥,也可以直接從 github 上 clone 示例工程繼續(xù)下面的操作。
讓我們進入到上面 clone 的示例工程目錄中(或者你自己搭建的依賴庫目錄中):
打開工程的 podspec 文件:
Pod::Spec.new do |s|
s.name = "O2View" #名稱
s.version = "0.0.1" #版本號
s.summary = "Just testing" #簡短介紹
s.description = <<-DESC
私有Pods測試
* Markdown 格式
DESC
s.homepage = "http://aotu.io/"
# s.screenshots = "www.example.com/screenshots_1.gif"
s.license = "MIT" #開源協(xié)議
s.author = { "linyi31" => "linyi@jd.com" }
s.source = { :git => "https://github.com/marklin2012/O2View.git" }
## 這里不支持ssh的地址纳猫,只支持HTTP和HTTPS紧阔,最好使用HTTPS
## 正常情況下我們會使用穩(wěn)定的tag版本來訪問,如果是在開發(fā)測試的時候续担,不需要發(fā)布release版本擅耽,直接指向git地址使用
## 待測試通過完成后我們再發(fā)布指定release版本物遇,使用如下方式
#s.source = { :git => "http://EXAMPLE/O2View.git", :tag => s.version }
s.platform = :ios, "9.0" #支持的平臺及版本,這里我們呢用swift起趾,直接上9.0
s.requires_arc = true #是否使用ARC
s.source_files = "O2View/*.swift" #OC可以使用類似這樣"Classes/**/*.{h,m}"
s.frameworks = 'UIKit', 'QuartzCore', 'Foundation' #所需的framework,多個用逗號隔開
s.module_name = 'O2View' #模塊名稱
# s.dependency "JSONKit", "~> 1.4" #依賴關系训裆,該項目所依賴的其他庫边琉,如果有多個可以寫多個 s.dependency
end
這個文件本質上是一個 ruby 文件变姨,這是我們事先已經實現好的依賴庫的 podspec 文件定欧,如果前面步驟都正常的話砍鸠,也就是說我們認為這個 podspec 是合法的話爷辱,就可以直接將這些內容 push 到我們本地的 repo 中耍属。為了避免錯誤巩检,我們可以再驗證一下兢哭,命令行輸入:
pod lib lint
運行之后可能會得到下面的警告:
-> O2View (0.0.1)
- WARN | source: Git sources should specify a tag.
[!] O2View did not pass validation, due to 1 warning (but you can use `--allow-warnings` to ignore it) and All results apply only to public specs, but you can use `--private` to ignore them if linting the specification for a private pod..
You can use the `--no-clean` option to inspect any issue.
由于我們的示例工程還沒有生成正式的 release 版本迟螺, github 上并沒有任何 tag,所以我們剛才填寫 .podspec 文件填寫 git 地址的時候沒有填寫指定 tag (上面文件的注釋中有提到)锉桑,解決方法我們可以先執(zhí)行忽略警告的命令:
pod lib lint --allow-warnings
如果成功會出現如下輸出:
-> O2View (0.0.1)
- WARN | source: Git sources should specify a tag.
O2View passed validation.
到此民轴,我們的 O2View.podspec 就符合規(guī)范了后裸。
3.添加你的 Podspec 到你的 repo
在前面驗證通過的基礎上浪谴,我們接著執(zhí)行命令:
pod repo push O2Specs O2View.podspec
執(zhí)行完苟耻,如果失敗會有相對應的警告和錯誤提示梁呈,只要按照警告和錯誤的詳細信息進行修改和完善即可蘸秘。成功的情況應該可以在終端看到類似的輸出:
Validating spec
-> O2View (0.0.1)
- WARN | source: Git sources should specify a tag.
Updating the `O2Specs' repo
Already up-to-date.
Adding the spec to the `O2Specs' repo
- [Add] O2View (0.0.1)
Pushing the `O2Specs' repo
To https://github.com/marklin2012/O2Specs.git
9f32092..8d0ced5 master -> master
再進入到 .cocoapods 的目錄中醋虏,可以看到已經發(fā)生了變化:
同時寻咒,我們還發(fā)現 O2Specs 的 github 倉庫也已經發(fā)生了變化:
按照平時使用 CocoaPods 的習慣颈嚼,我們添加依賴庫之前會先搜索一下庫毛秘,讓我們執(zhí)行一下命令:
pod search O2View
哈哈阻课,可以看到已經建立成功了叫挟!
-> O2View (0.0.1)
Just testing
pod 'O2View', '~> 0.0.1'
- Homepage: http://aotu.io/
- Source: https://github.com/marklin2012/O2View.git
- Versions: 0.0.1 [O2Specs repo]
4.測試私有 pod
看到前面的搜索結果限煞,小伙伴們是不是開始有點激動了抹恳?讓我們建立一個普通的工程,命名為 TestPodDemo署驻,然后在終端 cd 到其目錄路徑下,添加一個 Podfile 文件:
pod init
建立后修改 Podfile 文件內容如下:
use_frameworks!
target 'TestPodDemo' do
pod ‘O2View’
end
執(zhí)行:
pod install
我們得到如下提示:
Updating local specs repositories
Analyzing dependencies
[!] Unable to find a specification for `O2View`
[!] Your Podfile has had smart quotes sanitised. To avoid issues in the future, you should not use TextEdit for editing it. If you are not using TextEdit, you should turn off smart quotes in your editor of choice.
找不到 O2View 旺上? 額- -宣吱!洒试。。垒棋。剛才 search 明明可以找到這個依賴庫的叼架,為什么現在找不到了呢?
別著急!其實原因是你在 Podfile 中沒有指定路徑衣撬,當你執(zhí)行 pod install
的時候乖订,CocoaPods 默認只會在 master 下搜索,而我們的 spec 是存在我們私有的 O2Specs 目錄下的具练。所以解決方式很簡單乍构,就是引入搜索地址即可,在 Podfile 的頂部添加如下兩行代碼:
source 'https://github.com/CocoaPods/Specs.git' #官方倉庫地址
source ‘https://github.com/marklin2012/O2Specs.git’ #私有倉庫地址
這里必須添加兩個地址扛点,默認情況下哥遮,你如果不添加 source ,系統(tǒng)會默認使用官方倉庫地址陵究,但是當你添加了 source 之后眠饮,系統(tǒng)就不會自動搜索官方地址,所以這兩句都必須添加铜邮,否則其他基于官方的依賴庫都不能使用了仪召。
再次執(zhí)行 pod install
,我們就可以看到很順利的安裝成功了:
Updating local specs repositories
Analyzing dependencies
Downloading dependencies
Using O2View (0.0.1)
Generating Pods project
Integrating client project
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.
恭喜松蒜!這樣一來我們就可以使用這個私有庫了扔茅!
發(fā)布穩(wěn)定的依賴庫版本
前面我們提到過,我們的這個實例依賴庫 O2View 沒有生成穩(wěn)定的 release 版本秸苗。當我們調試完內容之后召娜,一般都是要發(fā)布穩(wěn)定版本的,更新之后再繼續(xù)發(fā)布新版本难述。我們可以使用命令行或者在 github 頁面手動生成萤晴,這里為了方便我們使用命令行吐句,首先在終端中 cd 到之前的依賴庫 O2View 的目錄中胁后,然后輸入如下命令:
git tag '0.0.1'
git push --tags
git push origin master
這樣我們就得到了一個穩(wěn)定的 release 版本 0.0.1:
這里我用的版本號是 0.0.1 基于研發(fā)版本,關于版本號的一些規(guī)范可以參考:語義化版本 2.0.0
對于我們的 podspec 文件嗦枢,我們也需要將 s.source
做一下小小的改動:
s.source = { :git => "https://github.com/marklin2012/O2View.git", :tag => version }
這樣我們使用這個依賴庫的時候就能對應上版本號攀芯,并且知道在 github 中使用穩(wěn)定的 release 版本代碼。太棒了文虏!
最后只需要再重復 push
一下我們的 Podfile 就可以侣诺!
接下來做什么殖演?
好了,到這里我們已經完全掌握如何創(chuàng)建一個本地私有的 CocoaPods 了年鸳!我們完全可以把我們項目中得代碼拆出來好好的封裝一些 pods趴久, 好好使用這個黑魔法!
祝大家玩得愉快搔确!