"iOS应用程序在设备上使用框架崩溃,dyld:库未加载,Xcode 6 Beta"

16 浏览
0 Comments

"iOS应用程序在设备上使用框架崩溃,dyld:库未加载,Xcode 6 Beta"

这个崩溃是一个阻碍性问题,我使用以下步骤复现了这个问题:

  • 创建一个Cocoa Touch Framework项目
  • 添加一个Swift文件和一个类Dog
  • 为设备构建一个框架
  • 创建一个使用Swift的Single View应用程序
  • 将框架导入应用程序项目
  • 在ViewController中实例化框架中的Swift类
  • 在设备上构建和运行应用程序

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

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版本分发设备框架。有人可以解释一下吗?

admin 更改状态以发布 2023年5月21日
0
0 Comments

iOS版本大于或等于8

在目标的通用选项卡中,在嵌入式二进制文件部分添加框架。这将把框架复制到编译结果中,以便在运行时可以链接到它。

enter image description here

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

**注意**:仅在iOS>8中支持嵌入自定义框架,因此还有另一种在旧版本iOS上运行的解决方案。

iOS版本小于8

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

** 如何操作**:在框架的构建设置选项卡中,在链接部分中将 Mach-O 类型更改为静态库。现在您应该不需要在嵌入式二进制文件下包括该框架。

Static Framework

包括资源: 要包括图像、音频或xib/nib文件等,我建议创建捆绑包(本质上是一个目录,更多信息请参见bit.ly/ios_bundle),然后使用NSBundle从捆绑包中加载资源。

0
0 Comments

在目标的 General 标签中,有一个 Embedded Binaries 字段。当您将框架添加到其中时,崩溃问题得到解决。\n有关信息,请参阅苹果开发者论坛中的这里

0