dyld:图书馆没有加载框架内的框架
我想embedded一个框架,正在使用另一个框架,这在模拟器中工作得很好,但它在iOS设备上崩溃:
dyld:Library未加载:@ rpath / FrameworkB.framework / FrameworkB引用自:/private/var/mobile/Containers/Bundle/Application/B072CD7C-8595-4AE4-A506-26832A0F4402/FrameworkTest.app/Frameworks/FrameworkA.framework/ FrameworkA原因:找不到图片
这是我在Xcode中的结构:
- FrameworkTest.xcodeproj(应用程序项目)
- FrameworkA.xcodeproj(cocoa触摸框架)
- FrameworkB.xcodeproj(cocoa触摸框架)
- FrameworkA.xcodeproj(cocoa触摸框架)
应用程序(FrameworkTest)使用FrameworkA(embedded在FrameworkTest应用程序中)的一个类A
类A
使用FrameworkB中的类B
(它在FrameworkA中链接)。
这在模拟器中工作得很好,但在设备上不起作用。
这个结构看起来可能有点奇怪,但是当我开发应用程序时,我正在开发框架,这就是为什么我要在我的应用程序项目中添加框架项目的原因。
我已经上传了GitHub上的项目给你看,如果你需要仔细看看。 (类A
在AppDelegate.m文件中被调用)
为什么这是在iOS模拟器,而不是在设备上工作? 我怎样才能使它在设备上工作?
编辑:
正如simonthumperbuild议在评论中,我也尝试添加FrameworkB.framework
Copy Files
作为框架目标在构build阶段FrameworkA,但是这给了我在控制台中的这个错误:
dyld:Library未加载:@ rpath / FrameworkB.framework / FrameworkB引用自:/private/var/mobile/Containers/Bundle/Application/2A38A2BC-9CD7-4AF6-9E50-42C16D92D6B2/FrameworkTest.app/Frameworks/FrameworkA.framework/ FrameworkA原因:没有find合适的图像。 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地址= 0x10012C000,大小= 0x00008000段= __ TEXT在Segment :: map()映射/ private / var / mobile / Containers/Bundle/Application/2A38A2BC-9CD7-4AF6-9E50-42C16D92D6B2/FrameworkTest.app/Frameworks/FrameworkA.framework /Frameworks/FrameworkB.framework/FrameworkB
我与这个问题联系了苹果,并find了解决我的问题。 Apple的技术支持明确表示,我需要将FrameworkB.xcodeproj添加到我的应用程序项目中,所以我的项目结构是:
- FrameworkTest.xcodeproj(应用程序项目)
- FrameworkA.xcodeproj(cocoa触摸框架)
- FrameworkB.xcodeproj(cocoa触摸框架)
- FrameworkB.xcodeproj(cocoa触摸框架)
- FrameworkA.xcodeproj(cocoa触摸框架)
当我完成这个工作时,应用程序项目可以包含FrameworkB.framework作为embedded式库:
这解决了我的问题,使它可以在iOS设备上运行。
如果构build版本崩溃:撤销您的企业分发证书,并创build一个新的解决问题。 一旦我做到了,它完美的工作。
我也有类似的问题与embedded式框架,我只是从GitHub尝试你的代码。
选项1 (不适合团队合作)
错误消失的原因是将FrameworkB添加到FrameworkTest目标的常规选项卡中的embedded式二进制文件 。
选项2
那么,与其他开发人员共享项目肯定是重要的:)。 你尝试过这种方法吗? 添加新的复制文件阶段在FramewrokA的构build阶段并将FrameworkB添加到框架目标中。
但我不知道为什么它在模拟器上工作。 如果有人知道,请随时发表评论。
干杯