设备上的iOS应用程序崩溃,dyld:Library未加载,Xcode 6 Beta

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

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

应用程序立即崩溃启动,这里是控制台日志:

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设备上构build,它们都有相同的崩溃。 不过,我可以build立应用程序,并在模拟器上运行良好。 另外我知道,我可以将框架从需要更改为可选链接二进制库 ,但它没有完全解决问题,应用程序崩溃,当我创build一个的实例。 在设备和模拟器上的行为是不同的,我怀疑我们不能使用beta版本的Xcode来分发设备的框架。 任何人都可以阐明这一点?

在目标的常规选项卡中,有一个embedded式二进制文件字段。 当你添加框架的时候崩溃已经解决了。

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

对于iOS大于或等于8

在目标的常规选项卡下,在embedded式二进制文件部分添加框架。 这将把框架复制到编译的目录中,以便在运行时链接到框架。

在这里输入图像说明

为什么发生这种情况? 因为你链接到的框架被编译为一个dynamic链接的框架,因此链接到运行时。

注意:只有iOS> 8支持embedded自定义框架,因此可以在旧版iOS上使用替代解决scheme。

对于iOSless于8

如果你对这个框架有影响(可以访问源代码/构build过程),你可以把这个框架改成静态链接而不是dynamic链接。 这将导致代码被包含在您的编译的应用程序,而不是链接到运行时,因此框架将不必embedded。

如何:在框架的“构build设置”选项卡的“链接”部分中,将“ Mach-Otypes”更改为“静态库”。 您现在不需要在embedded式二进制文件中包含框架。

静态框架

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

首先尝试在Command + Option + Shift + K之后build立。如果仍然失败,请执行以下步骤。

如果任何人在Xcode 8中遇到这个错误,那么在你的目标的常规标签下把你的框架状态改为可选的而不是必须的。

在这里输入图像说明

我尝试手动将我创build的框架添加到我的项目中时收到了同样的错误。 只是把框架拖到你的项目中是不够的。 这就像在同一个球场,但不能find你的孩子。 我花了一些尝试和错误,才得以正常工作,但遵循这些步骤为我做了。

1)创build你的框架

  • 开发你的框架。
  • 一旦你的开发完成, COMMAND + B构build你的框架,并确保你收到“构build成功”。

在这里输入图像说明

2)访问你的框架

  • 一旦您的框架项目成功build立,您就可以准备好在您的项目的Products文件夹中进行访问。

在这里输入图像说明

  • 右键单击您的.framework并select“在Finder中显示”。

在这里输入图像说明

3)将框架放置在您的项目中

  • .framework从Finder窗口拖放到应用程序项目的“Framework”文件夹中。

在这里输入图像说明

4)为框架configuration应用程序项目

  • 在您的项目中select最高级别

在这里输入图像说明

  • select你的目标

在这里输入图像说明

  • 转到“构build阶段”,然后“与库链接二进制”,并确保您的框架包含在可选的选项中

在这里输入图像说明

  • 仍然在“Build Phases”中,转到左上angular并select+button。 在下拉菜单中select“新build复制文件阶段”。

在这里输入图像说明

  • 向下滚动到新的“复制文件”部分,并确保您将Destination设置为“框架”。 保持子path为空。 然后点击左下方的+button。

在这里输入图像说明

  • 您将看到您的项目层次结构。 向下滚动到您在步骤3中添加框架的“框架”文件夹,或者在顶部的search栏中search它。 select你的框架,然后点击“添加”。

在这里输入图像说明

  • 确保您的框架包含在“代码签名复制”中。

在这里输入图像说明

5)清理,然后运行你的项目

  • COMMAND + SHIFT + K
  • COMMAND + R

我使用Swift3 / Xcode 8.1创build了一个框架,并在Objective-C / Xcode 8.1项目中使用它。 要解决这个问题,我必须在Build Options下启用Always Embed Swift Standard Libraries Build Options

看看这个截图:

在这里输入图像说明

希望有所帮助!

我必须(在这里提到的之上) 将以下行添加到生成设置选项卡下的运行pathsearchpath
@executable_path/Frameworks

在这里输入图像说明

您需要将框架添加到新的“复制文件”构build阶段,以确保框架在运行时被复制到应用程序包中。

请参阅如何将“复制文件构build阶段”添加到我的目标以获取更多信息。

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

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

  问题是:应用程序崩溃,只要我打开与下面的错误的应用程序。

dyld:图书馆没有加载:/System/Library/Frameworks/UserNotifications.framework/UserNotifications 引用来自:/var/containers/Bundle/Application/######/TestApp.app/TestApp 原因:找不到图片

我已经解决了这个问题,通过将Linked Frameworks and Libraries中用户UserNotifications.framework框架框架中的Required更改为Optional

我的环境:Cocos2d 2.0,Box2d,Objective C

除了做上面的其他答案,我终于去了常规选项卡,并使WatchKit可选。

目标一般链接框架和库Watchkit.framework可选

在我的情况下,解决scheme是从embedded式二进制文件(这是工作区中的独立项目)中移除编译后的框架,清理并重新构build它,最后重新添加到embedded式二进制文件中。

如果您正在使用第三方框架,并使用Cocoapods作为您的依赖pipe理器,请尝试执行pod install来刷新您的pod。

这个崩溃发生在我正在使用的第三方库,所以很高兴上面的解决scheme为我工作,希望它适合你!

我遇到过同样的问题。 我尝试用我以前从未使用过的iPhone构build我的项目,但没有添加新的框架。 对我来说,清理工作正常( Shift + Command + K )。 也许是因为我使用Xcode 7的beta 5和iOS 9 Beta的iPhone 6,但是它工作正常。

令人惊讶的是,并不是所有必要的部分都在这里logging下来,至less对于Xcode 8来说。

我的情况是一个定制的框架作为同一个工作区的一部分。 原来它正在被错误地构build。 根据杰里米胡对这个主题的最后回应:

https://forums.developer.apple.com/thread/4687

我必须在框架的 Build Settings下设置Dynamic Library Install Name BaseDYLIB_INSTALL_NAME_BASE ),然后重新Build Settings它。 它被错误地设置为$(LOCAL_LIBRARY_DIR) ,我不得不将其更改为@rpath

因此,在链接处理阶段,它指示主机应用程序在运行时从/Library/Frameworks/fw.Framework/fw (如文件系统的根目录)dynamic加载它,而不是path到应用程序 /Frameworks/fw.Framework/fw

关于所有其他设置:它必须位于“ Build Phases中的3个位置,但只需将它们添加到托pipe应用的“ General选项卡的“ Embedded Binaries设置中即可。

不必设置额外的“ Copy Files阶段,无论如何,这在embedded阶段看起来是多余的。 通过检查构build脚本的尾部,我们可以确保没有必要。

 PBXCp /Users/xyz/Library/Developer/Xcode/DerivedData/MyApp-cbcnqafhywqkjufwsvbzckecmjjs/Build/Products/Debug-iphoneos/MyFramework.framework 

[删除了许多冗长的内容,但Xcode UI中简化的脚本很清楚。]

我仍然知道为什么Xcode不正确地设置我的DYLIB_INSTALL_NAME_BASE值。

如果任何人仍然遇到此问题,尽pipe遵循许多其他答案中概述的所有步骤,您可能需要撤销重新创build您的代码签名证书 ,如下所示:

https://developer.apple.com/library/ios/qa/qa1886/_index.html

对于那些修复无效的人,请尝试将操作系统更新到优胜美地。 它为我工作!