CocoaPods是iOS,Mac下優秀的第三方包管理工具,類似於java的maven,給我們項目管理帶來了極大的方便。
個人或公司在開發過程中,會積累很多可以複用的代碼包,有些我們不想開源,又想像開源庫一樣在CocoaPods中管理它們,那麼通過私有倉庫來管理就很必要。
對於CocoaPods還不太熟悉的,建議參考一下唐巧的博客或者直接到CocoaPods的官網看看:https://cocoapods.org/
CocoaPods默認只能管理基於git管理的代碼,如果要使用svn或者mercurial管理代碼,則需要安裝一些插件
以下方法都是基於git來操作。
1.創建代碼倉庫
將自己寫的代碼推送到git服務器。如果代碼可以開源的話,可以用github來託管。參考我們所開源的代碼
2.給穩定的代碼打上版本tag,一般以版本號作爲tag名
1
|
$ git tag -a |
將tag推送到git服務器
1
|
$ git push --tags |
這裏一般是類似1.0.2的版本號。版本號的規範參考這裏
3.創建spec文件
在shell中運行:
1
|
$ pod spec create |
會在當前目錄創建.podspec文件,創建的文件是個完整的配置模板,根據字面意思以及註釋,大體上都能弄明白。不清楚的地方可以到https://guides.cocoapods.org/making/specs-and-specs-repo.html看看,github上也有很多開源代碼可以參考。
4.驗證spec文件有效性
spec文件修改完成後,運行
1
|
pod spec lint .podspec |
根據輸出提示修改你的spec文件或者代碼,直到能pass.
5.創建spec repository(spec 倉庫)
除了上面創建的代碼倉庫,還需要創建一個spec倉庫,存放spec,目錄結構應該遵照以下的規範:
[plain] view plaincopy
1
2
3
4
|
├── Specs └── [SPEC_NAME] └── [VERSION] └── [SPEC_NAME].podspec |
例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
├─Specs ├──QueryKit/ ├── 0.8.0 │ └── QueryKit.podspec ├── 0.8.1 │ └── QueryKit.podspec ├── 0.8.2 │ └── QueryKit.podspec └── 0.8.3 └── QueryKit.podspec URITemplate ├── 1.0.0 │ └── URITemplate.podspec └── 1.0.1 └── URITemplate.podspec |
這裏的版本號要和代碼倉庫裏的tag一一對應。
將其推送到git服務器,參考我們開源的代碼
6.添加私有repo到CocoaPods中
1
|
$ pod repo add REPO_NAME SOURCE_URL |
7.驗證私有repo安裝無誤:
1
2
|
$ cd ~/.cocoapods/repos/REPO_NAME $ pod repo lint . |
後面如果還要往REPO_NAME裏添加新包,只需運行下面命令:
1
|
$ pod repo push REPO_NAME SPEC_NAME.podspec |
如要刪除私有repo:
1
|
$ pod repo remove [name] |
8.添加包到工程的Podfile中如下:
1
2
3
4
5
6
7
8
|
source 'https://github.com/agdsdl/Specs.git' platform :ios, "7.0" target "XXX" do pod 'DLSlideView' , '~>0.8.1' end |
9. That's it!
接下來測試運行:
到工程目錄下運行
1
|
$ pod update |
依賴包更新完畢後,打開workspace文件,點擊Go!
一些坑:
很容易把spec repository和代碼repository弄混,我一開始就在這裏掛起了好久。代碼repository是代碼倉庫,我們把包代碼上傳到這個倉庫。
spec repository是配置倉庫,所有的配置按照包名、版本號分門別類的存放在這個倉庫。這個倉庫只用來存放spec文件,不存放代碼。
spec repository可以放在本地,不用git服務器,但是貌似必須用git init初始化這個目錄。
1到8步都只需在本機執行一次,團隊裏的其他人只需更新Podfile就可以直接使用私有倉庫了。