在上一篇【iOS 元件化開發(一):遠端私有庫的基本使用】中我們已經實戰了遠端私有庫的基本操作,但是元件不可能上傳一次就完事了,隨著業務的增加,我們的元件可能還需要新增更多的東西,或者修復一些問題,這就需要我們對私有庫程式碼進行升級與維護
這裡以對基礎元件裡新增了一個Cache工具為例
![新增Cache工具](https://i.iter01.com/images/54116c1ac411812d8f3f7bc85bd3c6172927c603f48bd9909d5a1dc57b3498f0.png)
新增完成後我們需要更新到遠端倉庫
一、更新遠端倉庫
cd 到本地倉庫的位置,執行以下操作
1、程式碼更新
git add .
git commit -m '更新描述'
git push origin master
複製程式碼
![程式碼升級](https://i.iter01.com/images/288930e6896e90180d9616102a5d55c1af9964a2b9a6b3cb241e1a1bc1d9a1a3.png)
2、版本更新
版本更新 這一步非常重要,為更新索引庫做準備
git tag -a '新版本號' -m '註釋'
git push --tags
複製程式碼
![版本升級](https://i.iter01.com/images/9a7607a1138c8113cfd998e14ebff6cebc867cbf7e28d1efe264c6a8c9e751fa.png)
檢視遠端倉庫,標籤數已經有2個了,點進去就可以看到0.2.0,這裡我們就不去看了
![iOS 元件化開發(二):遠端私有庫的更新與子庫](https://i.iter01.com/images/6a4d14d07f3aa29871f80b3041eb7ad150369421bb71e18b2ffb59e27517828c.png)
二、修改描述檔案並更新索引庫
1、修改Sepc
開啟你的xx.podspec
檔案,將原本的版本號改為0.2.0
,與剛剛的tag保持一致
s.version = '0.2.0'
複製程式碼
2、驗證遠端Spec
pod spec lint --private
複製程式碼
![驗證遠端Spec](https://i.iter01.com/images/5c7e7c93b7faa07fb93ce0d5ce93feac008b0cd53f2818be3ab8c2758cdf40a5.png)
3、更新索引庫
pod repo push 索引庫名稱 xxx.podspec
複製程式碼
![更新索引庫](https://i.iter01.com/images/6d96fb4c939ee34936db310afbfeb0c0d99b41fd0ae45a7f849bd50a445b6e4b.png)
三、更新使用
// --no-repo-update 不更新本地索引庫
// 因為剛剛已經自己手動更新過了,所以這裡我們選擇跳過更新
pod update --no-repo-update
複製程式碼
![更新框架](https://i.iter01.com/images/d921ef3d24451e60428fbef9255a09b113d4bde8f7213ffc03cfb30f3ec196f3.png)
![更新成功](https://i.iter01.com/images/987539c525f265aab67dae9575ae2708fc0b9b7aeb2ab9e76459daccaab4ba73.png)
四、第三方依賴
當我們的私有庫需要依賴其它第三方才可以正常使用時,我們就需要在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'
複製程式碼
![Subspecs](https://i.iter01.com/images/2c9c282ccafbcb7bc6a1c6ce5b810f3deba21996b6b1ede1639adf422a31c9e3.png)
可以看到,如果我們只需要用到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'
複製程式碼
![subspec新增成功](https://i.iter01.com/images/1f6e3a6827c77bb2e67d581a9c5c9ff7f1be993392a33a00d380b58c491383da.png)
現在就可以愛裝哪個就裝哪個了,在Podfile中指定要安裝的子庫就行了
pod 'LXFBase/Cache'
複製程式碼
pod install
複製程式碼
![安裝指定子庫與依賴庫](https://i.iter01.com/images/61228f8a4630a6e61daad1a01674045180fe812696d059f47d679d3977ff2f09.png)