我知道下面的命令将更新一个pod: pod update <podname>。然而,这也会更新你之前安装的其他pod(没有包含在update命令中的pod)的依赖关系。是否有一种方法可以更新单个pod而不影响所有其他依赖?


当前回答

你不可能得到100%的隔离。因为一个pod可能有一些共享的依赖项,如果你试图更新你的单个pod,那么它也会更新其他pod的依赖项。如果可以,那么:

tl;博士使用:

pod update podName

为什么?阅读下面。

pod更新将不尊重podfile.lock。它将覆盖它-有关的单一豆荚 Pod安装将尊重podfile。但是会尝试安装podfile中提到的每个pod,基于它锁定的版本(在podfile .lock中)。

下面的图表有助于更好地理解两者的区别:


主要问题来自~>也就是乐观操作符。

在Podfile中使用精确的版本是不够的

有些人可能认为,在他们的Podfile中指定pod的确切版本,如pod 'A', '1.0.0',足以保证每个用户与团队中的其他人拥有相同的版本。

然后他们甚至可能使用pod更新,即使只是添加一个新的pod,认为它永远不会冒险更新其他pod,因为它们被固定到Podfile中的特定版本。

但事实上,这并不足以保证上述场景中的user1和user2总是获得所有pod的完全相同版本。

一个典型的例子是,如果pod A对pod A2有一个依赖——在A.podspec中声明为依赖'A2', '~> 3.0'。在这种情况下,在Podfile中使用pod 'A', '1.0.0'确实会迫使user1和user2始终使用pod 'A'的1.0.0版本,但是:

user1可能会在3.4版本中使用pod A2(因为这是当时A2的最新版本) 而当用户2在加入项目时运行pod install时,他们可能会在3.5版本中获得pod A2(因为A2的维护者可能在此期间发布了新版本)。 这就是为什么确保每个团队成员在每个人的电脑上使用相同版本的pod的唯一方法是使用Podfile。锁定并正确使用pod安装和pod更新。

上面的摘录都来自pod安装和pod更新

我也强烈建议你看看播客是怎么做的。锁做

其他回答

它是2015

因此,由于pod更新SomePod涉及最新版本的cocoapods中的所有内容,我找到了一个变通办法。

请遵循以下步骤:

从Podfile中删除SomePod 运行pod安装

pods现在将从我们的项目和Podfile中删除SomePod。锁文件。

把SomePod放回Podfile中 再次运行pod install

这一次我们的pod的最新版本将被安装并保存在Podfile.lock中。

要安装一个单独的pod而不更新现有的->将该pod添加到您的Podfile并使用:

pod install --no-repo-update

删除/更新特定的pod使用:

pod update POD_NAME

测试!

这是一个异常值,不太可能是OP正在处理的问题,但是如果您在计算机上使用本地pod, pod update <podname>将在所有情况下都不起作用。

在这种情况下,只有在podspec文件发生更改时才会触发pod更新。但是,做一些改变也可以让吊舱安装正常工作。

在这种情况下,您可以只修改一些较小的内容,例如只修改一个字母的描述或摘要,然后就可以成功地运行install或update命令。

我使用cocoapods 1.0.1版本,并使用pod更新pod名称完美地工作。不会更新其他pod,只更新您进入的特定pod。

POD_NAME将更新最新的pod,但不更新Podfile。锁文件。

因此,你可以使用pod的特定版本来更新Podfile,例如pod 'POD_NAME', '~> 2.9.0',然后使用命令pod install

稍后,您可以从Podfile中删除特定的版本名称,并可以再次使用pod install。这将有助于保持Podfile。锁更新。