理解pod install和pod update区别的关键在于了解它们背后的原理
pod install做了些什么?
说在前面:内部究竟做了具体哪些事情,我也不清楚。但通过实验和官方的文档可以了解大致
- pod install:根据Podfile、Podfile.lock和当前已经安装的Pod情况(即Pods目录下的Pod库),来决定安装、删除或更新一些Pod库
- install结束后,会将安装的pod库以及所有直接、间接依赖的pod库写入Podfile.lock中
每个iOS开发都知道pod install可以增加、删除Pod。但其实,也可以更新Pod。
我之前在该部分也是有同样的误区:觉得pod install不能用于pod库的更新
这是有原因的,
- 一方面跟命令的名称有关,install 和 update两个单词的意思区别太明显
- 另一方面,在某些情况下,发现pod install并不能更新pod
问题的原因(同时也是理解pod install的关键点)在于:pod install执行时会check Podfile.lock
pod install执行时会check Podfile.lock
- Podfile.lock的存在是为了精确地保证团队个成员能拿到完全相同的依赖代码库
- 所以在install时,对于每个pod,都会同时check Podfile和Podfile.lock
再来讲一下上面提到的:在某些情况下,发现pod install并不能更新pod
- 假设创建一个新工程,Podfile中引入库A,写法是
pod A, '1.0'
,执行pod install - 完成后,Podfile.lock中库A的版本就是是1.0了。现在我们修改Podfile中A的依赖为
pod A
(假设当前A库的最新版本是1.1) pod A
的写法其实是想将库A更新到1.1版本,但此时执行pod install后,发现A还是1.0版本- pod install时,check到Podfile.lock中记录了1.0版本,check Podfile时,发现1.0的版本也可以满足
pod A
,所以没有进行任何更新
pod install如何更新pod
- 假设创建一个新工程,Podfile中引入库A,写法是
pod A, '1.0'
,执行pod install - 完成后,Podfile.lock中库A的版本就是是1.0了。现在我们修改Podfile中A的依赖为
pod A, 1.1
(假设当前A库的最新版本是1.1) - 进行pod install,发现A版本则更新到了1.1
- pod install时,check到Podfile.lock中记录了1.0版本,check Podfile时,发现1.0的版本也无法满足
pod A, 1.1
,所以下载1.1版本的A
既然pod install可以更新pod,那pod update的存在有必要吗?
当然有!
pod update做的工作是:不关心Podfile.lock的内容,根据pod update后面指定的pod(或不指定时则更新Podfile中所有的pod),结合Podfile中的版本信息,更新相应pod,并将更新结果写入Podfile.lock
原因是:
- pod install是针对整个工程的所有库进行增、删、改;有时我们只想只更新某个库,此时用pod update更方便
- 上一小节中,我们提到一种情况,使用pod install可有些情况下无法达到希望的pod更新目的