使用cocoapods更改导入的库

时间:2013-07-04 11:43:14

标签: ios cocoapods git-fork

我正在使用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 threadFAQ中我尝试过解决方案的一些配置,但我相信我的问题不同。标题实际上已丢失。

UPDATE4:攻击cocoapods版本

我已经卸载了cocoapods并安装了0.20.2版本(在尝试使用我的fork之前工作)并保持完全相同:/。

6 个答案:

答案 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(无分叉)

保存自定义更改

对于那些寻找简单解决方案的人,我已经使用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维护库,以用于将来的错误修复和功能增强..... enter image description here

我最近在这里https://medium.com/@mihirpmehta/how-to-modify-cocoapods-library-within-pods-647d2bf7e1cb

发布了相同的教程