Podfile
中增长
或删除
某个pod后, 也是使用这个命令. 而不是pod update
.pod install
命令, 下载并安装新的pod时, 它会为Podfile.lock
文件中的每一个pod写入已安装的版本. 此文件跟踪每一个pod的已安装版本并锁定这些版本(.lock命名所以而来).当运行pod install
,它只解析Podfile.lock
中还没有列在其中的pod的依赖库.html
Podfile.lock
中列出的pod, Podfile.lock
不会尝试检查是否有更新的版本.Podfile.lock
中列出的pod, 会搜索与Podfile
(如中所述pod 'MyPod', '~>1.2')匹配的版本或最新的版本.注: 第一次运行pod install
的时候, .xcworkspace项目
和Pods目录
还不存在, pod install
命令也会建立.xcworkspace
和Pods目录
, 但这是pod install
命令的顺带做用
,而不是它的主要做用
.git
当运行pod outdated
时, CocoaPods将列出全部比Podfile.lock
(每一个pod当前安装的版本)中, 已经列出的版本更新的pod版本. 这意味着若是你在这些pod上运行pod update PODNAME
, 它将会把指定的pod更新到最新版本.ide
当运行pod update PODNAME
时, CocoaPods将尝试查找PODNAME
更新的pod版本, 会忽略掉Podfile.lock
中已经存在的版本.函数
若是直接运行pod update
, 没有指定PODNAME
, CocoaPods会把Podfile中全部的pod都更新到最新版本.(若是已是最新版本了, 则不更新)ui
使用pod update PODNAME
, 将只能更新特定的pod(检查是否存在新版本并相应地更新pod). 相反, pod install不会尝试更新已安装的pod的版本.spa
当向Podfile中添加一个pod时, 应该运行pod install
, 而不是用pod update
来安装这个新pod.版本控制
只有在想要更新特定pod(或全部的pod)的版本时才会使用pod update
.code
有时候可能你不想提交Pods目录到源代码管理中. 可是在多人开发的状况下, 必定要提交Podfile.lock
这个文件, 由于这个文件里面记录了你的Podfile中全部pod的版本信息. 为避免你的Podfile中的pod版本和别人的Podfile中的pod发生版本不同的状况, 而致使出现函数找不到或者其余的错误.htm
user1建立了一个项目, 而且想用A
, B
, C
这3个pod库, 这个时候用pod install
安装了这些pod库, 而且假设这3个库的版本号都是1.0.0
, 这些版本号等信息会记录在Podfile.lock
文件中.ip
根据项目的进度需求, 添加了D
这个pod库到项目中, 这个时候应该使用pod install
去安装D
这个库到项目中, 即便在添加D
这个库以前, B
的版本被维护者更新到了1.1.0
, 使用pod install
也只会安装D
这个库到项目中, 而不会去帮你更新B
的版本. 从而不会出现由于B
的版本更新后, 假如某些函数过时了, 或者某些函数被移除了, 而致使你被迫须要修改项目代码.
假设团队中新增长了一位基友user2, 他克隆了项目, 而且pod install
. (前提是你没有把Pods目录
添加到源代码管理中), 若是你将Podfile.lock
提交到了版本控制. 那么基友安装后的pod会和你的如出一辙, 不会出现他的pod版本比你的高. 即使如今C
的版本更新到了1.2.0
, 基友安装的也是1.0.0
版本. 由于在Podfile.lock
中记录的pod C
就是1.0.0
版本.
后来, user1想要检查下是否有更新pod的版本. 运行pod outdated
, 会告诉你pod B
有一个新1.1.0
版本, pod C
已是1.2.0
版本. user1决定他想要更新pod B
, 但不更新pod C
. 所以, 他会运行pod update B
, 将B
从1.0.0
版本更新到版本1.1.0
(并相应的更新Podfile.lock
), 但会将pod C
保留在版本中1.0.0
(不会将其更新为1.2.0
).
有些人可能会认为, 经过在Podfile
中指定pod确切的版本, 像pod 'A', '1.0.0'
, 就足以保证每个人和其余人都会有相同的版本. 而后他们甚至可使用pod update
, 即便只是添加一个新的pod, 认为它永远不会有更新其余pod版本的风险, 由于它们在Podfile中被固定到了一个特定的版本.
但事实上, 这还不足以保证咱们上面场景中的user1和user2, 始终得到全部pod的彻底相同的版本. 举一个典型的例子, 若是pod A
中有对pod A2
的依赖, 在A.podspecas
中声明dependency 'A2', '~> 3.0'
. 在这种状况下,pod 'A', '1.0.0'
在你的Podfile中使用的时候, 确实会强制user1和user2始终使用A 1.0.0 的pod版本
.
可是: user1最终可能获取到的A2版本是pod 3.4
(由于那时A2是最新版本), 当user2在之后加入项目时运行pod install
, 他可能会在A2的版本中得到pod 3.5
(由于维护者A2可能在此期间发布了新版本).
这就是为何为了确保在每一个团队成员使用的每台电脑上, 全部相同的pod版本的惟一方法, 是使用Podfile.lock
和正确使用pod install
和pod update
的缘由.
是否将Pods文件夹添加到源代码管理中都取决于你,由于工做流程因项目而异. 咱们建议您将Pods目录保留在源代码管理下, 不要将其添加到您的.gitignore. 但最终这个决定取决于你:
不管你是否在忽略Pods目录, Podfile并Podfile.lock应始终版本控制下保持.
本文内容来源:
https://guides.cocoapods.org/using/pod-install-vs-update.html
https://guides.cocoapods.org/using/using-cocoapods.html