程式碼管理 | 建立並管理自己的公有Cocopods庫
![1755386-65a4a630e384804c.jpg](https://i.iter01.com/images/c804f13536b4dd436af39fcf03c60be7e42c2ce9ec55fdbfa959a306820f6bd3.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](https://i.iter01.com/images/20c2b7b90c62ef6294b7ccd6361d4de0355083a85fb4f0ed6d0cfc65862c79ac.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](https://i.iter01.com/images/92765ebe38955fbe0bc3cc589039e27fbb4499d1515d9b509cedfd366ecd15d3.png)
三、 配置好檔案倉庫後上傳到公用倉庫github | gitlab
把自己共享庫需要的檔案放置到工程中的指定位置
![1755386-e0a1970f65401dcb](https://i.iter01.com/images/a5f553bcf60ee9efb0d8927ec068b958ed0860ba2278895b43993ed1906f216f.gif)
之後,將新建的專案push到遠端服務端github | gitlab。具體的操作需要先在github上建立一個空的repo,然後使用命令列提交。
![1755386-b8288ca0c1b2e978.png](https://i.iter01.com/images/23d65f65601ee5f4986e34c897c13fb602eaa961dc1dd47111df7a714dede9a3.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](https://i.iter01.com/images/9009b66c97cd4f3041f627f885100b32bc940c5a470f3260065f171d6329f8db.png)
四、編輯並驗證 .podspec檔案
這裡也有倆值得注意的地方;
s.version = '1.0.0' //這裡的版本和之後提交到github上的release 版的tag必須一致
s.summary = '進無盡的公開庫' //這裡必須修改,不修改的話下面的驗證時會報錯
編寫完成後, 我們需要驗證.podspec檔案的合法性, 這裡需要終端cd到.podspec檔案所在資料夾, 執行:
pod lib lint JM_ActionSheet.podspec
![1755386-bed29586fbb772c6.png](https://i.iter01.com/images/70e7a400fa8ea40e40c2116b932ebdd18ad95bd99f52a3c6ae3bcf662335ea2c.png)
如有警告或者錯誤請重新檢查你的編寫正確性, 如果沒有問題會出現
![1755386-b5baea3f1202b5f2.png](https://i.iter01.com/images/7399f3d2adef5d4127199225c4c66266f28fde45d9e80dea890bff04321ae905.png)
五、給檔案倉庫打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](https://i.iter01.com/images/f139dcb887624a9dc22b8b6571076300a8e9ff6b346d383a1920d1077873c6ff.png)
至此,你的共享庫就可以被其他人通過 Cocoapods 所使用了。
七、更新維護podspec
如果有錯誤或者需要迭代版本,修改工程檔案後推送到遠端倉庫後, 需要修改podspec中的版本號, 並重新打tag上傳, 再進行新一輪的驗證和釋出, 當然, 建立一個演示demo工程供其他開發者下載檢視並不會影響我們的pod庫。【在示例文字庫中製作演示demo好像需要匯入元件的原始檔,使用 pod好像匯入不進來,無法直接使用。當然你也可以把元件原始碼檔案庫和Dome分開,把 Dome作為對外公開的工程演示用例】
八、關於查詢和使用新建立的庫
當你釋出共享庫成功後,是可以馬上供其他人使用的,但是當你自己使用 pod search XXX的時候卻發現本地搜尋不到:
![1755386-4b3041b1470c9a3c.png](https://i.iter01.com/images/4b747dc1411de7255270fac8551f8d6ebfffe9383f99a59f63ce5929c4f41577.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](https://i.iter01.com/images/e5c2514c631651907118abb8dd1ecbd275db2877c584bad21e4b005b1079b400.png)
![1755386-b0fb2ef8425631c8.png](https://i.iter01.com/images/eb7500cda769251e4c5aea2b0d71da66d6bfe356f891fdd2a647b13c06095206.png)
參考文章
相關文章
- CocoaPods公有庫的建立
- 建立公有pod庫
- [譯] 從現有的程式碼庫建立 Swift 包管理器Swift
- Nuget管理自己的專案庫
- 使用SourceTree管理GitLab程式碼倉庫Gitlab
- 小程式封裝wx.request請求並建立介面管理檔案封裝
- 自建 iOS 靜態庫並用 pod 管理iOS
- 使用Docker搭建自己的Bitwarden密碼管理服務Docker密碼
- 管理(002):建立密碼檔案示例密碼
- 公有云管理系統的主要作用是什麼?
- Git命令程式碼管理Git
- Lumen 自己設計的版本管理
- 一般管理系統與公有云管理系統的區別是什麼?
- 使用碼雲管理你的專案程式碼
- Sonar程式碼質量管理
- Git操作和程式碼管理Git
- 星外主機管理系統與ZKEYS公有云管理系統對比
- gitee建立倉庫如何提交程式碼Gitee
- Centos8 安裝 Gogs 程式碼倉庫管理工具CentOSGo
- 4個方法建立自己的寫作素材庫
- 教程|雲幫手部署Windows公有云管理系統Windows
- 教程|雲幫手部署Linux公有云管理系統Linux
- 前端程式碼質量管理(一)前端
- 程式碼管理工具——GitHubGithub
- 程式碼片段管理工具
- 程式碼伺服器安全管理伺服器
- 資料庫的管理資料庫
- SQL教程——庫的管理SQL
- Artifactory製品庫的密碼管理及策略配置密碼
- 程式碼管理和版本管理的作業流程以及規範是怎樣的?
- repo工程建立+gerrit管理
- 市面上比較好的公有云管理系統推薦
- Linux中程式包管理及程式的原始碼編譯Linux原始碼編譯
- 程式設計實戰:如何管理程式碼裡的常量程式設計
- 從零搭建自己的Vue管理端框架Vue框架
- 4.16 實現自己的堆管理器
- 為Tomcat設定自己的管理賬號Tomcat
- Flyway版本化管理資料庫指令碼資料庫指令碼