我正在为一个 iOS 开发团队(在私有(private)存储库上)开发 pod。我的低级 C/Obj-C 核心 pod 包含一个带有一些 header 的静态库,并用作其他 pod 的依赖项(使用 --use-libraries
推送)。
现在 iOS 团队想要集成 Swift pod,他们必须在项目的 Podfile 中添加 use_framework!
选项。当然,他们在 pod install
期间得到了以下错误:
The 'XXX' target has transitive dependencies that include static binaries
我在网上花了半天时间寻找一种方法让我的 pod 与 use_framework!
选项兼容,但没有成功。这非常令人沮丧,因为 Google Services pod 证明可以以一种干净的方式绕过这个问题(而不是使用 verify_no_static_framework_transitive_dependencies
技巧):主 pod 及其几乎所有依赖项都包含静态库,并且一切都与 Swift pod 完美配合。以 Google/SignIn 为例这取决于 Google/Core (vendored_libraries: Libraries/libGGLCore.a) 和 GoogleSignIn (供应商库:Libraries/libSignIn.a)。
知道如何让我的 pod 与 use_framework!
选项兼容吗?
谢谢大家
干杯,
汤姆
最佳答案
我想我找到了解决问题的方法。这很奇怪,但我会说它足够干净,可以在生产中使用它;)
我找到了 here .这个想法只是在 podspec 中的 source_files 列表中包含一个源文件(即使是一个空文件)。
基本上,我的 podspec 的源代码部分是这样的:
s.source_files = "myLib/Empty.m", "myLib/Headers/*.h"
s.vendored_libraries = "myLib/myLib.a"
我所做的唯一修改是在源文件中添加“myLib/Empty.m”(Empty.m 严格来说是空的)。没有它,我在 pod install 时会系统地遇到传递依赖性 错误。有了它,pod install 工作正常。它适用于 Cocoapods 0.0.39 和 1.0.0.beta.4。
好吧,看起来它是一个不太脏的解决方案,但我不确定它是否适用于所有情况。而且 Cocoapods 的清洁度也不是什么好消息……
正如我之前在评论中提到的,Google 似乎找到了一个更简洁的解决方案。因此,如果有人知道真正干净的解决方案,请分享!
干杯,
汤姆
PS:我想我会将文件命名为 DirtyCocoapodHack.m 而不是 Empty.m,确保他们会在开发团队中喜欢它;)
关于ios - 带有静态库的私有(private) pod 以及 swift pod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35581692/