轉(zhuǎn)載自:佳敏_朱 的文章
原文鏈接:https://segmentfault.com/a/1190000007947371
引言
剛畢業(yè)那段時間接觸到的一些文章到處都在大談iOS工程模塊化(CocoaPods化), 本人也一直在著力于將公司項目代碼解耦合, 但是因為一個人開發(fā)實在沒有必要將工程CocoaPods化, 所以遲遲沒有去研究將工程CocoaPods化的方法, 期間本人也抽時間去參加過蘑菇街等平臺舉辦的架構(gòu)交流會, 如今公司業(yè)務(wù)發(fā)展穩(wěn)定, 終于有時間將創(chuàng)建公有pod庫
將自己的代碼供其他開發(fā)者pod依賴使用的方法, 以及創(chuàng)建本地/內(nèi)網(wǎng)的私有Pod庫
供公司項目組件CocoaPods化的方法研究清楚, 把這幾天整理的筆記做個記錄.
創(chuàng)建公有Pod庫或者私有Pod庫, 實際上原理是一樣的, 都是基于git服務(wù)和repo協(xié)議, 不一樣的是, 兩者的版本索引查詢方式不一樣, 公有庫的podspec由CocoaPods/Specs管理, 而內(nèi)部私有使用的pod庫需要自己建立一個倉庫來管理podspec.
正文目錄
一. 創(chuàng)建公有Pod庫
1抡爹、注冊CocoaPods賬戶信息
2、創(chuàng)建共享庫文件并上傳到公有倉庫
3拘领、編輯.podspec文件
4脑沿、打tag, 發(fā)布一個release版本
5虾啦、發(fā)布自己的庫描述文件podspec給cocoapods
6、關(guān)于查找和使用新創(chuàng)建的庫
7、更新維護podspec
二. 創(chuàng)建私有Pod庫
1挣棕、創(chuàng)建一個git倉庫用來做內(nèi)部私有庫的Spec Repo
2歇攻、創(chuàng)建私有Pod組件庫
3固惯、然后將podspec加入私有Sepc repo中
4、查找和使用內(nèi)部組件庫
一. 創(chuàng)建公有Pod庫
例子: 我的第一個公共pod庫JM_ActionSheet, Podfile中添加pod 'JM_ActionSheet'
即可使用.
1缴守、注冊CocoaPods賬戶信息
想要創(chuàng)建一個開源pod庫, 首先我們需要注冊CocoaPods, 這里使用trunk方式, 作為一個iOS開發(fā)人員你一定安裝了CocoaPods, 那么只需要在終端執(zhí)行:
pod trunk register 郵箱地址 '用戶名' --verbose
這里我們一般使用github郵箱和用戶名, 然后在你的郵箱中會收到確認郵件, 在瀏覽器中點擊鏈接確認即注冊成功, 成功之后可以終端執(zhí)行:
pod trunk me
查看自己的注冊信息, 以后當你有了自己的開源Pod庫, 也可以用此方式隨時查看自己發(fā)布過的Pods;
[圖片上傳失敗...(image-57c4e4-1512716649002)]
2葬毫、創(chuàng)建共享庫文件并上傳到公有倉庫
共享庫需要三個必不可少的部分:
A.
共享文件夾
(文件夾存放著你要共享的內(nèi)容, 也就是其他人pod得到的文件, .podspec文件中的source_files需要指定此文件路徑及文件類型);
B.
LICENSE文件
(默認一般選擇MIT);
C.
庫描述文件.podspec
(本庫的各項信息描述, 需要提交給CocoaPods, pod通過這個文件查找到你共享的庫, .podspec文件的格式見第3點).
這一步分兩種情況:
A.如果你已經(jīng)有了現(xiàn)成的想要共享的文件,你只需要滿足上面三個部分,即可上傳到公有倉庫即可繼續(xù)其他的步驟;
B.你想要創(chuàng)建一個全新的工程去做自己的共享, 可以使用終端命令:
pod lib create 庫名
去根據(jù)需要選擇各項配置后創(chuàng)建一個標準的工程, 這里不做贅述, 具體請參考:Using Pod Lib Create;
你可以使用SourceTree等工具上傳你的代碼到公共倉庫, 關(guān)于如何使用命令行上傳代碼到遠端倉庫, 可以移步:iOS開發(fā)使用Git那些事, 這里不做贅述.
3镇辉、編輯.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文件所在文件夾, 執(zhí)行:
pod lib lint JM_ActionSheet.podspec
如有警告或者錯誤請重新檢查你的編寫正確性, 如果沒有問題會出現(xiàn)
-> JM_ActionSheet (1.0.1)
JM_ActionSheet passed validation.
4、打tag, 發(fā)布一個release版本
一切準備就緒后, 我們需要在你的git倉庫里面存在一個與.podspec文件中一致的version, 這里你可以在你的git倉庫中的releases一項去手動發(fā)布, 也可以在當前文件夾下使用終端命令:
git tag -m 'first release' '1.0.1'
git push --tag #推送tag到遠端倉庫
成功之后即可在你的releases里面看到這個tag的版本.
5贴捡、發(fā)布自己的庫描述文件podspec給cocoapods
同樣在這個文件夾下, 終端執(zhí)行:
pod trunk push JM_ActionSheet.podspec
將你的庫文件.podspec文件提交到公有的specs上面, 這一步做的操作是驗證你的podspec文件是否合法+提交到specs中(等同于fork;commit;push)+將上傳的podspec文件轉(zhuǎn)成json格式文件)忽肛,成功后會出現(xiàn)Congrats信息噢~
[圖片上傳失敗...(image-1db10c-1512716649002)]
6、關(guān)于查找和使用新創(chuàng)建的庫
成功后需要等待的時間不定, 目前一般比較快, 一般使用pod setup和pod search查看是否已經(jīng)可以使用, 本人創(chuàng)建這個庫之后一個星期內(nèi)每天嘗試pod setup
和pod 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文件, 刪除成功后再執(zhí)行:pod search 庫名
, 等待輸出:Creating search index for spec repo 'master'.. Done! 稍等片刻就會出現(xiàn)你想要的結(jié)果~
7烂斋、更新維護podspec
如果有錯誤或者需要迭代版本,修改工程文件后推送到遠端倉庫后, 需要修改podspec中的版本號, 并重新打tag上傳, 再進行新一輪的驗證和發(fā)布, 當然, 創(chuàng)建一個演示demo工程供其他開發(fā)者下載查看并不會影響我們的pod庫.
二. 創(chuàng)建私有Pod庫
私有Pod庫和公有Pod庫的創(chuàng)建方式?jīng)]有什么區(qū)別, 不一樣的是管理他們的spec repo不一樣
所以我們需要自己創(chuàng)建一個跟CocoaPods/Specs類似的倉庫來管理內(nèi)部創(chuàng)建的Pod庫的podspec文件, 供內(nèi)部人員更新和依賴使用內(nèi)部Pod組件庫.
私有repo的構(gòu)建形式有兩種, 一種是私有g(shù)it服務(wù)器上面創(chuàng)建屹逛,一種是本機創(chuàng)建.
本機創(chuàng)建請參考官方文檔:Private Pods,
這里介紹的是在公司內(nèi)部搭建的git服務(wù)器上面創(chuàng)建整個服務(wù)的方式.
1、創(chuàng)建一個git倉庫用來做內(nèi)部私有庫的Spec Repo
在私有服務(wù)器一個倉庫,一個用來存放所有共享庫的podspec, 這里創(chuàng)建好之后的內(nèi)部SSH協(xié)議地址是:git@git.yaomaitong.net:iOSPods/ymtSpecs.git
, 花錢買git的私有倉庫或者使用其他免費的第三方git服務(wù)(如Bitbucket等)創(chuàng)建的私有倉庫給到的http/https地址也一樣.終端輸入命令:
pod repo add ymtSpecs git@git.yaomaitong.net:iOSPods/ymtSpecs.git
將ymtSpecs添加到本地repo, 添加成功后可以在/.cocoapods/repos/
目錄下可以看到官方的specs:master和剛剛加入的specs:ymtSpecs
如果有其他合作人員共同使用這個私有Spec Repo的話在他有對應(yīng)Git倉庫的權(quán)限的前提下執(zhí)行相同的命令添加這個Spec Repo即可.
2源祈、創(chuàng)建私有Pod組件庫
繼續(xù)創(chuàng)建一個私有倉庫,用來建立需要共享的內(nèi)部組件, 以Category為例:git@git.yaomaitong.net:iOSPods/Category.git, 可以創(chuàng)建示例工程, 像創(chuàng)建公有的庫一樣, 填寫自己的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協(xié)議地址
,所以我們得放入http/https地址.
與公有庫的創(chuàng)建方式一樣,
pod lib lint Category.podspec
驗證成功之后push到倉庫, 然后打tag發(fā)布release版本.
3煎源、然后將podspec加入私有Sepc repo中
公有庫使用trunk方式將.podspec文件發(fā)布到CocoaPods/Specs, 內(nèi)部的pod組件庫則是添加到我們第一步創(chuàng)建的私有Spec repo中去, 在終端執(zhí)行:
pod repo push ymtSpecs Category.podspec
添加成功之后ymtSpecs中會包含Category庫的podspec信息, 可以前往~/.cocoapods/repos
下的ymtSpecs文件夾中查看, 同時git服務(wù)器中的遠端也更新了.
4、查找和使用內(nèi)部組件庫
執(zhí)行pod search Category
就能查到剛剛創(chuàng)建好的Category庫了, 然后在想要使用此組件的工程的Podfile中加入pod 'Category', '~>1.0.1'
即可使用內(nèi)部組件啦香缺!
值得注意的是:必須在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
經(jīng)過測試, 這種方式可以把你的所有可以拆分出來的組件, 甚至是業(yè)務(wù)都來使用Pod管理, 這樣達到了解耦和單項更新優(yōu)化某些組件不影響老版本的依賴使用, 出現(xiàn)問題修改Podfile中的依賴版本即可隨時回滾, 給開發(fā)了帶來極大的便利, 值得學(xué)習(xí).
參考鏈接:
CocoaPods Guides
Private Pods
手把手教你發(fā)布代碼到CocoaPods(Trunk方式)
使用Cocoapods創(chuàng)建私有podspec
COCOAPODS創(chuàng)建私有PODS