ios – 在设备上构建和运行时,仅将嵌入式框架与其他动态框架链接失败

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

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...