pod install vs pod update

1,466 阅读3分钟

理解pod install和pod update区别的关键在于了解它们背后的原理

pod install做了些什么?

说在前面:内部究竟做了具体哪些事情,我也不清楚。但通过实验和官方的文档可以了解大致

  1. pod install:根据Podfile、Podfile.lock和当前已经安装的Pod情况(即Pods目录下的Pod库),来决定安装、删除或更新一些Pod库
  2. install结束后,会将安装的pod库以及所有直接、间接依赖的pod库写入Podfile.lock中

每个iOS开发都知道pod install可以增加、删除Pod。但其实,也可以更新Pod。

我之前在该部分也是有同样的误区:觉得pod install不能用于pod库的更新

这是有原因的,

  1. 一方面跟命令的名称有关,install 和 update两个单词的意思区别太明显
  2. 另一方面,在某些情况下,发现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

  1. 假设创建一个新工程,Podfile中引入库A,写法是pod A, '1.0',执行pod install
  2. 完成后,Podfile.lock中库A的版本就是是1.0了。现在我们修改Podfile中A的依赖为pod A(假设当前A库的最新版本是1.1)
  3. pod A的写法其实是想将库A更新到1.1版本,但此时执行pod install后,发现A还是1.0版本
  4. pod install时,check到Podfile.lock中记录了1.0版本,check Podfile时,发现1.0的版本也可以满足pod A,所以没有进行任何更新

pod install如何更新pod

  1. 假设创建一个新工程,Podfile中引入库A,写法是pod A, '1.0',执行pod install
  2. 完成后,Podfile.lock中库A的版本就是是1.0了。现在我们修改Podfile中A的依赖为pod A, 1.1(假设当前A库的最新版本是1.1)
  3. 进行pod install,发现A版本则更新到了1.1
  4. 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更新目的

参考