CocoaPods 私有庫 實現元件化
阿新 • • 發佈:2019-01-09
先說下CocoaPods拉取開源庫的原理:
我們知道 CocoaPods 有一個開源的索引倉庫[Specs](https://github.com/CocoaPods/Specs),倉庫存放著所有開源庫的各個版本的`.podspec`檔案,`.podspec`檔案包含中記錄著原始碼的地址。我們首次使用CocoaPods時,會將這個檔案庫克隆到本地`~/.cocoapods/repos/master`。
- 在Podfile目錄下執行 `pod install` 命令,會從本地的索引庫查詢該庫的`.podsepc`,如果本地不存在會從遠端拉取最新的索引庫。
- 根據索引庫中查到的`.podspec`檔案內容,獲取原始碼地址。
- 從原始碼地址拉取對應版本的程式碼。
使用是可以發現,首次匯入一個開源庫時速度較慢,之後再匯入時會很快。是因為CocoaPods在本地會有一個快取目錄,存放開源庫的原始碼,首次下載後,再次匯入該庫時,會直接從本地複製過去。
檢視快取列表使用`pod cache list`,快取路徑為`~/Library/Caches/CocoaPods/Pods/`。
私有倉庫
私有庫的建立
由於CocoaPods的索引倉庫是開源的,所有人都可以訪問。公司的專案如果也想使用CocoaPods管理原始碼,而不開放原始碼的話,我們可以通過建立私有倉庫來模擬官方的Specs倉庫。
步驟:
- 在私有git上建立一個索引倉庫,例:YSMSpecs,用於存放索引檔案。
- 將遠端索引庫新增到本地,`pod repo add YSMSpecs YSMSpecs_source_url`。使用`pod repo`可以檢視本地的索引倉庫列表。
- 本地建立我們的原始碼工程,可以使用`pod lib create YSMKit`,建立一個模板工程。
- 在模板工程裡進行開發並替換 ReplaceMe 檔案,修改`.podspec`檔案,推送到遠端原始碼倉庫,打tag,提交。原始碼倉庫部署完成。
- CocoaPods不允許有Podspecs lints錯誤,所以需要進行Podspecs lints(翻譯不好,會檢查語法錯誤)驗證。這裡可以使用`pod lib lint`或者`pod spec lint`,區別在於前者不會聯網,而後者還會檢查外部的倉庫和相關的標籤。
- 檢查沒有錯誤之後,推送`.podspec`檔案到本地的索引倉庫,本地索引倉庫會自動push到遠端索引倉庫。`pod repo push YSMSpecs YSMKit.podspec`,這一步會自動進行`pod spec lint`聯網檢查。索引庫部分完成。
第6步如果使用`pod trunk push`,會將索引庫推送到官方的Specs倉庫中。
到這裡私有倉庫是搞完了。
私有庫的使用
-
在宿主工程的Podifle檔案中引入私有庫:`pod 'YSMKit'`
-
在檔案的最上方新增索引庫地址
source 'https://.../YSMSpecs/git' source 'https://github.com/CocoaPods/Specs.git'
然後執行 pod install,就可以使用了。
注意: 如果用到了其他開源庫的話,一定要加上官方Specs地址,否則只會去查詢私有索引庫。
私有庫的維護
後續需要更新維護倉庫程式碼的流程:
- 在原始碼工程修改程式碼之後,修改`.podspec`檔案版本號,把原始碼提交,打上tag,推送到遠端倉庫。
- 把`.podspec`檔案提交到本地的私有索引庫中(會自動幫我們提交到遠端索引庫)。
- 回到宿主工程,修改Podfile中的版本,執行`pod install`(不行就`pod update`)。
其他注意事項
- 在podfile檔案中 增加`inhibit_all_warnings!`,這樣pod的工程不會顯示任何警告。
- 切記:swift中需要設定好訪問許可權!!!
- 新引入一些庫之後執行`pod install`,會報錯**Build Settings**,例如:引入Swift庫之後經常會報的“swift version”的錯誤,需要去修改Build Setting,其實可以在Podfile中的`post_install`中修改。
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['SWIFT_VERSION'] = '3.2' end end end