我目前正在构建一个Umbrella框架(在任何人这么说之前,我知道苹果公司不鼓励这样做,但我是这样的,我是所有子框架的所有者,他们是如果它们不属于我或我可能创建的另一个Umbrella框架,并且我们处于Xcode 8中的封闭源配置中,则不会分发。
我已按照这篇文章创建了框架:https://stackoverflow.com/a/41815368/2572568
除了我收到以下错误外,一切正常:
dyld:未加载库:@ rpath / B.framework / B. 参考自:/private/var/containers/Bundle/Application/E0113060-CA91-47F8-BEE3-BDF1F847DB3A/app.app/Frameworks/A.framework/A 原因:找不到合适的图像。找到了: /private/var/containers/Bundle/Application/E0113060-CA91-47F8-BEE3-BDF1F847DB3A/app.app/Frameworks/A.framework/Frameworks/B.framework/B:' / private缺少必需的代码签名/var/containers/Bundle/Application/E0113060-CA91-47F8-BEE3-BDF1F847DB3A/app.app/Frameworks/A.framework/Frameworks/B.framework/B'
app是使用Umbrella框架A的应用程序,它具有子框架B
我发现从所有项目中禁用bitcode正在解决这个问题(这就是我现在正在做的事情):https://github.com/CocoaPods/CocoaPods/issues/3661
所以这是我的问题:
答案 0 :(得分:1)
首先: 我今天遇到了完全相同的问题,我无法修复它。但删除Bitcode固定它为我。谢谢你
问题:
Bitcode类似于Java的字节码。您的应用程序完全编译,但不在机器代码中(如汇编程序)。您的应用程序已编译为Bitcode。这有助于Apple在其服务器上构建不同版本的应用程序。一个用于64位,一个用于32位设备。然后他们分开两个应用程序,这节省了实际设备上的磁盘空间。 他们可能还有一些进一步的优化,可以加速应用程序。通常,今天不需要它。
我尝试了几乎所有我能想象到的东西,此刻我会说:如果你有一个大伞框架,那么它是不可能禁用bitcode的。你能否检查一下你的伞形框架中是否有不支持Bitcode的子框架?像AWS SDK,Facebook SDK ...... 如果所有子框架都支持Bitcode,则可以支持Bitcode。这个答案似乎很有希望,但它有点陈旧:https://stackoverflow.com/a/27638841/1203713
此致 亚历
答案 1 :(得分:1)
好的,在对完全不相关的问题进行了一些研究之后,我找到了这个帖子:https://github.com/Carthage/Carthage/issues/535
实质上,这解决了问题2和另一个问题:是的,你可以为你的Umbrella框架启用bitcode。
为此,您必须手动将名为BITCODE_GENERATION_MODE的用户定义设置(在Build设置中,单击顶部栏中的加号)设置为bitcode。这将迫使Xcode使用真正的bitcode构建项目,而不仅仅是bitcode子集。 您必须为Umbrella框架下的所有框架设置此标志。