在iOS項目開發(fā)中,大部分都會使用Cocoapods作為依賴庫管理工具,在這里和大家分享總結(jié)下CocoaPod相關(guān)原理
1. pod install
原理
1.1pod install
和pod update
區(qū)別
-
pod install
:執(zhí)行該命令,會去優(yōu)先查找是否有podfile.lock
文件,如果有有該文件,會直接從該文件中讀取符合podfile
要求的版本信息,如果需要安裝的庫不在podfile.lock
中,則會根據(jù)podfile中的版本描述去檢索,下載好后更新podfile.lock
文件 -
pod update
:該命令忽略podfile.lock
文件信息,直接讀取podfile文件進行信息檢索下載,下載好后更新podfile.lock
文件
1.2下載原理
- 根據(jù)tag或者version檢索到匹配的提交版本
= 0.1 任何大于等于0.1的版本
~> 0.1 0.1的版本到0.2的版本,包括0.1,不包括0.2潮秘,總是匹配最新版本 - 檢索出該提交中的
.podspec
文件,驗證s.name
與podfile中的是否一致,不一致則Unable to find a specification for 'xxx
- 驗證成功,根據(jù)
s.source_files
找到需要導(dǎo)入的代碼文件,下載到本地
1.3集成原理
- CocoaPods將所有下載的遠程依賴庫都放到一個名為pods的項目中,然后讓主項目依賴Pods,pods項目最重會編譯成
libPods-target.a
靜態(tài)庫文件,或者使用use_frameworks!
之后編譯成Pods_target.framework
動態(tài)庫文件,然后target去依賴這個.a
或者.framework
- 每個target會根據(jù)需要在
Build Phases
中插入Copy Pods Resources
腳本,將Pods依賴庫的各種文件復(fù)制到目標(biāo)文件中 - Install同時會生成target對應(yīng)的
Pod_target.debug.xcconfig
配置文件,在編譯時設(shè)置所有的依賴和參數(shù)
1.4版本控制
-
pod install
之后,CocoaPods會生成Podfile.lock
和Manifest.lock
兩個文件,Manifest.lock
可以看成是Podfile.lock
的副本 - 在多人協(xié)同開發(fā)的過程中,
Manifest.lock
由于位于Pods
文件夾下往往是被忽略提交管理的文件,Podfile.lock
記錄了當(dāng)前pod的版本信息,項目中依賴的第三方庫信息等,協(xié)同開發(fā)的過程往往提交用于告知同事同步pod信息 -
pod install
會在target中插入Check Pods Manifest.lock
腳本,檢測Podfile.lock
和Manifest.lock
內(nèi)容是否一致,不一致則說明pod信息發(fā)生了變更
2.版本控制解決方案
- 統(tǒng)一提交Pods文件夾、podfile.lock质涛、Manifest.lock
- 修改
Check Pods Manifest.lock
腳本,當(dāng)比對結(jié)果不一致時,執(zhí)行pod install
更新