使用cocoapods更改导入的库

我正在使用cocoapods开展一个项目,突然间我发现自己在一个库中做了一些改动。 我如何确保这些更改永远不会被pod update覆盖? 有什么方法可以在没有更新github项目的情况下在一个pod中引入更改?

更新:分叉项目

我试图分叉项目,并创build一个新的specfile指向新的项目。 我能够安装基本的东西,但是,出于某种原因,有一些依赖已安装,但不能在pods项目内引用。 目前我在我的podsfile中有这个:

 'WhirlyGlobe', :podspec => 'https://raw.github.com/tiagoalmeida/WhirlyGlobe/master/WhirlyGlobe.podspec' 

图书馆的叉子在https://github.com/tiagoalmeida/WhirlyGlobe

UPDATE2:缺less标题

我发现没有生成用于boost和Eigen(从WhrilyGlobe使用)的头(Pods / Headers)。

更新3:试图做一些关于标题

我试图看看在这个线程中的一些configuration,我已经尝试了FAQ中的解决scheme,但我相信我的问题是不同的。 标题实际上是缺less的。

UPDATE4:攻击cocoapods版本

我卸载了cocoapods并安装了版本0.20.2(在尝试使用我的fork之前工作),并保持不变:/。

@pgb和wattson为我提供了很好的信息,但最终这个问题是在一起的。

我不知道为什么,但似乎cocoapods 0.22处理标题不同。 我卸载了cocoapods并安装了版本0.20.2。

为了检查cocoapods的版本,我使用了gem query并且用gem uninstall cocoapodsgem uninstall cocoapods并安装了gem install cocoapods --version 0.20.2

我已经使用我的podfile像这样:

 'WhirlyGlobe', :podspec => 'https://raw.github.com/tiagoalmeida/WhirlyGlobe/master/WhirlyGlobe.podspec' 

podspec指向我的新podspec。 我是这样做的,因为我需要从原始podfile中删除:标签(否则它总是指向相同的地方),这样我就可以更好地控制文件。

在podspec我改变了来源:

 s.source = { :git => "https://github.com/tiagoalmeida/WhirlyGlobe.git"} 

指向我的叉子,并删除标签。

感谢@pgb和@wattson帮助我的尝试。 赞成两个,因为他们都是有用的。

你可以派生一个仓库,然后把你的分叉仓库添加为一个仓库,所以你说你已经把仓库分叉到https://github.com/tiago/ThePodProject.git ,然后把仓库设置为:

 pod 'ThePodProject', :git => 'https://github.com/tiago/ThePodProject.git' 

请参阅此处以获取更多详细信息(在“从库回购的根目录中的podspec”下)

你正在接近你的分叉库。

我只是用下面的Podfile试用它:

 pod 'WhirlyGlobe', :git => 'https://github.com/tiagoalmeida/WhirlyGlobe' 

它下载了WhirlyGlobe ,然后因为失踪而失败。 我只需使用Homebrew安装它: brew install mercurial ,然后运行pod install即可安装所有依赖项。

该项目编译,但我不知道它的工作原理,继续尝试。

请注意,下载和编译所有依赖(特别是shapelib )需要很长时间。

只是想添加我的几分钱的答案。 我遇到同样的问题。 正如有人build议上面,我去了分类的豆荚lib。 我正在使用ACEDrawingView,它具有只读属性图像。 我inheritance了它,并使这个属性读/写。 我个人觉得去分类是更加优雅和无忧的解决这类问题的方法。 除非你想在你的主要项目上做很大的事情。

仅使用Git保存自定义更改(无分叉)

对于那些寻找一个简单的解决scheme,我已经成功地解决了这个问题,使用git stashes。

如上所述, 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存储描述,以及如何使用它。

这不是最全面的certificate解决scheme,因为当您在同一个项目中有多个人时,我可以预见到一些问题,但是这是解决这个问题的一种简单方法,不需要更多涉及的解决scheme。