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

创建一个Cocoa Touch框架项目 添加一个swift文件和一个类Dog 为设备构建一个框架 在Swift中创建一个单视图应用程序 导入框架到应用程序项目 从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

I have tried to build on iOS 7.1 and 8.0 devices, they both have the same crash. However, I can build an app and run on the simulator fine. Also, I am aware that I can change the framework to form Required to Optional in Link Binary With Libraries, but it did not completely resolve the problem, the app crashed when I create an instance of Dog. The behavior is different on the device and simulator, I suspect that we can't distribute a framework for the device using a beta version of Xcode. Can anyone shed light on this?


当前回答

您需要将框架添加到一个新的Copy Files Build Phase,以确保框架在运行时被复制到应用程序包中。

有关更多信息,请参阅如何将“复制文件构建阶段”添加到我的目标。

官方苹果文档:https://developer.apple.com/library/mac/recipes/xcode_help-project_editor/Articles/CreatingaCopyFilesBuildPhase.html

其他回答

在目标的General选项卡中,有一个Embedded Binaries字段。当你在那里添加框架时,崩溃就解决了。

参考资料在苹果开发者论坛。

对于SumUp用户,如果您正在加载最新的SumUpSDK。xcFramework,然后您需要确保从目标的应用程序的General选项卡中将其设置为“Embed & Sign”。

也就是说,把上面的语句颠倒过来(这样更容易理解):

转到“项目导航器”(即显示所有项目项的第一个图标等) 从树的顶部选择您的项目。 在页面中间的菜单上(稍向右),在“Targets”下选择您的应用程序 在顶部选项卡中,选择“General” 向下滚动到“框架,库和嵌入式内容” 从列表中选择您的Lib 从它旁边的下拉列表中选择“嵌入&签名”。 清洁 重新构建并运行。

我希望这能有所帮助。

H

我在iOS 9中遇到了同样的问题。x版本

ISSUE IS: App crashes as soon as I open the app with below error.

dyld: Library not loaded: /System/Library/Frameworks/UserNotifications.framework/UserNotifications Referenced from: /var/containers/Bundle/Application/######/TestApp.app/TestApp Reason: image not found

我已经解决了这个问题,在链接框架和库UserNotifications.framework框架中将Required更改为Optional。

当我创建一个新的配置和构建方案时,也会发生同样的事情。

所以我的解决办法就是逃跑

pod install

这个新创建的配置。

对于大于或等于8的iOS

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

为什么会这样?:因为你要链接的框架被编译为动态链接的框架,因此在运行时被链接。

**注意:**嵌入自定义框架只支持在iOS > 8,因此一个替代解决方案,适用于旧版本的iOS如下。

对于小于8的iOS

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

**方法:**在框架的Build Setting选项卡下,在链接部分,将Mach-O类型更改为静态库。您现在不需要将框架包含在嵌入式二进制文件中。

包含资产:为了包含图像、音频或xib/nib文件,我建议创建一个bundle(本质上是一个目录,更多信息在这里bit.ly/ios_bundle),然后使用NSBundle从bundle中加载资产。