13

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

在 XCode 7.x 中,我必须使用 BITCODE_GENERATION_MODE=bitcode 添加用户定义的设置才能启用它,但自上一个 XCode 7.3 版本以来,这已停止工作。

我已经尝试了我在互联网上找到的所有东西,比如 add OTHER_CFLAGS="-fembed-bitcode",但是任何东西都像以前一样工作......

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

enable_bitcode = 否

无论我做什么,ENABLE_BITCODE 始终为“否”。

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

4

2 回答 2

17

我昨天遇到了类似的问题。经过一番调查,xcodebuild从任何 Xcode 目标中的“运行脚本”构建阶段运行时出现的问题似乎与要使用的工具链的显式规范有关,通过 ENV 变量完成TOOLCHAINS

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

# workaround for bitcode generation problem with Xcode 7.3 unset TOOLCHAINS

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

于 2016-03-27T13:54:12.303 回答
0

我面临同样的问题。就像你一样,BITCODE_GENERATION_MODE只是OTHER_CFLAGS="-fembed-bitcode"被忽略了,我的构建坏了

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

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

当它构建一个无位代码框架时,对我有用的是:

  • 选择静态库目标(不是聚合目标),然后选择“通用 iOS 设备”
  • 打扫
  • 选择静态库目标,但选择模拟器
  • 构建它(工作,即使它是瞬时的,因为它还没有被清理)
  • 选择静态库目标,但再次选择“通用 iOS 设备”。
  • 构建它
  • 选择“通用 iOS 设备”的聚合目标
  • 最后,构建它
  • 如果失败,请重新开始。我有时需要做两到三遍才能奏效。

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

您可以通过运行轻松检查您的框架是否支持位码otool -arch armv7 -l <framework_path> | grep LLVM

为了再次打破它,只需为模拟器构建聚合目标。该库仍将是一个胖子,但比特码已经消失了。

肯定有人可以找到一个每次都有效的解决方案,但至少它为我解决了这个问题。

我当然不必在 Xcode 7.2 上这样做,而且我不知道这对于纯 CLI 构建是如何工作的。

于 2016-03-24T14:27:45.633 回答