许多人都有误解,以为 pod install 只是首次使用,之后都使用 pod update 来更新。
其实不然。
pod install 除了首次安装时使用,之后增删也可以用。
pod update 只有在需要更新pod时使用。
详细区别
要理解他们的区别,就不能不提Podfile.lock这个文件了。
从后缀lock可以看出来,这是一个锁。锁什么呢?锁住pods的版本。
在首次执行 pod install 时,CocoaPods 根据Podfile文件来导入合适版本的pods。
然后,Podfile.lock文件文件被创建,此次所有pod的版本信息会被记录在该文件中。
之后在执行 pod install 时,会先从Podfile.lock文件读取信息。
已有记录的pod,会维持原版本。
无记录的pod则根据Podfile导入合适版本的pod。然后新导入的pod信息也会被记录在Podfile.lock文件中。
这就是锁住版本的意思。
如果想要升级版本,那就需要使用pod update了。pod update 会忽略Podfile.lock文件,直接升级pod到Podfile允许的最新版本。
pod update 执行后最新的版本信息也会记录到Podfile.lock文件。
如果只想更新其中一个库,使用 pod update podname。
举例说明
第一步:
首先,张三新建了一个工程,创建了Podfile,在Podfile中引入了A、B、C 三个 pod。
然后执行 pod install,A、B、C 被导入,假设版本都是1.0.0。
Podfile.lock 会被创建, 记录下A、B、C 的版本为1.0.0。
第二步:
过了一段事件,张三在Podfile中新增了pod D。
假设D的版本也是1.0.0,而B已经发布了新版本1.1.0。
张三仅想导入D,而保持B的版本不变,避免更新B带来的风险。
于是张三执行了 pod install。
执行中,CocoaPods 发现 Podfile.lock 中B的版本是1.0.0,于是B维持不变。发现新增了D,于是导入了1.0.0的D,并将D的信息记录到 Podfile.lock。
第三步:
又过了一段时间,李四加入了项目。
假设C的已经发布了新版本1.2.0。
李四clone项目后,他使用 pod install。
命令执行时,发现A、B、C、D在Podfile.lock中都有记录,因此他获取的A、B、C、D也会都是记录的1.0.0。
这样就保证了张三和李四使用的第三方是一致的。
第四步:
半个月后,张三觉得B的1.1.0足够成熟,可以集成了,但是C的1.2.0还需要再等等。
于是,他执行了 pod update B 来升级B,但维持C的版本为1.0.0。
CocoaPods 会忽略 Podfile.lock 中记录的B的信息,强行更新B到1.1.0。
然后张三本地的Podfile.lock中B的版本信息也会更新到1.1.0。
张三提交,李四拉取后,执行 pod install,于是李四的B也更新到1.1.0。又跟张三保持一致了。
总结
需要更新pod版本时使用 pod update,其他情况下使用 pod install。