首先,我想提一提的是,我已经阅读了cocoapods指南https://guides.cocoapods.org/using/pod-install-vs-update.html
似乎还不清楚我们为什么要在每个人都只使用pod install命令并且我们在podfile中严格指定所有版本的设置中提交Podfile.lock。然后,.lock文件似乎是多余的。
假设我们有一个使用ReactiveSwift的项目。ReactiveSwift在其podspec中对Result容器有依赖性,如下所示:
s.dependency 'Result', '~> 3.2'
Run Code Online (Sandbox Code Playgroud)
我的假设是,我真的不应该在乎ReactiveSwift所依赖的内容,因为我只是要对严格指定的ReactiveSwift版本进行pod安装。
对于我自己开发的Pod,我可以影响他们的podfile和podspec以严格指定我要使用的一个版本。
因此,没有podfile.lock的项目中的简化流程为:
如果需要在依赖版本中进行更改,则开发一个功能-只需在podfile中直接指定它,而无需提交Podfile.lock
将功能合并到master分支,然后CI会使用新的podfile运行pod install命令
现在,配置项已使用了所有正确版本的Pod,并且可以正确构建我的应用
在这种情况下是否需要Podfile.lock?
Nea*_*all 29
您Podfile指定了直接依赖项的版本,但它可能会引起一些歧义。例如,也许您需要 2.2 版的库,但您并不关心是 2.2.1 还是 2.2.2。第一次执行时pod install,Cocoapods 只会获得最新版本的 2.2.x。
然而,也许 2.2.2 有一个错误,你在不知不觉中依赖于你的应用程序。维护者发布了 2.2.3,如果你还没有签入你的锁定文件,你的一位同事或者你的 CI 系统可能会构建一个崩溃的应用程序版本并导致各种混乱。(它仍然适用于您的机器!)
除了锁定直接依赖项的确切版本之外,锁定传递依赖项也同样重要。
总之,Podfile.lock确保您不会意外升级您引入的库,同时Podfile只关心您的直接依赖项。
首先,我想参考官方文档:
什么是
Podfile.lock该文件是在第一次运行后生成的
pod install,用于跟踪安装的每个 Pod 的版本。例如,假设在 Podfile 中指定了以下依赖项:
pod 'RestKit'运行
pod install将安装 RestKit 的当前版本,导致Podfile.lock生成指示安装的确切版本(例如RestKit 0.10.3)。多亏了Podfile.lock,pod install稍后在另一台机器上运行这个假设的项目仍然会安装 RestKit 0.10.3,即使有更新的版本可用。CocoaPods 将遵守 Pod 版本,Podfile.lock除非依赖项在 Podfile 中更新或被pod update调用(这将导致Podfile.lock生成新的)。
回到你的问题:
正如您上面提到的,如果您处于每个人都只使用pod install命令并且每个依赖版本都在 podfile 和相关 podspec 中严格指定的设置中,那么Podfile.lock似乎是多余的。
但是,我认为这是罕见的,而不是Cocoapods.
例如,我们可以
pod 'RestKit'~> 0.1.2指定版本 0.1.2 和版本到 0.2,不包括 0.2在这些情况下,提交Podfile.lock将非常有用。
顺便说一句,我认为问题标题最好从
Why should you include Podfile.lock under version control?
到
Why should I include Podfile.lock under version control in this scenario?