想直接操作上手的請略過前言部分,直接閱讀正文部分;
建議不要錯過精彩的前言哦,或許你看了對你有所啟發。
前言
隨著項目的發展,版本迭代,代碼的重構,我們項目中一般會有很多有業務功能行性公共的組件,app中可能多處都會使用到,甚至別的項目中也需要使用。比如我們FCS項目中有一個語音評測的功能,前期只是在FCS項目里面需要用到,后面在另一不同項目繪本閱讀需要用到相同語音評測的功能。此時我們一般有兩種做法,一是直接將這部分代碼copy到繪本閱讀這個項目中;二是將語音評測這部分邏輯給抽取出來,然后在分別在兩處使用。很明顯在項目初期,或者時間緊迫的情況下,第一種方式很好的能夠勝任工作,我們前期也是這么做的,但是我發現到了隨著項目的推移和發展,這樣做的時間成本太大了,效率也很低下,有很多隱患(評測邏輯一旦有變動,你需要改動兩次,而且你沒法保證兩次的改動一致)。正確的做法是在適當的時間應該立馬進行代碼重構,將這部分重復的代碼給抽取出來。至于重構的準則就是三次法則,出自Martin Fowler《重構改善既有代碼的設計》,這本書真的推薦大家一看,程序員必讀的書籍之一。扯遠了。。。
于是我花了幾天時間將語音評測這部分邏輯給抽取出來,建立了一個公共組件SpeechEvaluationKit
,在兩個項目中都能夠方便的使用,并且使用Cocoapods來管理。公司項目的核心代碼存放在Coding上,包括SpeechEvaluationKit
的代碼,這部分代碼我們是不能夠公開的,所以我建立的是私有庫(Private Pods),也是本文實戰操作所建立私有庫管理;相對應的當然就有公有庫,這部分的代碼不僅可以自己使用,還可以開源出來。
正文
關于CocoaPods的介紹、安裝、使用說明請查看官方文檔,同時本文的操作也是根據官方文檔介紹來完成的。
如下圖,項目的目錄結構如下圖:
- 新建[項目名].podspec
使用命令:pod spec create '項目名'
、pod lib create '項目名'
。
現有的項目,在項目根目錄運行終端命令:pod spec create 'SpeechEvaluationKit'
,根目錄下將會生成一SpeechEvaluationKit.podspec
文件。
如果還沒有創建項目,則使用pod lib create 'SpeechEvaluationKit'
,這一步會讓你填寫一些信息比如使用swift還是oc、是否使用測試框架等等,我的選擇如下:
最終生成的的目錄如下,新建項目寫完代碼后得將本地倉庫添加到遠程git倉庫,關聯命令為git remote add origin 遠程倉庫地址
- 配置podspec文件
Pod::Spec.new do |s|
s.name = 'SpeechEvaluationKit'
s.version = '1.0.0'
s.summary = 'SpeechEvaluationKit is a powerful voice evaluation library'
s.description = 'A powerful voice evaluation library,such as book reading, living and ips mission.'
s.homepage = 'https://git.coding.net/firstleap/SpeechEvaluation_iOS.git'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'XcqRomance' => 'xcqromance@163.com' }
s.source = { :git => 'https://git.coding.net/firstleap/SpeechEvaluation_iOS.git', :tag => s.version.to_s }
s.ios.deployment_target = '8.0'
s.source_files = 'SpeechEvaluationKit/Classes/**/*'
s.exclude_files = "SpeechEvaluationKit/Assets/**"
end
這個podspec文件包含的信息很重要,對于一個普通的pods庫上面的信息就足夠了,各個配置的含義基本都能夠看得懂,比如name
代表你的pods庫的名字,如果是公有pods庫,可以通過pod search 'name'
來搜索查看;version
則代表版本號,一旦庫有發布更新就通過修改這個版本號來發布更新;summary
和description
就是對pods庫的簡介和詳細說明,這個根據庫的功能來描述;source
一般填寫代碼倉庫地址可以是git、svn、github的地址;source_files
代表你這個pods庫包含的代碼,一般就是我們編寫公共組件的代碼,文件的描述都是可以用一些匹配公式,比如上面用到的**和*;exclude_files
一般是除了代碼之外的資源文件,比如圖片、音頻之類的;至于其他信息,你可以根據自己庫的需求來配置,比如YTKNetwork是基于AFNetworking的封裝,所以還添加了s.dependency "AFNetworking", "~> 3.0"
依賴。上面的這些信息必須讀嚴謹的配置,否則在下一步驗證的時候會出現警告甚至報錯不通過。比如我之前的summary沒有更改而是使用的模版信息,就出現如下警告:
- 驗證podspec文件和項目(
pod lib lint Name.podspec
)
執行命令pod lib lint SpeechEvaluationKit.podspec
(后面還可以添加參數--verbose
,有助于出錯的問題定位)
一般到這一步會遇到很多警告和錯誤導致驗證不通過,此時不要心急,一個一個問題解決,在stack overflow尋找解決方案,你所遇到的問題,前人們很多都已經遇到過了。
驗證通過提示信息如下:
一旦驗證通過,你就離成功只有一步之遙了; - 建立tag,并且上傳git倉庫,tag版本和podspec文件的
version
版本保持一致就行了;git 常見命令傳送門
git tag -a 1.0.0 -m 'pod私有倉庫' #打tag
git push origin 1.0.0:1.0.0 #上傳tag
- 發布項目到cocoapods官方倉庫
等等...在這之前你得先有一個Cocoapods賬號,也就是得先注冊一個賬號,執行以下命令:
pod trunk register romance.xie@firstleap.cn 'romance' --description='My working computer'
郵箱、名字、描述該為自己的就行,然后你將會郵箱會收到一封郵件,點擊右鍵鏈接激活,然后通過pod trunk me
來查看自己是否注冊成功:
如果是多人開發,只需執行命令:pod trunk add-owner '項目名' '郵箱'
將伙伴添加到項目中;
5.1 公有庫的發布(即開源的,會將podspec文件上傳到cocoapods官網,當執行pod install 或者 pod update的時候會根據配置文件取對應的源代碼)
發布命令:pod trunk push 項目名.podspec
使用pod search 項目名
查看是否上傳成功,下圖是我們app中日志收集的公有庫FLogKit
,pod search FLogKit
5.2 私有庫的發布
發布命令:pod repo add '倉庫名' '倉庫地址'
如果是現有的項目,代碼放在coding私有項目中,倉庫地址直接填寫第2步podspec配置文件的s.source
的地址,即執行以下命令即可:pod repo add 'SpeechEvaluationKit' 'https://git.coding.net/firstleap/SpeechEvaluation_iOS.git'
;
如果是新建的項目,即第1步中,使用pod lib create '項目名'
初始化的項目,就需要先在服務器建立一個私有倉庫,我這里以在Coding中建立私有倉庫為例,倉庫建立好后將會有獲得git倉庫地址,
記得將寫好的代碼提交到Coding的Git倉庫中,執行發布命令pod repo add 'SpeechEvaluationKit' 'https://git.coding.net/romance/SpeechEvaluationKit.git'
;
使用open ~/.cocoapods/repos
查看是否創建好私有倉庫,一旦代碼有更新,使用pod repo update
更新pod私有倉庫,刪除私有倉庫pod repo remove '項目名'
。 - 使用組件
pod 'SpeechEvaluationKit', :path => '../'
,開發模式
pod 'SpeechEvaluationKit'
,穩定之后或者其他項目的使用
總結
看完本文知道Cocoapods管理公共組件是多么簡單了吧,當然里面一些深入的內容需要在實際使用過程中才領悟了解。整個過程及其使用就只有五步:新建podspec文件->配置podspec文件->驗證podspec文件和項目->上傳tag->發布更新。這步驟你記住了么。
如果你覺得本文對你有幫助,就請你點亮底部的??吧,你的鼓勵是我前進的動力!