- ENABLE_BITCODE 实际上是做什么的,将来它会是一个非可选的要求吗?
我不确定您在什么级别上寻找答案,所以让我们进行一次小旅行。其中一些你可能已经知道了。
当你构建你的项目时,Xcode 会clang为 Objective-C 目标调用和swift/swiftc为 Swift 目标调用。这两个编译器都将应用程序编译为中间表示(IR),其中一个 IR 是位码。从这个 IR 中,一个名为 LLVM 的程序接管并创建 x86 32 位和 64 位模式(用于模拟器)和 arm6/arm7/arm7s/arm64(用于设备)所需的二进制文件。通常,所有这些不同的二进制文件都集中在一个名为fat binary的文件中。
ENABLE_BITCODE 选项取消了这最后一步。它使用 IR 位码二进制文件创建应用程序版本。它有许多不错的功能,但有一个巨大的缺点:它不能在任何地方运行。为了让带有二进制位码的应用程序运行,需要将位码重新编译(可能是组装或转码……我不确定正确的动词)成 x86 或 ARM 二进制文件。
当一个比特码应用程序被提交到 App Store 时,Apple 将执行最后一步并创建完成的二进制文件。
目前,位码应用程序是可选的,但历史表明 Apple 将可选的东西变成了要求(如 64 位支持)。这通常需要几年时间,因此第三方开发人员(如 Parse)有时间进行更新。
- 我可以使用上述方法而不会产生任何负面影响并且不会影响未来的应用商店提交吗?
是的,您可以关闭 ENABLE_BITCODE,一切都会像以前一样工作。在 Apple 将位码应用程序作为 App Store 的要求之前,你会没事的。
启用它永远不会对性能产生负面影响,但用于测试的应用程序的内部分发可能会变得更加复杂。
至于积极的影响……那很复杂。
为了在 App Store 中分发,Apple 将为每个机器架构 (arm6/arm7/arm7s/arm64) 创建单独的应用版本,而不是一个带有胖二进制文件的应用。这意味着安装在 iOS 设备上的应用程序会更小。
此外,当重新编译位码时(可能是组装或转码......再次,我不确定正确的动词),它被优化。LLVM 一直致力于创造新的更好的优化。理论上,App Store 可以在 App Store 中随着 LLVM 的每个新版本重新创建应用程序的单独版本,因此您的应用程序可以使用最新的 LLVM 技术重新优化。