当前位置: 首页 > 知识库问答 >
问题:

Xcode 构建选项“启用位码”的影响 是/否

焦宏硕
2023-03-14

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

紧急:将删除所有位代码,因为“[path]/Parse.framework/Parse(PFAnalytics.o)”是在没有位代码的情况下生成的。您必须在启用位代码的情况下重新生成它(Xcode设置ENABLE_bitcode),从供应商处获取更新的库,或为此目标禁用位代码。注意:这将是将来的错误。

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

Xcode会通知您关于位代码的信息

激活此设置表示目标或项目应该在编译支持它的平台和架构时生成位码。对于存档版本,位码将在链接的二进制文件中生成,以提交给应用商店。对于其他版本,编译器和链接器将检查代码是否符合位码生成的要求,但不会生成实际的位码。[ENABLE_BITCODE]

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

    < li >我是否可以使用链接的答案来规避该问题,而不会产生任何负面影响,也不会影响未来的AppStore提交? < Li > < code > ENABLE _ bit code 实际上是做什么的,将来它会是一个非可选的要求吗? < li >如果我启用/禁用它,是否会影响性能?

共有3个答案

别俊誉
2023-03-14

位代码是iOS 9的新功能

Bitcode是已编译程序的中间表示。您上传到iTunesConnect的包含bitcode的应用程序将被编译并链接到App Store上。包含bitcode将允许Apple在未来重新优化您的应用程序二进制文件,而无需向商店提交新版本的应用程序

注意:对于iOS应用程序,位代码是默认的,但也是可选的。如果您提供位代码,应用捆绑包中的所有应用和框架都需要包含位代码。对于watchOS应用程序,需要位代码

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

公冶和豫
2023-03-14

确保选择“全部”以查找启用位代码构建设置:

闻人凯泽
2023-03-14
  • ENABLE_BITCODE实际上做了什么,将来会是一个非可选的要求吗?

我不确定你是在什么层面上寻找答案,所以让我们来一次小小的旅行。其中一些你可能已经知道了。

构建项目时,Xcode为Objective-C目标调用<code>clang/<code>swiftc。这两个编译器都将应用程序编译为中间表示(IR),其中一个中间表示是位代码。从这个IR中,一个名为LLVM的程序接管并创建x86 32和64位模式(用于模拟器)和arm6/arm7/arm7s/arm64(用于设备)所需的二进制文件。通常,所有这些不同的二进制文件都集中在一个称为fat二进制文件的文件中。

ENABLE_BITCODE选项省略了最后一步。它创建了一个具有IR位码二进制的应用程序版本。这有许多很好的特性,但有一个巨大的缺点:它不能在任何地方运行。为了让一个具有位代码二进制的应用程序运行,位代码需要重新编译(可能是汇编或转码…我不确定正确的动词)为x86或ARM二进制。

当位码应用程序提交到App Store时,Apple将执行最后一步并创建完成的二进制文件。

目前,位代码应用是可选的,但历史表明,苹果将可选的东西变成了要求(如64位支持)。这通常需要几年时间,所以第三方开发者(比如Parse)有时间更新。

    < li >我可以使用上述方法,而不会产生任何负面影响,也不会影响未来的appstore提交吗?

是的,您可以关闭ENABLE_BITCODE,一切都将像以前一样工作。在苹果将比特码应用程序作为App Store的要求之前,你会没事的。

  • 如果我启用/禁用它,是否有任何性能影响?

启用它永远不会有负面的性能影响,但用于测试的应用程序的内部分发可能会变得更加复杂。

至于积极影响…这很复杂。

对于在App Store中的分发,Apple将为每种机器架构(arm6/arm7/arm7s/arm64)创建单独版本的应用程序,而不是一个带有fat二进制文件的应用程序。这意味着安装在iOS设备上的应用程序将会更小。

此外,当位码被重新编译时(可能是组装或转码…同样,我不确定正确的动词),它会被优化。LLVM一直致力于创建新的更好的优化。理论上,应用商店可以在应用商店中为LLVM的每个新版本重新创建应用程序的单独版本,因此您的应用程序可以使用最新的LLVM技术进行重新优化。

 类似资料:
  • 问题内容: 我试图构建新项目,但是当我单击构建时,构建每次都会失败。 我尝试删除我的项目并再次创建它,但是仍然没有帮助。 警告 错误 这些是Xcode向我显示的错误消息。项目名称为“ MyFirstApp”,我在该错误消息上剪切了一些文件路径。那么我如何建立这个项目呢? 问题答案: 在终端中尝试:

  • 对于iPad专用应用程序或通用应用程序,选项告诉Xcode/iOS应用程序是否支持iOS 9中引入的iPad多任务功能。但如果是iPhone专用应用程序,也会出现选项。在这种情况下,这个选项的影响是什么?

  • 我们使用Git、Jenkins和Artifactory作为CI/CD管道。我们有一个很大的代码库,每次完整的构建都需要大量的时间来处理。例如,我们有一个包含100+模块的聚合pom项目。父级文件如下所示: 因为更改可能不会发生在每个模块上,所以我们希望通过只构建自上次成功构建以来受影响的模块来加快构建过程。这可以通过Maven来完成。 示例: 如果开发人员知道哪些模块被更改了,这是很容易的。如果没

  • 我正在写一些函数来添加位图上的噪声效果。我发现了类似的问题:在绘图中添加噪波效果 位图输出位图=位图。创建位图(bitmap.getWidth(),位图。getHeight(),位图。配置。ARGB_8888); 我应该如何添加滤色器才能得到这样的结果?你能提供一些代码吗?

  • 问题内容: 我学习了“ 程序库指南 ”。它提到像下面这样用来管理版本。 我得到的信息是,如果未设置。它等于libfoo.so.1.0.0, 而且我发现它也可以在没有soname的情况下工作,例如以下 因此,我认为唯一有用的一点是,当您使用命令检查共享库时,该选项可以告诉您共享库的版本。 它还能做什么? 问题答案: soname用于指示您的库支持哪些二进制api兼容性。 链接器在编译时使用它从库文件