设备上的iOS应用程序崩溃,dyld:Library未加载,Xcode 6 Beta
这次崩溃是一个阻塞问题,基本上我使用以下步骤来重现问题:
该应用立即崩溃启动时,这里是控制台日志:
dyld: Library not loaded: @rpath/FrameworkTest03.framework/FrameworkTest03
Referenced from: /var/mobile/Applications/FA6BAAC8-1AAD-49B4-8326-F30F66458CB6/FrameworkTest03App.app/FrameworkTest03App
Reason: image not found
我试图在iOS 7.1和8.0设备上构建,它们都具有相同的崩溃。 不过,我可以构建应用程序并在模拟器上运行。 此外,我知道我可以将框架从“需要”更改为“可选”,但它并未完全解决问题,应用程序在创建Dog实例时崩溃。 在设备和模拟器上的行为是不同的,我怀疑我们不能使用Xcode的beta版本为设备分发框架。 任何人都可以阐明这一点吗?
在目标的常规选项卡中,有一个嵌入式二进制文件字段。 当您添加框架时,崩溃已解决。
参考这里在Apple开发者论坛。
对于iOS大于或等于8
在目标的常规选项卡下,在嵌入式二进制文件部分添加框架。 这会将框架复制到编译过程中,以便在运行时链接到框架。
这是为什么发生? :因为你链接的框架被编译为一个动态链接的框架,因此在运行时被链接。
注意:嵌入自定义框架仅在iOS> 8中受支持,因此可以在较早版本的iOS上使用替代解决方案。
对于iOS少于8
如果你对这个框架有影响(可以访问源代码/构建过程),你可以将这个框架改为静态链接而不是动态链接。 这将导致代码被包含在编译的应用程序中,而不是链接到运行时,因此框架不必被嵌入。
如何:在框架的构建设置选项卡的链接部分中,将Mach-O类型更改为静态库。 您现在不需要在嵌入式二进制文件中包含框架。
包括资产:为了包括诸如图像,音频或xib / nib文件之类的东西,我建议创建一个包(本质上是一个目录,更多信息在这里是bit.ly/ios_bundle),然后使用NSBundle从包中加载资源。
我尝试将我创建的框架手动添加到我的项目中时收到了同样的错误。 只是将框架拖入您的项目并不够好。 这就像是在同一个球场,但无法找到你的孩子。 我花了一些尝试和错误才使它正常工作,但按照这些步骤为我做了。
1)创建你的框架
COMMAND
+ B
构建你的框架并确保你获得“构建成功”。 2)访问你的框架
Products
文件夹。 .framework
并选择“在Finder中显示”。 3)将框架放置在您的项目中
.framework
从Finder窗口拖放到应用程序项目的“Framework”文件夹中。 4)为框架配置应用程序项目
+
按钮。 在下拉菜单中选择“新建复制文件阶段”。 Destination
设置为“框架”。 保持子路径为空。 然后点击左下角的+
按钮。 5)清理,然后运行你的项目
COMMAND
+ SHIFT
+ K
COMMAND
+ R
上一篇: iOS app with framework crashed on device, dyld: Library not loaded, Xcode 6 Beta
下一篇: Building a distributable static library that uses cocoapods