dyld:未为框架中的框架加载库

dyld: Library not loaded for a Framework within a Framework

我正在尝试嵌入一个正在使用另一个框架的框架,这在模拟器中运行良好,但它在 iOS 设备上崩溃:

dyld: Library not loaded: @rpath/FrameworkB.framework/FrameworkB Referenced from: /private/var/mobile/Containers/Bundle/Application/B072CD7C-8595-4AE4-A506-26832A0F4402/FrameworkTest.app/Frameworks/FrameworkA.framework/FrameworkA Reason: image not found

这是我在Xcode中的结构:

应用程序 (FrameworkTest) 使用来自 FrameworkA 的 class A(嵌入在 FrameworkTest 应用程序中)。 class A 使用 FrameworkB 中的 class B(在 FrameworkA 中链接)。

这在模拟器中工作得很好,但在设备上不起作用。

结构可能看起来有点奇怪,但是我在开发应用程序时正在开发框架,这就是为什么我想在我的应用程序项目中添加框架项目。

我上传了project on GitHub给你看,如果你需要仔细看看。 (在AppDelegate.m文件中调用classA

为什么这在 iOS 模拟器而不是设备上有效?我怎样才能让它在设备上运行?

编辑:

正如 simonthumper 在评论中所建议的那样,我还尝试将 FrameworkB.framework 添加到 Copy Files 作为 FrameworkA 构建阶段中的框架目标,但这在控制台中给了我这个错误:

dyld: Library not loaded: @rpath/FrameworkB.framework/FrameworkB Referenced from: /private/var/mobile/Containers/Bundle/Application/2A38A2BC-9CD7-4AF6-9E50-42C16D92D6B2/FrameworkTest.app/Frameworks/FrameworkA.framework/FrameworkA Reason: no suitable image found. Did find: /private/var/mobile/Containers/Bundle/Application/2A38A2BC-9CD7-4AF6-9E50-42C16D92D6B2/FrameworkTest.app/Frameworks/FrameworkA.framework/Frameworks/FrameworkB.framework/FrameworkB: mmap() error 1 at address=0x10012C000, size=0x00008000 segment=__TEXT in Segment::map() mapping /private/var/mobile/Containers/Bundle/Application/2A38A2BC-9CD7-4AF6-9E50-42C16D92D6B2/FrameworkTest.app/Frameworks/FrameworkA.framework/Frameworks/FrameworkB.framework/FrameworkB

我在嵌入式框架方面也遇到了类似的问题,我刚刚尝试了您来自 GitHub 的代码。

选项1(不适合团队合作)

错误消失的原因是在 FrameworkTest[ 的 General 选项卡中将 FrameworkB 添加到 Embedded Binaries =34=]目标.

选项 2

好吧,与其他开发人员共享项目确实很重要 :)。你试过这种方法吗?在 FramewrokA 的 Build Phases 中添加 New Copy Files Phase,并将 FrameworkB 添加到 Frameworks 目标中。

但我不确定为什么它可以在模拟器上运行。如果有人知道,请随时发表评论。

干杯

我就此问题联系了 Apple,并找到了解决问题的方法。 Apple 的技术支持明确表示,我需要将 FrameworkB.xcodeproj 添加到我的应用程序项目中,因此我的项目结构是:

  • FrameworkTest.xcodeproj(应用项目)
    • FrameworkA.xcodeproj(Cocoa 触控框架)
      • FrameworkB.xcodeproj(Cocoa 触控框架)
    • FrameworkB.xcodeproj(Cocoa 触控框架)

完成此操作后,应用程序项目可以包含 FrameworkB.framework 作为嵌入式库:

这解决了我的问题,并且可以在 iOS 设备上 运行 它。

如果构建在发布时崩溃: 撤销您的企业分发证书并创建一个新证书来解决问题。一旦我这样做了,它就完美地工作了。