如何修补使用Cocoapods导入的库

时间:2013-05-29 19:00:40

标签: ios cocoapods

我的iOS应用程序使用Cocoapods来管理AFNetworking,SDWebImage等库。

这个库中的一个碰巧有一个已经在最新版本中修复的错误,但它尚未传播到cocoapods版本。我想为这个库制作一个补丁,并能够与我的团队分享。推荐的解决方法是什么?

旁注:我想可能会出现类似情况,我想要分叉库。如果我有一种方法可以在库更新时将我的更改合并到新版本中,那将是很好的。在这种情况下是否可以使用类似的工作流程?

3 个答案:

答案 0 :(得分:14)

我不会声称这是最好的选择,但它是一种选择。您可以使用Podfile中的post install挂钩来执行patch命令。我已经通过在Podfile的底部放置以下内容来完成它。

post_install do |installer|
    puts 'Patching SVGKit to compile with the ios 7 SDK'
    %x(patch Pods/path/to/file.m < localpods/patches/fix.patch)
end

请注意,如果路径中有任何空格,则需要转义逃避shell空间的反斜杠。 &#34; \&#34;而不是&#34; \&#34;。有关生成修补程序的快速方法,请参阅http://jungels.net/articles/diff-patch-ten-minutes.html。因为我正在处理一个简单的文件,所以我只创建了一个简单的差异而不是统一的差异。

答案 1 :(得分:10)

分割库,应用补丁,并指向Podfile中的fork是最佳选择。

如果库包含podspec:

pod '<library', :git => 'https://github.com/yourname/<library>.git'

如果库不包含podspec,则必须将podspec复制到本地路径并进行调整:

pod '<library>', :podspec => 'local/path/to/<library>.podspec'

答案 2 :(得分:0)

您可以:

  1. 分叉库并指向Marcel提到的Podspec中的叉子-缺点是您必须将其保持在上游。

  2. 根据未经修改的Pod版本(如Sam上面提到的那样),根据修改后的源生成差异文件。

  3. 使用此CocoaPods插件可以简化#2的过程。参见https://github.com/DoubleSymmetry/cocoapods-patch