我正在为iOS开发团队开发pods(在私人存储上)。我的低级C / Obj-C核心pod包含一个带有一些头的静态库,并在其他pod中用作依赖(用--use-libraries
推送)。
现在iOS团队想要集成Swift pod,他们必须在他们项目的Podfile中添加use_framework!
选项。当然,他们在pod install
期间获得了以下错误:
' XXX' target具有包含静态的传递依赖性 二进制文件
我花了半天的时间在网上寻找一种让我的pod与use_framework!
选项兼容的方法,徒劳无功。这非常令人沮丧,因为Google服务pod证明它可以以干净的方式绕过这个问题(不是使用verify_no_static_framework_transitive_dependencies
技巧):主pod和几乎所有的依赖包含静态库,一切都与Swift pod完美配合。例如,Google/SignIn取决于Google / Core(vendored_libraries:Libraries / libGGLCore.a)和GoogleSignIn(vendored_libraries:Libraries / libSignIn.a)。
我知道如何让我的pod与use_framework!
选项兼容?
谢谢大家,
干杯,
汤姆
答案 0 :(得分:3)
我想我发现了一个黑客攻击我的问题。这很奇怪,但我说它很干净,可以在生产中使用它;)
我发现它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 ,确定他们会在开发团队中喜欢它;)