在iOS项目开发中,大部分都会使用Cocoapods作为依赖库管理工具,在这里和大家分享总结下CocoaPod相关原理
1. pod install
原理
1.1pod install
和pod update
区别
-
pod install
:执行该命令,会去优先查找是否有podfile.lock
文件,如果有有该文件,会直接从该文件中读取符合podfile
要求的版本信息,如果需要安装的库不在podfile.lock
中,则会根据podfile中的版本描述去检索,下载好后更新podfile.lock
文件 -
pod update
:该命令忽略podfile.lock
文件信息,直接读取podfile文件进行信息检索下载,下载好后更新podfile.lock
文件
1.2下载原理
- 根据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
- 验证成功,根据
s.source_files
找到需要导入的代码文件,下载到本地
1.3集成原理
- CocoaPods将所有下载的远程依赖库都放到一个名为pods的项目中,然后让主项目依赖Pods,pods项目最重会编译成
libPods-target.a
静态库文件,或者使用use_frameworks!
之后编译成Pods_target.framework
动态库文件,然后target去依赖这个.a
或者.framework
- 每个target会根据需要在
Build Phases
中插入Copy Pods Resources
脚本,将Pods依赖库的各种文件复制到目标文件中 - Install同时会生成target对应的
Pod_target.debug.xcconfig
配置文件,在编译时设置所有的依赖和参数
1.4版本控制
-
pod install
之后,CocoaPods会生成Podfile.lock
和Manifest.lock
两个文件,Manifest.lock
可以看成是Podfile.lock
的副本 - 在多人协同开发的过程中,
Manifest.lock
由于位于Pods
文件夹下往往是被忽略提交管理的文件,Podfile.lock
记录了当前pod的版本信息,项目中依赖的第三方库信息等,协同开发的过程往往提交用于告知同事同步pod信息 -
pod install
会在target中插入Check Pods Manifest.lock
脚本,检测Podfile.lock
和Manifest.lock
内容是否一致,不一致则说明pod信息发生了变更
2.版本控制解决方案
- 统一提交Pods文件夹、podfile.lock、Manifest.lock
- 修改
Check Pods Manifest.lock
脚本,当比对结果不一致时,执行pod install
更新
网友评论