CocoaPods:"修复"在pod源处理更新?

时间:2014-02-28 14:07:02

标签: git cocoapods

我刚刚开始使用CocoaPods,而且有些东西对我来说并不完全清楚。

据我了解,pod命令行实用程序从https://github.com/CocoaPods/Specs

获取PodSpecs

pod install查找这些规范并从本地 Podfile 克隆相应的存储库(就像在github上一样)。

pod update再次获取规范并检查更新。如果有与本地 Podfile 匹配的新版本,则会获取这些更新。

现在我注意到一些有podspec的项目更新了他们的存储库而没有增加他们的podspec中的版本号。

这意味着如果我在时间A安装一个吊舱并且有人在时间B安装相同的版本,他们会得到不同的来源。

此外,如果第一个人在时间B进行更新,他们将无法获得更新,因为pod假定没有新版本。它是否正确?提前谢谢!

1 个答案:

答案 0 :(得分:1)

我想在这里回答一些事情。

  

现在我注意到一些有podspec的项目更新了他们的存储库而没有增加他们的podspec中的版本号。

这通常不是问题。虽然人们可能在不更新podspec的情况下更新他们的仓库,但我们强制所有podspecs(有一个例外)都基于git标签。因此,除非库所有者删除并重新标记新位置(可以完成),否则源 永远不会根据相应的podspec进行更改。唯一的例外是标有版本0.0.1的规范(虽然并非该版本的所有规格都这样做)。那些规范我们允许“无版本”意味着它们可以指向回购中的单个git提交。虽然我们不允许更新此提交,但我们认为这更具延展性,因为它可能会像rebase一样容易破坏。我们还认为,如果图书馆作者不愿意标记回购,我们就不应该将其视为维护它。

我认为这间接回答了有关在不同时间安装的问题。答案 应该是两个用户都会获得相同的来源。

如果您担心没有获得正确的版本(虽然这也是由Podfile.lock管理的),您可以包含这样的pod:

pod 'foo', '1.0'

这将永远强制安装1.0。您还可以使用语义版本匹配器:

pod 'foo', '~> 1.0.0'

这也将为您提供 不会破坏兼容性的更新版本。请注意,版本号不需要是语义的,因此它完全由图书馆所有者自行决定。

最后运行pod update会将Podfile.lock中的数字与Podfile进行比较,并获取满足约束条件的最高新版本。如果您没有完全指定版本,则此功能特别有用:

pod 'foo'

因此,它将始终更新到库的最新podspec(如果它已经不存在)。

修改

澄清更新。如果有人修复了他们的回购源并希望将其转移到他们的CocoaPod,他们 提交规范的版本。我们不允许在任何现有规范中更新源位置。无论哪种方式,CocoaPods都会安装保存在Podfile.lock中的版本。如果您需要新版本,则必须运行pod update