我正在使用cocoapods开展一个项目,突然间我发现自己在其中一个库中做了一些更改。如何确保pod update
永远不会覆盖这些更改?有没有办法在不更新github项目的情况下在pod中引入更改?
更新:分叉项目
我试图分叉项目并创建一个新的specfile来指向新项目。我能够安装基本的东西,但是,出于某种原因,有一些安装的依赖项,但无法在pods项目中引用。目前我的podsfile中有这个:
'WhirlyGlobe', :podspec => 'https://raw.github.com/tiagoalmeida/WhirlyGlobe/master/WhirlyGlobe.podspec'
图书馆的分支在https://github.com/tiagoalmeida/WhirlyGlobe
UPDATE2:缺少标题
我发现没有生成boost和Eigen(从WhrilyGlobe使用)的头文件(Pods / Headers)。
UPDATE3:尝试对标题做点什么
我试图查看are in this thread和FAQ中我尝试过解决方案的一些配置,但我相信我的问题不同。标题实际上已丢失。
UPDATE4:攻击cocoapods版本
我已经卸载了cocoapods并安装了0.20.2版本(在尝试使用我的fork之前工作)并保持完全相同:/。
答案 0 :(得分:10)
@pgb和wattson为我提供了很好的信息,但最终问题出在了各种各样的事情上。
我不知道为什么但似乎cocoapods 0.22处理标题的方式不同。我卸载了cocoapods并安装了0.20.2版本。
要检查我使用{c}的cocoapods版本,我已使用gem query
删除了cocoapods,并使用gem uninstall cocoapods
安装了cocoapods。
我使用了这样的podfile:
gem install cocoapods --version 0.20.2
podspec指向我的新podspec。我之所以这样做是因为我需要从原始podfile中删除:标签(否则它总是指向相同的位置),这样我就可以更好地控制文件。
在podspec中,我更改了源:
'WhirlyGlobe', :podspec => 'https://raw.github.com/tiagoalmeida/WhirlyGlobe/master/WhirlyGlobe.podspec'
指向我的叉子并移除标签。
感谢@pgb和@wattson试图帮助我。上调两者都是因为它们都很有用。
答案 1 :(得分:5)
你可以分叉一个存储库,然后将你的分叉存储库添加为一个pod,所以说你已将repo分支到https://github.com/tiago/ThePodProject.git
,然后将pod设置为:
pod 'ThePodProject', :git => 'https://github.com/tiago/ThePodProject.git'
请参阅here了解更多详情(在“来自库仓库根目录中的podspec”下)
答案 2 :(得分:1)
您已经接近使用分叉存储库了。
我刚试了以下Podfile
:
pod 'WhirlyGlobe', :git => 'https://github.com/tiagoalmeida/WhirlyGlobe'
它已下载WhirlyGlobe
,然后失败,因为hg
丢失了。我只是使用Homebrew安装了它:brew install mercurial
然后运行pod install
能够安装所有依赖项。
项目编译,但我不确定它是否有效,请继续尝试。
请注意,下载和编译所有依赖项(特别是shapelib
)需要很长时间。
答案 3 :(得分:0)
只想在答案中添加几分钱。 我遇到了同样的问题。正如上面提到的那样,我也去了pod lib的子类。 我正在使用ACEDrawingView,它具有readonly的属性图像。 我对它进行了子类化并使该属性成为读/写。 我个人认为通过子类更优雅和无忧解决这类问题。 除非您希望在主项目中进行大量开发。
答案 4 :(得分:0)
对于那些寻找简单解决方案的人,我已经使用git stashes成功地解决了这个问题。
如上所述,pod update
将覆盖您所做的任何更改。但是,如果您正在使用git,我想要做的就是提交除我的pod更改之外的所有更改。
一旦我的分支上的唯一更改是Pod更改,我通过运行git stash save "Custom Cocoapod changes, apply after every pod update"
来存储这些更改。您可以通过更改“”之间的文本来为其提供任何消息。
此命令的副作用是将您的工作目录重置为之前的HEAD,因此如果您想重新应用这些存储,您可以运行git stash apply
以重新获取这些更改,然后您可以将它们提交到保存它们。
请勿使用git stash pop
,因为这会在应用后删除隐藏。
现在,在将来某个未确定的时间,当您更新您的pod以及再次应用存储的时间时,您要执行的操作是git stash list
。这将返回一个列表,其中包含您使用最新零索引进行的所有存储。你可能会看到这样的东西:
stash@{0}: On featureFooBar: foo bar
stash@{1}: On Master: Custom Cocoapod changes, apply after every pod update
...
如果自定义可可豆荚更改藏匿在隐藏@ {0}然后完美,您可以再次运行git stash apply
,您将在工作目录中获得这些更改。否则,一旦找到您的广告连播更改的存储号码,您就可以通过运行git stash apply stash@{1}
来应用该存储空间
当您在同一分支上有一个干净的工作目录但不需要时,应用stashes是最简单的。 This page给出了git stash的良好描述以及如何使用它。
这不是最全面的解决方案,因为当你在同一个项目中有多个人时,我可以预见到一些问题,但这是一种解决这个问题的简单方法,而无需借助更多参与的解决方案。
答案 5 :(得分:0)
存在另一种方式,您可以派生存储库,修改更改并通过cocoapods维护库,以用于将来的错误修复和功能增强.....
我最近在这里https://medium.com/@mihirpmehta/how-to-modify-cocoapods-library-within-pods-647d2bf7e1cb
发布了相同的教程