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