包含静态库的私有pod以及swift pod

时间:2016-02-23 15:35:33

标签: ios frameworks static-libraries cocoapods private

我正在为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!选项兼容?

谢谢大家,

干杯,

汤姆

1 个答案:

答案 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 ,确定他们会在开发团队中喜欢它;)