xcodebuild 7.3 无法启用位码

xcodebuild 7.3 can't enable bitcode

我正在为 iOS 开发一个嵌入式框架。为了制作一个通用的 fat(带有模拟器和设备切片),我创建了一个带有脚本的聚合目标,该脚本使用 xcodebuildlipo 命令来生成它,就像许多人所做的那样。

使用 XCode 7.x 我必须添加一个用户定义的设置 BITCODE_GENERATION_MODE=bitcode 才能启用它,但是自从上次 XCode 7.3 版本。

我已经尝试了我在互联网上找到的所有方法,例如添加 OTHER_CFLAGS="-fembed-bitcode",但一切都像以前一样工作...

我在构建日志中看到了这个:

ENABLE_BITCODE 总是 NO,无论我做什么。

自 XCode 7.3 以来,是否有人尝试使用 xcodebuild 命令创建一个启用了位码的通用 fat 框架?

我遇到了同样的问题。就像你一样,BITCODE_GENERATION_MODEOTHER_CFLAGS="-fembed-bitcode" 被简单地忽略了,我的构建失败了

我确实注意到它有时有效,有时无效。似乎如果你为模拟器构建框架(或聚合目标),位码就会消失,无论你在 xcodebuild 命令中有什么。

我正在使用 Xcode 7.3,我有 2 个目标:静态库和聚合目标来构建胖框架。

构建无位码框架时对我有用的是:

  • Select 静态库目标(不是聚合目标),然后选择 "Generic iOS device"
  • 清理它
  • Select 静态库目标,但选择一个模拟器
  • 构建它(有效,即使它是瞬时的,因为它还没有被清理)
  • Select 静态库目标,但再次选择 "Generic iOS device"。
  • 建造它
  • Select "Generic iOS device"
  • 的总目标
  • 最后,构建它
  • 如果失败,重新开始。我有时需要做两三次才能起作用。

当我这样做时,我的胖库最终有位码。

您可以通过 运行 otool -arch armv7 -l <framework_path> | grep LLVM

轻松检查您的框架是否支持位码

为了再次破解它,只需为模拟器构建聚合目标。该库仍然是一个胖子,但是 bitcode 不见了。

肯定有人能找到每次都有效的解决方案,但至少它解决了我的问题。

我当然不必在 Xcode 7.2 中执行此操作,而且我不知道这对于纯 CLI 构建是如何工作的。

我 运行 昨天遇到了类似的问题。经过一些调查,当 运行ning xcodebuild 从任何 Xcode 目标的 "Run Script" 构建阶段出现时,问题似乎与工具链的明确规范有关使用,通过 ENV 变量完成 TOOLCHAINS.

因此,在Apple发布Xcode7.3的固定版本之前,您可以尝试在脚本的开头添加以下命令:

# workaround for bitcode generation problem with Xcode 7.3 unset TOOLCHAINS

这应该是无害的,因为当您从命令行 运行 xcodebuild 时默认情况下不会设置此 env 变量,并且此解决方法在我的情况下工作得很好。