如何修补使用 Cocoapods 导入的库

问题描述 投票:0回答:4

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

其中一个库恰好有一个错误,该错误已在前沿版本中修复,但尚未传播到 cocoapods 版本。我想为这个库制作一个补丁并能够与我的团队分享。处理这个问题的推荐方法是什么?

旁注:我想有一天可能会发生类似的情况,我会想分叉一个库。如果我有一种方法可以在库更新时将我的更改合并到新版本中,那就太好了。在这种情况下可以使用类似的工作流程吗?

ios cocoapods
4个回答
22
投票

我不会声称这是最好的选择,但它是一种选择。您可以使用 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 转义了空格。 “\ “ 代替 ”\ ”。请参阅 http://stephenjungels.com/jungels.net/articles/diff-patch-ten-minutes.html 了解生成补丁的快速方法。因为我正在使用 1 个简单文件,所以我只创建了一个简单的差异而不是统一的文件。


10
投票

对库进行分叉、应用补丁并在 Podfile 中指向您的分叉将是您的最佳选择。

如果库包含 podspec:

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

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

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

0
投票

您可以:

  1. 分叉该库并指向 Marcel 提到的 Podspec 中的分叉 - 其缺点是您必须针对上游来维护它。

  2. 根据修改后的源代码与未修改的 pod 版本生成一个 diff 文件,类似于 Sam 上面提到的。

  3. 使用这个 CocoaPods 插件可以使#2 的过程变得更容易。请参阅https://github.com/DoubleSymmetry/cocoapods-patch


0
投票

根据 Sam Corder 的回复,对我有用的是

git diff
然后在 Podfile 中添加 Sam 的补丁脚本

git diff branch-1 branch-2 > patches/fix.patch
post_install do |installer|
    puts 'Patching SVGKit to compile with the ios 7 SDK'
    %x(patch Pods/path/to/file.m -N < patches/fix.patch)
end

请注意,通过添加

-N
--forward
选项,
pod install
将不会在后续安装中挂起,如果已应用,它将跳过补丁。

https://man7.org/linux/man-pages/man1/patch.1.html

© www.soinside.com 2019 - 2024. All rights reserved.