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

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

  • 创建一个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
    

    我试图在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设置为“框架”。 保持子路径为空。 然后点击左下角的+按钮。
  • 在这里输入图像描述

  • 您将看到您的项目层次结构。 向下滚动到您在步骤3中添加框架的“框架”文件夹,或者在顶部的搜索栏中搜索它。 选择你的框架,然后点击“添加”。
  • 在这里输入图像描述

  • 确保您的框架包含在“代码签名复制”中。
  • 在这里输入图像描述

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

  • COMMAND + SHIFT + K
  • COMMAND + R
  • 链接地址: http://www.djcxy.com/p/22705.html

    上一篇: iOS app with framework crashed on device, dyld: Library not loaded, Xcode 6 Beta

    下一篇: Building a distributable static library that uses cocoapods