我正在创建一个自定义的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
上的嵌入式二进制文件中?
答案 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随捆绑包一起分发,则必须将其添加到同一选项卡中的“复制窗口资源”部分。
不幸的是,这必须由使用您的框架的人来完成。如果您的解决方案不需要用户,请告知我们。
<强>更新强>
好像你没有指定module_name并添加你在podspec中添加你的框架到vendored_frameworks,我不需要上面提到的步骤,因此用户不需要进行任何交互。