通过Cocoapods自动将动态库添加到嵌入式框架

时间:2015-06-11 17:48:10

标签: ios objective-c xcode ios8 cocoapods

我正在创建一个自定义的Objective-C框架(动态库)并尝试使用Cocoapods将其拉入消费者应用程序。如果我不将框架添加为嵌入式二进制文件,我会遇到一个讨厌的运行时错误:

dyld: Library not loaded: @rpath/MyFramework.framework/MyFramework
Referenced from: /private/var/mobile/Containers/Bundle/Application/XXX/MyFramework.app/MyFramework
Reason: image not found

我的理解是,作为第三方自定义框架,我添加为嵌入式二进制文件(由于Apple对动态链接随机框架的担忧)。是吗?

如果没有,我可以以某种方式更改我的框架或Podspec文件,因此我不需要嵌入它(不将其作为静态库)吗?

否则,有没有办法自动将框架添加到pod install上的嵌入式二进制文件中?

2 个答案:

答案 0 :(得分:2)

默认情况下,cocoapods尝试将pod链接为静态库。您可以通过在Podfile中添加use_frameworks!来强制cocoapods使用框架。或者,您可以尝试在库podspec文件中正确设置xcconfig或/和vendored_framework以与您的框架链接。我在Sparkle project's podspec file看到了一个很好的例子。 Sparkle使用vendored_framework解决方法在OSX中实现动态链接(我相信由于cocoapods repo中的this问题)。

答案 1 :(得分:0)

我遇到了这个问题(Objective C框架构建为带有动态库的模块),最后找到了解决方案:

安装pod后,您必须转到主项目的Embed Pods框架中的Build Phases,并将MyFramework.framework添加到Input Files部分。 如果您的Framework随捆绑包一起分发,则必须将其添加到同一选项卡中的“复制窗口资源”部分。

不幸的是,这必须由使用您的框架的人来完成。如果您的解决方案不需要用户,请告知我们。

See Screenshot here

<强>更新

好像你没有指定module_name并添加你在podspec中添加你的框架到vendored_frameworks,我不需要上面提到的步骤,因此用户不需要进行任何交互。