昨天我发现了大量关于parse.com库的警告:

紧急:所有位码将被丢弃,因为'[path]/Parse.framework/Parse(pfanalysis .o)'是没有位码构建的。你必须通过启用bitcode (Xcode设置ENABLE_BITCODE)重新构建它,从供应商那里获得一个更新的库,或者禁用这个目标的bitcode。注意:这将是未来的一个错误。

我知道我可以用这个答案消除这些警告,但现在我想知道它是否会对AppStore提交和/或应用的实际性能产生任何负面影响。

Xcode会通知你有关比特码的信息

激活此设置表明目标或项目应该在编译过程中为支持它的平台和体系结构生成位码。对于存档构建,位代码将在链接二进制文件中生成,以便提交到应用程序商店。对于其他构建,编译器和链接器将检查代码是否符合位码生成的要求,但不会生成实际的位码。(ENABLE_BITCODE)

但我并没有从这篇文章中得到任何真正有用的信息。

我可以使用链接的答案来规避这个问题,而不产生任何负面影响,也不会影响未来的AppStore提交吗? ENABLE_BITCODE实际上是做什么的,将来它会是一个非可选的需求吗? 如果我启用/禁用它会对性能有任何影响吗?


当前回答

XCode 14 Beta版已弃用Bitcode:

https://developer.apple.com/documentation/xcode-release-notes/xcode-14-release-notes

Starting with Xcode 14, bitcode is no longer required for watchOS and tvOS applications, and the App Store no longer accepts bitcode submissions from Xcode 14. Xcode no longer builds bitcode by default and generates a warning message if a project explicitly enables bitcode: “Building with bitcode is deprecated. Please update your project and/or target settings to disable bitcode.” The capability to build with bitcode will be removed in a future Xcode release. IPAs that contain bitcode will have the bitcode stripped before being submitted to the App Store. Debug symbols for past bitcode submissions remain available for download. (86118779)

对于任何想了解比特码的人来说,比特码似乎不再是必要的了。

其他回答

位码使得崩溃报告更加困难。以下是来自HockeyApp的引用(这也适用于任何其他崩溃报告解决方案):

当将应用上传到app Store并启用“Bitcode”复选框时,苹果将使用该Bitcode构建并在将其分发到设备之前重新编译。这将导致二进制文件获得一个新的UUID,并且有一个选项可以通过Xcode下载相应的dSYM。

注:答案在2016年1月进行了编辑,以反映最新变化

比特码是iOS 9的新功能

Bitcode is an intermediate representation of a compiled program. Apps you upload to iTunes Connect that contain bitcode will be compiled and linked on the App Store. Including bitcode will allow Apple to re-optimize your app binary in the future without the need to submit a new version of your app to the store. Note: For iOS apps, bitcode is the default, but optional. If you provide bitcode, all apps and frameworks in the app bundle need to include bitcode. For watchOS apps, bitcode is required

所以你应该禁用位码,直到你的应用程序的所有框架都启用位码。

Starting with Xcode 14, bitcode is no longer required for watchOS and tvOS applications, and the App Store no longer accepts bitcode submissions from Xcode 14. Xcode no longer builds bitcode by default and generates a warning message if a project explicitly enables bitcode: “Building with bitcode is deprecated. Please update your project and/or target settings to disable bitcode.” The capability to build with bitcode will be removed in a future Xcode release. IPAs that contain bitcode will have the bitcode stripped before being submitted to the App Store. Debug symbols can only be downloaded from App Store Connect / TestFlight for existing bitcode submissions and are no longer available for submissions made with Xcode 14. (86118779)

来自文档

我是否可以在不影响未来appstore提交的情况下使用上述方法?

比特码将允许苹果优化应用程序,而不必提交另一个构建。但是,只有当应用程序包中的所有框架和应用程序都启用了此功能时,您才能启用此功能。 拥有它会有帮助,但没有它不应该有任何负面影响。

ENABLE_BITCODE实际上是做什么的,将来它会是一个非可选的需求吗?

对于iOS应用程序,bitcode是默认值,但可选。如果你提供 Bitcode,应用程序包中的所有应用程序和框架都需要包含 bitcode。对于watchOS应用程序,位码是必需的。

如果我启用/禁用它会对性能有任何影响吗?

App Store和操作系统优化iOS的安装 和watchOS应用程序通过定制应用程序交付的能力 用户的特定设备,以最小的足迹。这种优化, 所谓的应用程序细化,让你创建的应用程序使用最多的设备 特性,占用最小的磁盘空间,并适应未来的更新 可以被苹果应用。更快的下载和更多的空间 其他应用程序和内容提供了更好的用户体验。

不应该有任何性能影响。

确保选择“All”以找到启用位码构建设置: