如何使用Bitcode构建iOS库以实现与XCode 6的向后兼容性?

17

我正在构建一个iOS静态库,并希望提供对位码的支持。为了实现这一点,我进入构建设置,搜索“自定义编译器标志”并添加-fembed-bitcode。这将使用位码构建库,在XCode 7下一切正常。

然而,通过上述方法,我失去了与XCode 6的向后兼容性。因此,我必须向我的用户发布两个不同的库版本,一个带有位码标记,一个没有,因为并非每个人都升级到XCode 7。

是否有一种方法可以启用位码库并具有向后兼容性,而无需发布2个不同版本?

更新:

你好@Vinicius Jarina,谢谢你的信息。我知道你可以创建一个Fat库,我想这是常见的做法。到目前为止,我是为两个架构进行构建:

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdK iphoneos 
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator

然后使用lipo来打包成一个fat库,例如:

lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}"

然而,我现在应该怎么做呢?我尝试了类似于这个链接的方法,但是没有成功:

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos
xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator
xcodebuild -configuration "Release" OTHER_CFLAGS='-fembed-bitcode' -target "${FMK_NAME}" -sdk iphonesimulator
xcodebuild -configuration "Release" OTHER_CFLAGS='-fembed-bitcode' -target "${FMK_NAME}" -sdk iphoneos

然后像这样创建一个 fat lib:

lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}"

我该如何在我的脚本中同时包含这两个文件,然后将它们打包成一个大型库?

更新2:

我最终成功实现了这个目标,现在我会列出我的解决方案以帮助可能遇到同样问题的其他人:

xcodebuild -configuration "Release" ENABLE_BITCODE=NO -target "${FMK_NAME}" -sdK iphoneos 
xcodebuild -configuration "Release" ENABLE_BITCODE=NO -target "${FMK_NAME}" -sdk iphonesimulator
xcodebuild -configuration "Release" ENABLE_BITCODE=YES -target "${FMK_NAME}" -sdk iphonesimulator
xcodebuild -configuration "Release" ENABLE_BITCODE=YES -target "${FMK_NAME}" -sdk iphoneos

然后像这样创建一个 fat lib:

lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/Versions/${FMK_VERSION}/${FMK_NAME}"
2个回答

7

您可以尝试使用不同的库来创建一个fat-library。

lipo -create -output libAndreasv.a libAndreasvBitcode.a libAndreasvARMv7.a libAndreasvARM64.a

这在过去用于创建fat库(x86,x64,ARMv7,ARM64),也应该适用于位码。


我更新了我的问题以使其更清晰,因为我无法在这里添加所有这些信息并且仍然可读。 - andreasv

0

也许我漏掉了什么,但我认为无论是否启用位码,你都不能在一个 fat 库中有重复的架构。例如,以下命令对我来说会导致错误:

lipo -create libcurl_iOS_bitcode.a libcurl_iOS_nobitcode.a -output libcurl_iOS_both.a

fatal error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: libcurl_iOS_bitcode.a and libcurl_iOS_nobitcode.a have the same architectures (armv7) and can't be in the same fat output file

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接