如何在不接触其他依赖项的情况下更新单个pod

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

186499 次浏览

确保安装了最新版本的CocoaPods。

$ pod update PODNAME是最近引入的。

看到更多信息请参阅此问题线程:

$ pod更新

当你运行pod update SomePodName时,CocoaPods将尝试找到pod SomePodName的更新版本,而不考虑Podfile.lock中列出的版本。它会将pod更新到最新版本(只要它与Podfile中的版本限制相匹配)。

如果您运行pod update而没有任何pod名称,CocoaPods将把Podfile中列出的每个pod更新到最新版本。

只是一个小通知。

pod update POD_NAME

将工作,只有当这个豆荚已经安装。否则,您将不得不更新所有这些

pod update

命令

它是2015

所以,因为pod update SomePod涉及cocoapods最新版本的所有内容,我找到了一个变通方法。

请遵循以下步骤:

  1. Podfile . xml文件中删除SomePod

  2. 运行pod install

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

  1. SomePod放回Podfile

  2. 再次运行pod install

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

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

pod install --no-repo-update

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

pod update POD_NAME

测试!

我使用cocoapods version 1.0.1和使用pod update name-of-pod工作完美。不会更新其他pod,只更新您进入的特定pod。

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

在这种情况下,唯一能触发pod update工作的是podspec文件中的变化。然而,做一些改变也会允许pod install工作。

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

只是说:

pod install -用于安装新的pods,

pod update -用于更新现有的pods,

pod update podName -用于只更新特定的pod而不触及其他pod,

pod update podName versionNum -用于更新/降级特定的pod而不接触其他pod

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

tl;博士使用:

pod update podName

为什么?阅读下面。

  • pod update将不尊重podfile.lock。它将覆盖它-有关的单一豆荚
  • pod install将尊重podfile.lock,但将尝试根据其锁定的版本(在podfile .lock中)安装podfile中提到的每个pod。

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

enter image description here


主要问题来自~>又名乐观运算符

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

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

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

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

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

  • user1可能会在版本3.4中使用pod A2(因为那是当时A2的最新版本)
  • 而当user2在后来加入项目时运行pod install时,他们可能会在3.5版本中获得pod A2(因为A2的维护者可能在此期间发布了一个新版本)。 这就是为什么确保每个团队成员使用每个计算机上所有pod的相同版本的唯一方法是使用Podfile.lock,并正确使用pod install vs. pod update.

上面的节选全部来自Pod安装vs. Pod更新

我也强烈推荐观看podfile.lock做什么

pod update POD_NAME将更新最新pod,但不更新Podfile.lock文件。

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

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