在上一篇【iOS 元件化開發(一):遠端私有庫的基本使用】中我們已經實戰了遠端私有庫的基本操作,但是元件不可能上傳一次就完事了,隨著業務的增加,我們的元件可能還需要新增更多的東西,或者修復一些問題,這就需要我們對私有庫程式碼進行升級與維護
這裡以對基礎元件裡新增了一個Cache工具為例
新增完成後我們需要更新到遠端倉庫
一、更新遠端倉庫
cd 到本地倉庫的位置,執行以下操作
1、程式碼更新
git add .
git commit -m '更新描述'
git push origin master
複製程式碼
2、版本更新
版本更新 這一步非常重要,為更新索引庫做準備
git tag -a '新版本號' -m '註釋'
git push --tags
複製程式碼
檢視遠端倉庫,標籤數已經有2個了,點進去就可以看到0.2.0,這裡我們就不去看了
二、修改描述檔案並更新索引庫
1、修改Sepc
開啟你的xx.podspec
檔案,將原本的版本號改為0.2.0
,與剛剛的tag保持一致
s.version = '0.2.0'
複製程式碼
2、驗證遠端Spec
pod spec lint --private
複製程式碼
3、更新索引庫
pod repo push 索引庫名稱 xxx.podspec
複製程式碼
三、更新使用
// --no-repo-update 不更新本地索引庫
// 因為剛剛已經自己手動更新過了,所以這裡我們選擇跳過更新
pod update --no-repo-update
複製程式碼
四、第三方依賴
當我們的私有庫需要依賴其它第三方才可以正常使用時,我們就需要在spec檔案中開啟依賴,例如下面所示程式碼,表明當前倉庫需要依賴AFN和SDWebImage
s.dependency 'AFNetworking', '~> 3.2.0'
s.dependency 'SDWebImage', '~> 4.3.3'
複製程式碼
修改後更新操作同上所述,這裡就不再贅述了。
但是這裡存在一個問題,如果來了一位新的小夥伴,他所負責的部分只需要LXFBase下的Category,而LXFBase下的Cache才需要依賴SDWebImage,此時他若是pod一整個LXFBase豈不是平白無故安裝了第三方依賴庫,那應該怎麼做呢?
方案就是可以通過子庫Subspecs來解決因需要一個小小的工具而依賴整個基礎元件的問題
五、子庫Subspecs
什麼是Subspecs?這裡我們可以搜尋一下SDWebImage
pod search 'SDWebImage'
複製程式碼
可以看到,如果我們只需要用到SDWebImage中的GIF功能,那麼並不需要將整個SDWebImage都下載下來,在Podfile中將~~pod 'SDWebImage'
~~ 改為 pod SDWebImage/GIF
即可單獨使用這一功能
那接下來我們就來看看怎麼描述一個子庫吧
子庫格式
s.subspec '子庫名稱' do |別名|
end
複製程式碼
因為這裡已經分離出子庫了,所以s.source_files
和s.dependency
就不能這麼使用了,需要我們在子庫裡分別指定,所以我們直接把原來的s.source_files
和s.dependency
都註釋掉。寫法參考如下
# s.source_files = 'LXFBase/Classes/**/*'
# s.dependency 'SDWebImage', '~> 4.3.3'
s.subspec 'Cache' do |c|
c.source_files = 'LXFBase/Classes/Cache/**/*'
c.dependency 'SDWebImage', '~> 4.3.3'
end
s.subspec 'Category' do |c|
c.source_files = 'LXFBase/Classes/Category/**/*'
end
s.subspec 'Tool' do |t|
t.source_files = 'LXFBase/Classes/Tool/**/*'
end
複製程式碼
修改後再按之前的步驟更新索引庫和元件庫就可以了
ps: 在新增第三方依賴描述後做驗證或者上傳操作可能會很慢,因為它在克隆第三方庫如SDWebImage,有興趣的可以在命令後面加入--verbose
來檢視詳情情況
pod spec lint --private --verbose
複製程式碼
在成功更新元件庫和索引庫後我們再來搜尋一下試試
pod search 'LXFBase'
複製程式碼
現在就可以愛裝哪個就裝哪個了,在Podfile中指定要安裝的子庫就行了
pod 'LXFBase/Cache'
複製程式碼
pod install
複製程式碼