CocoaPods 詳解之----更新篇
博客原地址:http://foggry.com/blog/2016/03/23/cocoapods-xiang-jie-zhi-geng-xin-pian/
CocoaPods 大概是 2011 年出現的開源組件管理工具(目前已支持 Objective-C 和 Swift),近年來普及率越來越高,幾乎已是所有 Cocoa 開源項目的標配。另外,很多大點的團隊會用 CocoaPods 拆分工程,實現項目插件化。
博主曾在 2014 年寫過 CocoaPods
詳解
系列文章:CocoaPods詳解之——使用篇、CocoaPods詳解之——進階篇、CocoaPods詳解之——製作篇,簡單介紹了從使用到親手製作
CocoaPods 開源組件的過程。
然而隨着時間的推移,CocoaPods 有些使用方式也發生了變化,比如組件提交方式等。本文將從 Trunk 和私有倉庫兩個方面介紹自己對 CocoaPods 的新認識。
一、Trunk 方式提交開源組件
從 CocoaPods 0.33 版本開始,CocoaPods 將組件的提交從 Pull requests 變成了自動化的 Trunk 方式。Trunk 提交方式有以下步驟:
1、向 Trunk 註冊自己的電腦
首次使用 Trunk 時,需要註冊自己的電腦:
1 2 |
|
執行命令以後,上述郵箱會收到一封驗證郵件,按照郵件說明打開制定的鏈接,註冊流程就完成了。
註冊流程完成後,可以使用命令:
1
|
|
可以檢驗註冊結果,如果輸出:
1 2 3 4 5 6 |
|
則說明註冊成功。
2、提交組件
準備好 podspec 文件後,首先要檢查其合法性:
1 2 |
|
解決完錯誤和警告後,會顯示以下內容:
1 2 3 |
|
這就說明驗證可以提交了。
執行提交命令:
1
|
|
如果順利的話,會輸出以下內容:
1 2 3 4 5 6 7 8 9 10 11 |
|
僅需要這一條命令,開源組件就被推送到 CocoaPods 主倉庫中了。可以執行以下命令驗證下:
1
|
|
輸出爲:
1 2 3 4 5 6 |
|
說明組件 WZMarqueeView
已經成功從 1.0.0
升級成了 2.0.0
版本。
3、其它說明
- 權限聲明
在執行下述命令時:
1
|
|
提示了以下錯誤:
1 2 3 4 5 6 |
|
原來,Trunk 要求只有組件所有者和開發者才能更新已有組件,而上例的組件 WZMarqueeView
是
2014 年通過 Pull requests 方式上傳到 CocoaPods 主倉庫的,並沒有聲明過所有權。
隨後,到 CocoaPods 指定的網頁:Claim your Pod上填寫對應信息後,按照提示執行命令:
1
|
|
看到執行結果:
1 2 3 4 5 |
|
組件的所有權已經變成了本人,此時再去執行 trunk
push
命令時就正常了。
- 爲組件添加其它所有者
一個組件可以通過以下命令,添加多個所有者(以郵箱爲標識):
1 2 |
|
執行成功後,[email protected]
也變成了 WZMarqueeView
的所有者。
- Pull requests 和 Trunk 對比
對於開發者來說,Pull requests 的操作過程十分繁瑣,需要開源組件製作者先 fork 一份主倉庫,然後將組件提交到 fork 後的倉庫,再 Pull requests 給 CocoaPods 主倉庫的維護者;
對 CocoaPods 主倉庫的維護者來說,需要手工一個個處理主倉庫的合併操作,通常第二天甚至需要更長時間 requests 才能被處理;
而 Trunk 方式,開發者只需要一條命令就能將組件上傳到主倉庫,並且 Trunk 方式是自動化的,幾乎不再需要主倉庫的維護者做任何工作,實時性更好。
另外,Trunk 增加了組件所有者的概念,非所有者無法提交組件的更新,這在一定程度上提高了 CocoaPods 的安全性。
二、創建私有 CocoaPods 倉庫
目前所有支持 CocoaPods 的開源組件,都存儲在 Github 上公共的 CocoaPods Specs 倉庫中,這種方式有以下缺點:
官方倉庫過大,裏面的絕大多數組件都不是我們需要的,你一定忘不了首次執行 pod
install
操作時那無盡的等待;
不能實現私有化,作爲一個相當好用的組件管理工具,很多團隊都使用 CocoaPods 實現龐大項目的組件化,都放在公共倉庫肯定不行。
這時就需要創建一個和 CocoaPods Specs 類似的私有組件存儲倉庫。私有倉庫可以存放在自家公司的 Git 服務器上,也可以放在各大支持私有倉庫的 Git 平臺上,下面以支持免費私有倉庫的 coding.net爲例說明 CocoaPods 私有倉庫的創建過程。
1、創建coding.net私有倉庫
按照 coding.net 官網提示創建一個私有倉庫即可。
2、本地初始化組件倉庫
執行以下命令:
1 2 |
|
3、向倉庫中添加組件
將事先準備好的組件添加到倉庫中,組件可以存放在本地,也可以放在自家或網上的代碼託管平臺。執行以下命令:
1 2 |
|
執行成功以後,會有以下輸出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
至此,本地和代碼託管平臺上的私有倉庫 FGSpecs 中就都已經添加了私有組件 FGMarqueeView。
4、使用私有倉庫中的組件
Podfile 文件中默認情況下已經隱式使用 source
聲明瞭
CocoaPods 的官方倉庫。但使用私有組件,需要使用 source
關鍵字鮮顯式聲明組件所在倉庫:
1 2 3 4 5 6 7 8 |
|
其中,SBJson 組件是官方倉庫的,FGMarqueeView 組件屬於我們剛創建的私有倉庫。
需要注意的是:
- 官方倉庫的顯式聲明
儘管官方倉庫會被隱式聲明,如果同時使用了官方倉庫和私有倉庫,就需要同時聲明二者。
- 倉庫聲明順序性
先聲明的倉庫具有優先權。當先後引用的兩個倉庫中都包含同一個組件時,會使用先引用倉庫中的,哪怕後引用的倉庫中版本號更高。
5、直接使用私有組件
如果不想創建私有倉庫,也可以在 Podfile 裏直接引用私有組件(組件可以是本地的,也可以是託管在自家公司服務器或網上的代碼託管平臺上的),引用的同時還可以制定具體的 commit、branch 或者 tag,比如:
1
|
|
這種方式引用的組件在執行完 pod
install
以後,會被添加在 Development Pods 目錄下,而通過私有倉庫或共有倉庫方式引用的組件則會被添加在 Pods 目錄下。
三、cocoapods 版本管理
cocoapods 升級新版本後可能會遇到坑,因此就有了降級的需求。
- 查看當前版本
1
|
|
- 卸載當前版本
1
|
|
- 安裝指定版本
1
|
|