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(可可触摸框架)
- frameworkb.xcodeproj(可可触摸框架)
- frameworka.xcodeproj(可可触摸框架)
应用程序(frameworktest)使用frameworka(嵌入在frameworktest应用程序中)的
这在模拟器中工作得很好,但在设备上不起作用。
这个结构可能看起来有点奇怪,但是我在开发应用程序的过程中一直在开发框架,这就是为什么我想在我的应用程序项目中添加框架项目。
我已经把这个项目上传到了Github上,让你看看,如果你需要仔细观察的话。(类
为什么它在iOS模拟器中工作而不是在设备上?我怎样才能让它在设备上工作?
编辑:
正如Simonthumper在评论中所建议的,我还尝试将
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
我就这个问题联系了苹果,找到了解决我问题的方法。苹果的技术支持明确表示,我需要将frameworkb.xcodeproj添加到我的应用程序项目中,因此我的项目结构是:
- frameworktest.xcodeproj(应用程序项目)
- frameworka.xcodeproj(可可触摸框架)
- frameworkb.xcodeproj(可可触摸框架)
- frameworkb.xcodeproj(可可触摸框架)
- frameworka.xcodeproj(可可触摸框架)
完成此操作后,应用程序项目可以将frameworkb.framework包含为嵌入库:
这解决了我的问题,使它可以在iOS设备上运行。
如果发布时生成崩溃:吊销企业分发证书并创建新证书以解决此问题。一旦我做到了,它就完美地工作了。
我在嵌入式框架方面也遇到过类似的问题,我刚从Github上尝试过您的代码。
选项1(不适合团队合作)
使错误消失的是将frameworkb添加到frameworktest目标的常规选项卡中的嵌入二进制文件中。
选项2
嗯,与其他开发人员共享项目确实很重要:)。你尝试过这种方法吗?在framewroka的构建阶段添加新的复制文件阶段,并将frameworkb添加到frameworks目标中。
但我不知道为什么它在模拟器上工作。如果有人知道,请随时发表评论。
干杯