【问题标题】:Build an iOS library with Bitcode in order to have backwards compatibility with XCode 6. How?使用 Bitcode 构建 iOS 库,以便向后兼容 XCode 6。如何?
【发布时间】:2015-10-07 11:46:37
【问题描述】:

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

但是,按照上述方法,我失去了与 XCode 6 的向后兼容性。话虽如此,我必须向我的用户提供 2 个不同的库版本,一个带有位码标志,一个没有,因为不是每个人都升级到 XCode 7。

有没有办法让库启用位码并具有向后兼容性,而不必发布 2 个不同的版本?

更新:

您好@Vinicius Jarina,感谢您的留言。我知道您可以创建一个胖库,我想这是一种常见的做法。到目前为止,我所做的是为这两种架构构建:

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}"

但是,我现在该怎么做?我根据link 尝试了类似的方法,但没有运气:

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

然后像这样创建一个胖库:

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

如何在我的 scipt 中构建以包含两者,然后将它们打包到胖库中?

更新 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

然后像这样创建一个胖库:

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

【问题讨论】:

    标签: ios xcode6 ios9 xcode7 bitcode


    【解决方案1】:

    您可以尝试使用不同的库创建胖库。

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

    这曾经适用于胖库(x86、x64、ARMv7、ARM64)应该也适用于位码。

    【讨论】:

    • 我更新了我的问题,使其更加清晰,因为我无法在此处的评论中添加所有这些信息并且可读。
    【解决方案2】:

    也许我遗漏了一些东西,但我不相信你可以在胖库中拥有重复的架构,无论是否启用/禁用位码。例如,以下命令对我来说会导致错误:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-16
      • 2021-11-11
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 2015-08-18
      相关资源
      最近更新 更多