TL;博士
将您的嵌入式框架与其他框架链接,并且不将其他框架与您的应用程序链接,导致Build& amp;在设备上运行.
描述:
建立:
我的设置非常简单(Swift 2.3& Xcode Xcode 8.0; Build版本8S162m):
>使用Carthage(0.17.2)我用xcodebuild 8.0和TOOLCHAINS = com.apple.dt.toolchain.Swift_2_3 carthage build构建了Other.framework – 平台iOS
> MyApp嵌入了My.framework.
>应用程序和框架项目位于一个Xcode工作区下.
>我只是将Other.framework链接到My.framework(这意味着,MyApp根本没有链接到Other.framework).这里的要点是,MyApp不需要使用Other.framework API.
问题:
一切似乎都很好,直到我构建&在设备上运行该应用程序.应用程序已启动,并且该过程因以下Xcode错误而中止:
dyld: Library not loaded: @rpath/Other.framework/Other Referenced from: /private/var/containers/Bundle/Application/DCF0331F-FF23-43CF-AE79-B3857D5A6EE3/MyApp.app/Frameworks/My.framework/My Reason: no suitable image found. Did find: /private/var/containers/Bundle/Application/DCF0331F-FF23-43CF-AE79-B3857D5A6EE3/MyApp.app/Frameworks/My.framework/Frameworks/Other.framework/Other: required code signature missing for '/private/var/containers/Bundle/Application/DCF0331F-FF23-43CF-AE79-B3857D5A6EE3/MyApp.app/Frameworks/My.framework/Frameworks/Other.framework/Other'
我检查了Other.framework的签名,看起来对我来说很好.此外,
将MyApp与Other.framework链接.可怕……这感觉很糟糕.
将完全相同的二进制Other.framework链接到MyApp并以这种方式解决问题,指出,Other.framework构建正常并且能够正确地重新签名.可能与迦太基没什么关系.
注意:
有一个类似的问题iOS 8+ framework with nested embedded framework,然而,我的还有其他原因.
解决方法
这个问题与嵌套框架无关.它完全是关于代码签名验证. dyld报告说Other.framework缺少一个代码签名.您需要签署框架.这应该由Xcode为您完成,所以我很好奇Other.framework是如何构建的.
你可以通过签名来解决这个问题.
codesign --force --deep --preserve-Metadata=identifier,entitlements,resource-rules,requirements,flags,team-identifier --sign - /path/to/Other.framework
或者只是深深地辞职你的应用:
codesign --force --deep --preserve-Metadata=identifier,team-identifier --sign - /path/to/My.app