引言
许多使用cocoapod的人认为pod install只在第一次使用CocoaPod设置项目的时候使用,pod update是在设置完项目之后使用的,但事实并非如此。
这篇指南将会说明什么时候应该使用pod install,什么时候应该使用pod update。
如果你觉得这篇指南太过于冗长看不下去,那么先给出干货:
当你需要向向你的项目中安装新的pod库时使用pod install。即使之前你已经有一个Podfile并且执行了pod install,即使你是在向一个已经使用了CocoaPods的项目中添加或移除pod库。
只有当你想要更新pod库的版本时才使用pod update。
命令的详细介绍
- pod install
pod install一般是你第一次想要为项目添加pod的时候使用的,它同样也使用在你为Podfile文件添加或移除pod库的时候。
每次pod install命令运行的时候,pod install会为每一个它安装的pod库在Podfile.lock文件中写入其版本号。Podfile.lock文件追踪每一个安装的pod库的版本号,并锁定这些版本号。
当你运行pod install是,它将只解决不在Podfile.lock中的pod库依赖关系
对于在Podfile.lock文件中的pod库,pod install会只下载Podfile.lock文件中指定的版本,而不会去检查这个库是否有更新的版本。
对于不在Podfile.lock文件中的pod库,pod install会搜索这个pod库在Podfile文件中指定的版本
- pod outdated
每当你运行pod outdated
命令时,CocoaPods会列出所有在Podfile.lock中的有新版本的pod库。这意味着当你对这些pod使用pod update PODNAME
时,他们会更新(只要新版本仍然遵守你在Podfile
中做的类似于pod 'MyPod', '~>x.y'
这样的限制)
- pod update
当你运行了pod update PODNAME
命令,CocoaPods会在不考虑Podfile.lock
中版本的情况下试着去查找PODNAME
的最新版本。pod update PODNAME
命令会将相应的pod更新到最新的版本(新版本仍然遵守你在Podfile
中做的限制
用法
通过pod update PODNAME
,你可以只更新某个特定的pod库(检查是否存在新版本并更新相应的pod库)。相反,pod install
则不会去更新已安装的pod库。
当你向Podfile
中添加了pod,你应该使用pod install
而不是pod update
去在不更新已安装的pod库的版本基础上安装新添加的pod库。
当你想过更新某个特定pod库(或所有的库)的版本时你只需要使用pod update
提交你的Podfile文件
提醒一下,即使你没有把Pods文件夹提交到你的共享仓库,你都应该总是commit并push你的Podfile.lock文件。
否则的话,将会破坏pod install
能够锁定pod库的已安装版本的整个逻辑(如上面所说的那样)
在Podfile中使用确定的版本是不够的
有人认为通过在Podfile
中为pod指定确定的版本就足够保证所有的用户都会拥有相同的版本。
随后他们可能会只使用pod update
(即使是在添加一个新pod时),并且认为这将不会更新其他pod库版本,因为已经在Podfile
中指定了确定的版本。
但是事实上,这样做不能够保证用户1和用户2总是取得完全相同的pod库版本。
一个典型的例子是,如果pod A
依赖于podA2
(通过在A.podspec
中的dependency 'A2', '~> 3.0
声明的)。在这种情况下,在你的Podfile中使用pod 'A', '1.0.0'
的确会强制用户1和用户2总是使用podA
的1.0.0
版本,但是:
-
用户1可能会使用
A2
的3.4
版本 - 同时当随后加入项目的用户2运行了
pod install
命令,他可能会得到podA2
的3.5
版本(因为A2
的维护者可能发布了一个新的版本)
这就是为什么唯一能够保证团队中所有的成员都用使用pod库的相同版本的方法就是使用Podfile.lock
并且正确的使用pod install
和pod update
Podfile.lock 是啥
Podfile.lock 是在第一次运行 pod install 时生成的,Podfile.lock 中会标注项目当前依赖库的准确版本,其中包括了项目在 Podfile 中直接标注使用的库,以及这些库依赖的其他库。这样的好处是当你跟小伙伴协同开发时,你的小伙伴同步了你的 Podfile.lock 文件后,他执行 pod install 会安装 Podfile.lock 指定版本的依赖库,这样就可以防止大家的依赖库不一致而造成问题。因此,CocoaPods 官方强烈推荐把 Podfile.lock 纳入版本控制之下。
但是,Podfile.lock 并不是一成不变的,当你修改了 Podfile 文件里使用的依赖库或者运行 pod update 命令时,就会生成新的 Podfile.lock 文件
网友评论