Xcode 8:禁用bitcode和Umbrella框架

时间:2017-02-07 16:00:31

标签: ios xcode

我目前正在构建一个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

所以这是我的问题:

  1. 禁用bitcode正在做什么?我发现Apple在您提交代码后可以运行优化。这些速度优化或磁盘空间优化,还是任何其他优化?
  2. 我是否在构建我的Umbrella框架时做错了什么?有可能不禁用bitcode吗?

2 个答案:

答案 0 :(得分:1)

首先: 我今天遇到了完全相同的问题,我无法修复它。但删除Bitcode固定它为我。谢谢你

问题:

  1. Bitcode类似于Java的字节码。您的应用程序完全编译,但不在机器代码中(如汇编程序)。您的应用程序已编译为Bitcode。这有助于Apple在其服务器上构建不同版本的应用程序。一个用于64位,一个用于32位设备。然后他们分开两个应用程序,这节省了实际设备上的磁盘空间。 他们可能还有一些进一步的优化,可以加速应用程序。通常,今天不需要它。

  2. 我尝试了几乎所有我能想象到的东西,此刻我会说:如果你有一个大伞框架,那么它是不可能禁用bitcode的。你能否检查一下你的伞形框架中是否有不支持Bitcode的子框架?像AWS SDK,Facebook SDK ...... 如果所有子框架都支持Bitcode,则可以支持Bitcode。这个答案似乎很有希望,但它有点陈旧:https://stackoverflow.com/a/27638841/1203713

  3. 此致 亚历

答案 1 :(得分:1)

好的,在对完全不相关的问题进行了一些研究之后,我找到了这个帖子:https://github.com/Carthage/Carthage/issues/535

实质上,这解决了问题2和另一个问题:是的,你可以为你的Umbrella框架启用bitcode。

为此,您必须手动将名为BITCODE_GENERATION_MODE的用户定义设置(在Build设置中,单击顶部栏中的加号)设置为bitcode。这将迫使Xcode使用真正的bitcode构建项目,而不仅仅是bitcode子集。 User_Defined_Field bitcode 您必须为Umbrella框架下的所有框架设置此标志。