使用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 cocoapods
并gem 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。