Xcode7引入了Bitcode,这是一种LLVM中间二进制文件,这意味着苹果的服务器可以针对不同的架构重新编译我的应用程序,而不需要我的参与。
在Lookback,我在我们的库中发布了一个静态归档框架。似乎当你使用"Build & Archive“之外的任何东西构建时,bitcode实际上并不会被发送到我的库中,并且任何人在他们的应用程序中链接到我的库并尝试在启用Bitcode的情况下执行build & Archive时,都会收到以下两个警告之一:
ld: 'Lookback(Lookback.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target.
(如果lib是用xcodebuild构建的(如果lib是用xcodebuild用xcode7构建的)我有一个构建device+simulator通用二进制文件的构建脚本,所以我不能使用build & Archive,而是从我的脚本中的命令行运行xcodebuild
。如何让xcodebuild
生成一个合适的支持位代码的库?
发布于 2015-07-18 07:37:34
位码是一种编译时特性(而不是链接时特性),这意味着在使用位码构建时,每个.o文件都应该包含一个名为__bitcode的额外部分。您可以通过运行otool -l (my .o or .a file) | grep __LLVM
来确认您的二进制文件是否与位码兼容。
在正常构建时,Xcode会将构建标志-fembed-bitcode-marker
添加到任何clang调用中。这看起来像是某种“如果启用了bitcode,这就是bitcode会去的地方”之类的东西,实际上并没有启用bitcode。
当你“构建和存档”时,这个标志被-fembed-bitcode
替换,它确实构建了一个启用了位码的二进制文件。
似乎有两种方法可以让xcodebuild
使用-fembed-bitcode
xcodebuild -target LookbackSDK archive
中,而不是xcodebuild -target LookbackSDK build
。这样做的副作用是将二进制文件放在您的Xcode管理器中,而不是build/
文件夹中,不过您可以通过使用-exportArchive -archivePath ./build
来解决这个问题(感谢OTHER_CFLAGS="-fembed-bitcode"
通过添加其他C标志来使用该标志)。您的xcodebuild
调用应该类似于xcodebuild OTHER_CFLAGS="-fembed-bitcode" -target LookbackSDK build
.我选择了后者,这样我就不必更改我的构建系统,但它将为每个文件生成警告,因为现在-fembed-bitcode-marker
和-fembed-bitcode
都被发送到clang。幸运的是,后者赢了,生成了一个支持Bitcode的库!
资源
发布于 2017-09-09 02:40:21
使用Xcode8时,我无法让OTHER_CFLAGS="-fembed-bitcode"
正常工作。当我试图创建一个包含我的静态框架的应用程序的存档构建时,我总是遇到类似was built without full bitcode. All frameworks and dylibs for bitcode must be generated from Xcode Archive or Install build
的东西。
我真正想要的是:
BITCODE_GENERATION_MODE=bitcode
我实际上在聚合目标中使用了一个Run脚本,完整的xcodebuild代码行如下所示(仅供参考):
xcodebuild BITCODE_GENERATION_MODE=bitcode OTHER_CFLAGS="-fembed-bitcode" -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build
发布于 2015-09-15 18:11:36
一旦你添加了对静态库的bitcode支持,它将与Xcode 6不兼容。应用程序将不会存档。
我想清楚地提到bitcode的设置,因为@nevyn的答案让我有点困惑。
转到构建设置,搜索“自定义编译器标志”。添加-fembed-bitcode
。这将使用bitcode构建您的库。
https://stackoverflow.com/questions/31486232
复制相似问题