xcodebuild 7.3 无法启用位码
xcodebuild 7.3 can't enable bitcode
我正在为 iOS 开发一个嵌入式框架。为了制作一个通用的 fat(带有模拟器和设备切片),我创建了一个带有脚本的聚合目标,该脚本使用 xcodebuild
和 lipo
命令来生成它,就像许多人所做的那样。
使用 XCode 7.x 我必须添加一个用户定义的设置 BITCODE_GENERATION_MODE=bitcode 才能启用它,但是自从上次 XCode 7.3 版本。
我已经尝试了我在互联网上找到的所有方法,例如添加 OTHER_CFLAGS="-fembed-bitcode"
,但一切都像以前一样工作...
我在构建日志中看到了这个:
ENABLE_BITCODE 总是 NO,无论我做什么。
自 XCode 7.3 以来,是否有人尝试使用 xcodebuild 命令创建一个启用了位码的通用 fat 框架?
我遇到了同样的问题。就像你一样,BITCODE_GENERATION_MODE
和 OTHER_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 变量,并且此解决方法在我的情况下工作得很好。
我正在为 iOS 开发一个嵌入式框架。为了制作一个通用的 fat(带有模拟器和设备切片),我创建了一个带有脚本的聚合目标,该脚本使用 xcodebuild
和 lipo
命令来生成它,就像许多人所做的那样。
使用 XCode 7.x 我必须添加一个用户定义的设置 BITCODE_GENERATION_MODE=bitcode 才能启用它,但是自从上次 XCode 7.3 版本。
我已经尝试了我在互联网上找到的所有方法,例如添加 OTHER_CFLAGS="-fembed-bitcode"
,但一切都像以前一样工作...
我在构建日志中看到了这个:
ENABLE_BITCODE 总是 NO,无论我做什么。
自 XCode 7.3 以来,是否有人尝试使用 xcodebuild 命令创建一个启用了位码的通用 fat 框架?
我遇到了同样的问题。就像你一样,BITCODE_GENERATION_MODE
和 OTHER_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 变量,并且此解决方法在我的情况下工作得很好。