当pod的新版本可用时,“pod update”会覆盖我的代码吗?

我已经使用cocoapods将MKStoreKit版本4.99添加到我的项目中。 我的Podfile包含:

platform :ios, '6.0' pod 'MKStoreKit', '~> 4.99' 

MKStoreKit有一个名为MKStoreKitConfigs.h的configuration文件,需要在每个项目的基础上修改,我已经适当修改了文件。 当MKStoreKit发布一个新版本,比如5.0,我会执行pod update ,会发生什么? 我的更改会被覆盖吗? 你能描述为什么是或为什么不是?

是的,pod更新将覆盖您的更改。 你可以做的是在Github上分叉项目,在叉子上做出改变,并将Cocoapods指向叉子。 请参阅通过cocoaPod在github上使用Restkit的分支? 关于如何做到这一点。

据我了解这是一个已知的问题,也正如一个人说:“这是一种不好的做法,在头文件中configuration第三方库”。

所以起初你可以看看这个提交 。 海事组织这是一个更好的方式来configuration它。

您也可以使用以下方式将分叉添加为Pod:

 pod 'MKStoreKit.MyFork', :path => 'MKStoreKit.MyFork.podspec' 

编辑:感谢rounak注意, :local现在是:path 。 来自cocoapods文档:

使用这个选项( :path ),CocoaPods将假定给定的文件夹是Pod的根目录,并且将直接从Pods项目的文件链接文件。 这意味着您的编辑将在CocoaPods安装之间持续。 引用的文件夹可以是您最喜欢的SCM或当前回购的git子模块的结帐。

这是一个旧post,但我有一个相当简单的解决方法来保持您在Pod上所做的更改。

如上所述, pod update将覆盖您所做的任何更改。 但是,如果你使用git,我喜欢做的是提交所有的更改,除了我的pod更改。

一旦我在我的分支上唯一的变化是Pods的变化,我通过运行git stash save "Custom Cocoapod changes, apply after every pod update" 。 你可以通过改变“”之间的文字给它任何你想要的信息。

这个命令的副作用是将工作目录重新设置到前一个HEAD,所以如果你想重新应用这些git stash apply你可以运行git stash apply来重新获得这些改变,然后你可以提交它们来保存它们。

不要使用git stash pop因为这会在应用后删除存储。

现在,在将来某个未定的时间,当你更新你的豆荚并重新使用存储的时候,你要做的就是运行git stash list 。 这将返回一个列表,你所做的最近被零索引的所有窗口。 你可能会看到这样的东西:

 stash@{0}: On featureFooBar: foo bar stash@{1}: On Master: Custom Cocoapod changes, apply after every pod update ... 

如果自定义cocoa豆包更改隐藏在@ {0}然后完美,你可以再次运行一个git stash apply ,你会得到你的工作目录的变化。 否则,一旦你发现你的豆荚改变了哪个存储号码,你可以运行git stash apply stash@{1}

当你在同一个分支上有一个干净的工作目录时,应用stash是最简单的,但这不是必需的。 这个页面提供了一个很好的git存储描述,以及如何使用它。