提问者:小点点

带有框架的iOS应用程序在设备上崩溃,dyld:库未加载,Xcode 6测试版


此崩溃是一个阻塞问题我使用以下步骤来重现此问题:

该应用程序在启动时立即崩溃,以下是控制台日志:

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设备上构建,它们都有相同的崩溃。然而,我可以建立一个应用程序,并运行在模拟器上罚款。此外,我知道我可以改变框架的形式要求到可选在链接二进制与库,但它并没有完全解决问题,应用程序崩溃时,我创建一个实例的狗。在设备和模拟器上的行为是不同的,我怀疑我们不能使用测试版的Xcode为设备分发框架。有人能解释一下这件事吗?


共3个答案

匿名用户

在Target's General选项卡中,有一个Embedded Binaries字段。当您在那里添加框架时,崩溃就解决了。

参考在这里苹果开发者论坛。

匿名用户

在Target's General选项卡下的Embedded Binaries部分添加框架。这将把框架复制到编译后的框架中,以便在运行时可以链接到它。

为什么会出现这种情况?:因为您要链接的框架被编译为动态链接框架,因此在运行时被链接到。

**注意:**嵌入自定义框架仅在iOS(>)中支持;8,因此采用了一种适用于较旧版本iOS的替代解决方案。

如果您影响这个框架(有权访问源代码/构建过程),您可以将这个框架更改为静态链接,而不是动态链接。这将导致代码包含在编译后的应用程序中,而不是在运行时链接到,因此框架将不必嵌入。

**方法:**在Framework的Build Setting选项卡下的Linking部分,将Mach-O类型更改为Static Library。您现在应该不需要将框架包含在嵌入式二进制文件中。

包括资产:为了包括图像,音频或XIB/NIB文件等内容,我建议创建一个bundle(本质上是一个目录,更多信息请参见bit.ly/ios_bundle),然后使用nsbundle从bundle加载资产。

匿名用户

仅仅将框架拖到项目中是不够的。这就像在同一个球场上却找不到你的孩子一样。请执行以下步骤:

1)创建框架

  • 一旦您的开发完成,构建您的框架,并确保您收到“build successeded./li>

2)访问您的框架

    文件夹中进行访问。/li>

  • 右键单击您的,然后选择“在查找器中显示./li>

3)在项目中放置框架

  • 从查找器窗口拖放到应用程序项目的“框架”文件夹中。/li>

4)为框架配置应用程序项目

  • 选择项目中的顶层/li>

    按钮。在下拉列表中,选择“新建复制文件阶段。/li>

    设置为“frameworks”。将子路径保留为空。然后单击左下方的按钮。

5)清理,然后运行项目