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.xcodeproj(应用项目)
- FrameworkA.xcodeproj(Cocoa 触控框架)
- FrameworkB.xcodeproj(Cocoa 触控框架)
应用程序 (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 设备上 运行 它。
如果构建在发布时崩溃:
撤销您的企业分发证书并创建一个新证书来解决问题。一旦我这样做了,它就完美地工作了。
我正在尝试嵌入一个正在使用另一个框架的框架,这在模拟器中运行良好,但它在 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.xcodeproj(应用项目)
- FrameworkA.xcodeproj(Cocoa 触控框架)
- FrameworkB.xcodeproj(Cocoa 触控框架)
- FrameworkA.xcodeproj(Cocoa 触控框架)
应用程序 (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 触控框架)
- FrameworkA.xcodeproj(Cocoa 触控框架)
完成此操作后,应用程序项目可以包含 FrameworkB.framework 作为嵌入式库:
这解决了我的问题,并且可以在 iOS 设备上 运行 它。
如果构建在发布时崩溃: 撤销您的企业分发证书并创建一个新证书来解决问题。一旦我这样做了,它就完美地工作了。