程式碼管理 | 建立並管理自己的公有Cocopods庫

weixin_34198453發表於2018-08-09
1755386-65a4a630e384804c.jpg

前言

隨著專案的發展,版本迭代,程式碼的重構,我們專案中一般會有很多有業務功能行性公共的元件,
app中可能多處都會使用到,甚至別的專案中也需要使用。比如我們 A 專案中有一個語音評測的功能,
前期只是在 A 專案裡面需要用到,後面在另一不同專案繪本閱讀需要用到相同語音評測的功能。
此時我們一般有兩種做法,

一是直接將這部分程式碼copy到繪本閱讀這個專案中;
二是將語音評測這部分邏輯給抽取出來,然後在分別在兩處使用

很明顯在專案初期,或者時間緊迫的情況下,第一種方式很好的能夠勝任工作,我們前期也是這麼做的,

但是我發現到了隨著專案的推移和發展,這樣做的時間成本太大了,效率也很低下,有很多隱患(評測邏輯一旦有變動,你需要改動兩次,而且你沒法保證兩次的改動一致)。

所以把公司的公共元件抽離出來,使用 Cocoapods 整合管理是一種非常好的解決方案,這樣的話,後續只要維護更新好這個公共元件,所有使用到的工程 pod install/pod update 下即可使用到最新的版本,達到一處更改多處使用的效果而且工程管理更加高效。

一、註冊CocoaPods賬戶資訊

想要建立一個開源pod庫, 首先我們需要註冊CocoaPods, 這裡使用trunk方式, 作為一個iOS開發人員你一定安裝了CocoaPods, 那麼只需要在終端執行:

pod trunk register 郵箱地址 '使用者名稱' --verbose

這裡我們一般使用github郵箱和使用者名稱, 然後在你的郵箱中會收到確認郵件, 在瀏覽器中點選連結確認即註冊成功, 成功之後可以終端執行:

檢視自己的註冊資訊, 以後當你有了自己的開源Pod庫, 也可以用此方式隨時檢視自己釋出過的Pods;

# pod註冊資訊,開源pod庫
pod trunk me 
1755386-9f89c7e3fec70a3e.png

二、建立共享庫的檔案倉庫

這裡從頭建立一個共享庫,以便對整個建立過程更加清楚。在terminal中建立一個全新的工程。這個檔案倉庫是你公共類庫的維護倉庫,新版本和修改可以通過這個倉庫釋出。

共享庫需要三個必不可少的部分:

A. 共享資料夾(資料夾存放著你要共享的內容, 也就是其他人pod得到的檔案, 
  .podspec檔案中的source_files需要指定此檔案路徑及檔案型別);
B. LICENSE檔案(預設一般選擇MIT);
C. 庫描述檔案.podspec(本庫的各項資訊描述, 需要提交給CocoaPods,
   pod通過這個檔案查詢到你共享的庫,).
在terminal  中輸入
$ pod lib create 新的庫名

在建立庫的時候,會詢問你關於對新建庫的一些要求,根據自己的要求配置好就OK,可以參考Using Pod Lib Create

1755386-252490b1e991a229.png
這是我的設定

三、 配置好檔案倉庫後上傳到公用倉庫github | gitlab

把自己共享庫需要的檔案放置到工程中的指定位置

1755386-e0a1970f65401dcb

之後,將新建的專案push到遠端服務端github | gitlab。具體的操作需要先在github上建立一個空的repo,然後使用命令列提交。

1755386-b8288ca0c1b2e978.png
這裡不用勾選即可
git add -A
git commit -m "first commit"
//這裡替換成自己的 github上的專案地址
git remote add origin https://github.com/fangmeigithub/JWJOpenServe.git 
git push -u origin master

提交成功後,github上面的新建工程變為類似下圖這樣的樣子。

1755386-58531f20b6626492.png

四、編輯並驗證 .podspec檔案

這裡也有倆值得注意的地方;

s.version          = '1.0.0'  //這裡的版本和之後提交到github上的release 版的tag必須一致
s.summary          = '進無盡的公開庫'  //這裡必須修改,不修改的話下面的驗證時會報錯

編寫完成後, 我們需要驗證.podspec檔案的合法性, 這裡需要終端cd到.podspec檔案所在資料夾, 執行:

pod lib lint JM_ActionSheet.podspec
1755386-bed29586fbb772c6.png
不修改 s.summary 就會報錯

如有警告或者錯誤請重新檢查你的編寫正確性, 如果沒有問題會出現

1755386-b5baea3f1202b5f2.png
修改 s.summary後驗證通過

五、給檔案倉庫打tag, 釋出一個release版本

一切準備就緒後, 我們需要在你的git倉庫裡面存在一個與.podspec檔案中一致的version, 這裡你可以在你的git倉庫中的releases一項去手動釋出, 也可以在當前資料夾下使用終端命令【釋出之前可以把git上新的變更先提交發布出去】:

git tag -m 'first release' '1.0.1'
//推送tag到遠端倉庫
git push --tag 

成功之後即可在你的releases裡面看到這個tag的版本.

六、釋出自己的庫描述檔案podspec給cocoapods

同樣在這個資料夾下, 終端執行:

pod trunk push JWJOPenKit.podspec 

這一步需要等很久,如果最後沒有報錯的話:
將你的庫檔案.podspec檔案提交到公有的specs上面, 這一步做的操作是驗證你的podspec檔案是否合法+提交到specs中(等同於fork;commit;push)+將上傳的podspec檔案轉成json格式檔案),成功後會出現Congrats資訊噢~

1755386-0ed7e8853d5eda26.png

至此,你的共享庫就可以被其他人通過 Cocoapods 所使用了。

七、更新維護podspec

如果有錯誤或者需要迭代版本,修改工程檔案後推送到遠端倉庫後, 需要修改podspec中的版本號, 並重新打tag上傳, 再進行新一輪的驗證和釋出, 當然, 建立一個演示demo工程供其他開發者下載檢視並不會影響我們的pod庫。【在示例文字庫中製作演示demo好像需要匯入元件的原始檔,使用 pod好像匯入不進來,無法直接使用。當然你也可以把元件原始碼檔案庫和Dome分開,把 Dome作為對外公開的工程演示用例】

八、關於查詢和使用新建立的庫

當你釋出共享庫成功後,是可以馬上供其他人使用的,但是當你自己使用 pod search XXX的時候卻發現本地搜尋不到:

1755386-4b3041b1470c9a3c.png

解決辦法:
pod setup成功後生成的~/Library/Caches/CocoaPods/search_index.json檔案, 是用來查詢的索引檔案, 終端輸入:

rm ~/Library/Caches/CocoaPods/search_index.json

刪除~/Library/Caches/CocoaPods目錄下的search_index.json檔案, 刪除成功後再執行:pod search 庫名, 等待輸出:Creating search index for spec repo 'master'.. Done! 稍等片刻就會出現你想要的結果~

1755386-dbe192a843ab02c8.png
1755386-b0fb2ef8425631c8.png

參考文章

相關文章