CocoaPods建立公有和私有Pod庫方法總結

引言

剛畢業那段時間接觸到的一些文章處處都在大談iOS工程模塊化(CocoaPods化), 本人也一直在着力於將公司項目代碼解耦合, 可是由於一我的開發實在沒有必要將工程CocoaPods化, 因此遲遲沒有去研究將工程CocoaPods化的方法, 期間本人也抽時間去參加過蘑菇街等平臺舉辦的架構交流會, 現在公司業務發展穩定, 終於有時間將建立公有pod庫將本身的代碼供其餘開發者pod依賴使用的方法, 以及建立本地/內網的私有Pod庫供公司項目組件CocoaPods化的方法研究清楚, 把這幾天整理的筆記作個記錄.html

建立公有Pod庫或者私有Pod庫, 實際上原理是同樣的, 都是基於git服務和repo協議, 不同的是, 二者的版本索引查詢方式不同, 公有庫的podspec由CocoaPods/Specs管理, 而內部私有使用的pod庫須要本身創建一個倉庫來管理podspec.ios

正文目錄
一. 建立公有Pod庫
一、註冊CocoaPods帳戶信息
二、建立共享庫文件並上傳到公有倉庫
三、編輯.podspec文件
四、打tag, 發佈一個release版本
五、發佈本身的庫描述文件podspec給cocoapods
六、關於查找和使用新建立的庫
七、更新維護podspec
二. 建立私有Pod庫
一、建立一個git倉庫用來作內部私有庫的Spec Repo
二、建立私有Pod組件庫
三、而後將podspec加入私有Sepc repo中
四、查找和使用內部組件庫

一. 建立公有Pod庫

例子: 個人第一個公共pod庫JM_ActionSheet, Podfile中添加pod 'JM_ActionSheet'便可使用.git

一、註冊CocoaPods帳戶信息

想要建立一個開源pod庫, 首先咱們須要註冊CocoaPods, 這裏使用trunk方式, 做爲一個iOS開發人員你必定安裝了CocoaPods, 那麼只須要在終端執行:github

pod trunk register 郵箱地址 '用戶名' --verbose

這裏咱們通常使用github郵箱和用戶名, 而後在你的郵箱中會收到確認郵件, 在瀏覽器中點擊連接確認即註冊成功, 成功以後能夠終端執行:json

pod trunk me

查看本身的註冊信息, 之後當你有了本身的開源Pod庫, 也能夠用此方式隨時查看本身發佈過的Pods;
圖片描述segmentfault

二、建立共享庫文件並上傳到公有倉庫

共享庫須要三個必不可少的部分:
A. 共享文件夾(文件夾存放着你要共享的內容, 也就是其餘人pod獲得的文件, .podspec文件中的source_files須要指定此文件路徑及文件類型);
B. LICENSE文件(默認通常選擇MIT);
C. 庫描述文件.podspec(本庫的各項信息描述, 須要提交給CocoaPods, pod經過這個文件查找到你共享的庫, .podspec文件的格式見第3點).api

這一步分兩種狀況:
A.若是你已經有了現成的想要共享的文件,你只須要知足上面三個部分,便可上傳到公有倉庫便可繼續其餘的步驟;
B.你想要建立一個全新的工程去作本身的共享, 可使用終端命令:瀏覽器

pod lib create 庫名

去根據須要選擇各項配置後建立一個標準的工程, 這裏不作贅述, 具體請參考:Using Pod Lib Create;服務器

你可使用SourceTree等工具上傳你的代碼到公共倉庫, 關於如何使用命令行上傳代碼到遠端倉庫, 能夠移步:iOS開發使用Git那些事, 這裏不作贅述.架構

三、編輯.podspec文件

JM_ActionSheet.podspec爲例:

Pod::Spec.new do |s|
    s.name         = 'JM_ActionSheet'
    s.version      = '1.0.1'
    s.summary      = 'An ActionSheet like WeChat'
    s.homepage     = 'https://github.com/ZJM6658/ActionSheetLikeWeChat'
    s.license      = 'MIT'
    s.authors      = {'JM Zhu' => '815187811@qq.com'}
    s.platform     = :ios, '6.0'
    s.source       = {:git => 'https://github.com/ZJM6658/ActionSheetLikeWeChat.git', :tag => s.version}
    s.source_files = 'JM_ActionSheet/*.{h,m}'
    s.requires_arc = true
end

這是一個最簡單的.podspec文件樣式, 各項屬性的意思一目瞭然, 若是本庫中有依賴其餘庫, 加上`s.dependency '庫名'便可.

編寫完成後, 咱們須要驗證.podspec文件的合法性, 這裏須要終端cd到.podspec文件所在文件夾, 執行:

pod lib lint JM_ActionSheet.podspec

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

-> JM_ActionSheet (1.0.1)
    
JM_ActionSheet passed validation.

四、打tag, 發佈一個release版本

一切準備就緒後, 咱們須要在你的git倉庫裏面存在一個與.podspec文件中一致的version, 這裏你能夠在你的git倉庫中的releases一項去手動發佈, 也能夠在當前文件夾下使用終端命令:

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

成功以後便可在你的releases裏面看到這個tag的版本.

五、發佈本身的庫描述文件podspec給cocoapods

一樣在這個文件夾下, 終端執行:

pod trunk push JM_ActionSheet.podspec

將你的庫文件.podspec文件提交到公有的specs上面, 這一步作的操做是驗證你的podspec文件是否合法+提交到specs中(等同於fork;commit;push)+將上傳的podspec文件轉成json格式文件),成功後會出現Congrats信息噢~
圖片描述

六、關於查找和使用新建立的庫

成功後須要等待的時間不定, 目前通常比較快, 通常使用pod setup和pod search查看是否已經可使用, 本人建立這個庫以後一個星期內天天嘗試pod setuppod search JM_ActionSheet始終沒法查找到本身的庫, 查找資料以後找到解決辦法:

1.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! 稍等片刻就會出現你想要的結果~

七、更新維護podspec

若是有錯誤或者須要迭代版本,修改工程文件後推送到遠端倉庫後, 須要修改podspec中的版本號, 並從新打tag上傳, 再進行新一輪的驗證和發佈, 固然, 建立一個演示demo工程供其餘開發者下載查看並不會影響咱們的pod庫.

二. 建立私有Pod庫

私有Pod庫和公有Pod庫的建立方式沒有什麼區別, 不同的是管理他們的spec repo不同
因此咱們須要本身建立一個跟CocoaPods/Specs相似的倉庫來管理內部建立的Pod庫的podspec文件, 供內部人員更新和依賴使用內部Pod組件庫.
私有repo的構建形式有兩種, 一種是私有git服務器上面建立,一種是本機建立.
本機建立請參考官方文檔:Private Pods,
這裏介紹的是在公司內部搭建的git服務器上面建立整個服務的方式.

一、建立一個git倉庫用來作內部私有庫的Spec Repo

在私有服務器一個倉庫,一個用來存放全部共享庫的podspec, 這裏建立好以後的內部SSH協議地址是:git@git.yaomaitong.net:iOSPods/ymtSpecs.git, 花錢買git的私有倉庫或者使用其餘免費的第三方git服務(如Bitbucket等)建立的私有倉庫給到的http/https地址也同樣.終端輸入命令:

pod repo add ymtSpecs git@git.yaomaitong.net:iOSPods/ymtSpecs.git

將ymtSpecs添加到本地repo, 添加成功後能夠在/.cocoapods/repos/目錄下能夠看到官方的specs:master和剛剛加入的specs:ymtSpecs

若是有其餘合做人員共同使用這個私有Spec Repo的話在他有對應Git倉庫的權限的前提下執行相同的命令添加這個Spec Repo便可.

二、建立私有Pod組件庫

繼續建立一個私有倉庫,用來創建須要共享的內部組件, 以Category爲例:git@git.yaomaitong.net:iOSPods/Category.git, 能夠建立示例工程, 像建立公有的庫同樣, 填寫本身的podspec文件

Pod::Spec.new do |s|
    s.name         = 'Category'
    s.version      = '1.0.1'
    s.summary      = 'ymt Category files'
    s.homepage     = 'http://git.yaomaitong.net/iOSPods/Category'
    s.license      = 'MIT'
    s.authors      = {'Gua Pi' => 'guapi@yaomaitong.cn'}
    s.platform     = :ios, '7.0'
    s.source       = {:git => 'http://git.yaomaitong.net/iOSPods/Category.git', :tag => s.version}
    s.source_files = 'AllCategory/*.{h,m}'
    s.requires_arc = true
end

值得注意的是:podspec文件中的homepage和source不支持ssh協議地址,因此咱們得放入http/https地址.

與公有庫的建立方式同樣, pod lib lint Category.podspec驗證成功以後push到倉庫, 而後打tag發佈release版本.

三、而後將podspec加入私有Sepc repo中

公有庫使用trunk方式將.podspec文件發佈到CocoaPods/Specs, 內部的pod組件庫則是添加到咱們第一步建立的私有Spec repo中去, 在終端執行:

pod repo push ymtSpecs Category.podspec

添加成功以後ymtSpecs中會包含Category庫的podspec信息, 能夠前往~/.cocoapods/repos下的ymtSpecs文件夾中查看, 同時git服務器中的遠端也更新了.

四、查找和使用內部組件庫

執行pod search Category就能查到剛剛建立好的Category庫了, 而後在想要使用此組件的工程的Podfile中加入pod 'Category', '~>1.0.1'便可使用內部組件啦!

值得注意的是:必須在Podfile前面須要添加你的私有Spec repo的git地址source, pod install時, 才能在私有repo中查找到私有庫, 像這樣:

source 'git@git.yaomaitong.net:iOSPods/ymtSpecs.git'
    
    platform :ios, '7.0'
    target "test" do
        pod 'Category', '~>1.0.1'
    end

通過測試, 這種方式能夠把你的全部能夠拆分出來的組件, 甚至是業務都來使用Pod管理, 這樣達到了解耦和單項更新優化某些組件不影響老版本的依賴使用, 出現問題修改Podfile中的依賴版本便可隨時回滾, 給開發了帶來極大的便利, 值得學習.

小小的更新

有同窗表示私有庫與公有庫同時使用有報錯,這個時候你在Podfile中把公有源加上就能夠的:
source 'https://github.com/CocoaPods/Specs.git'

若是實踐中有任何問題,能夠加我QQ:815187811,互相交流學習。

參考連接:
CocoaPods Guides
Private Pods
手把手教你發佈代碼到CocoaPods(Trunk方式)
使用Cocoapods建立私有podspec
COCOAPODS建立私有PODS

相關文章
相關標籤/搜索