首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Xcode生成选项“启用bitcode”的影响是/否

Xcode生成选项“启用bitcode”的影响是/否
EN

Stack Overflow用户
提问于 2015-06-27 12:12:43
回答 9查看 196.4K关注 0票数 281

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

紧急:所有的bitcode都将被删除,因为'path/Parse.framework/Parse(PFAnalytics.o)‘是在没有bitcode的情况下构建的。必须启用bitcode (Xcode设置ENABLE_BITCODE)重新生成它,从供应商获得更新的库,或禁用此目标的bitcode。注:这将是未来的一个错误。

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

Xcode通知您有关bitcode的信息。

激活此设置意味着目标或项目应在为支持该设置的平台和体系结构进行编译期间生成bitcode。对于Archive构建,将在链接二进制文件中生成bitcode,以便提交到应用程序存储。对于其他构建,编译器和链接器将检查代码是否符合生成bitcode的要求,但不会生成实际的bitcode。ENABLE_BITCODE

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

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

回答 9

Stack Overflow用户

回答已采纳

发布于 2015-07-03 12:41:53

  • ENABLE_BITCODE实际上是做什么的,它将来会是一个非选择性的要求吗?

我不知道你在哪一层找答案,所以我们来做个小旅行吧。有些你可能已经知道了。

构建项目时,Xcode为Objective目标调用clang,对Swift目标调用swift/swiftc。这两个编译器都将应用程序编译成一个中间表示 (IR),其中一个是bitcode。从这个IR中,一个名为LLVM的程序接管并创建了x86 32和64位模式(用于模拟器)和arm6/arm7 7/arm7s/arm64(用于设备)所需的二进制文件。通常,所有这些不同的二进制文件都集中在一个名为脂肪二元的文件中。

ENABLE_BITCODE选项删除了最后一步。它用一个IR比特码二进制文件创建了应用程序的一个版本。这有许多不错的特性,但是有一个巨大的缺点:它不能在任何地方运行。为了运行一个具有比特码二进制代码的应用程序,需要重新编译bitcode (可能是组装或转换的…)。我不确定是否有正确的动词)为x86或ARM二进制。

当一个bitcode应用程序被提交到Apple时,Apple将完成最后一步,并创建完成的二进制文件。

目前,bitcode应用程序是可选的,但历史表明,苹果将可选内容转化为需求(比如64位支持)。这通常需要几年时间,因此第三方开发人员(如Parse)有时间进行更新。

  • 我能否在不影响将来应用程序提交的情况下使用上述方法而不产生任何负面影响?

是的,你可以关掉ENABLE_BITCODE,一切都会和以前一样。在苹果将比特代码应用程序作为应用程序商店的必备功能之前,你会没事的。

  • 如果启用/禁用它,会对性能产生任何影响吗?

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

至于正面影响,…这很复杂。

为了在Apple中发布,苹果将为每种机器架构(arm6/arm7/arm7s/arm64)创建不同版本的应用程序,而不是一个带有胖二进制文件的应用程序。这意味着安装在iOS设备上的应用程序会更小。

此外,在重新编译bitcode时(可能是组装或转换…)再次,我不确定正确的动词),它是优化的。LLVM总是致力于创建新的更好的优化。理论上,App可以通过LLVM的每个新版本在app中重新创建应用程序的单独版本,这样您的应用程序就可以使用最新的LLVM技术进行重新优化。

票数 475
EN

Stack Overflow用户

发布于 2015-09-10 17:37:54

确保选择"All“以查找启用bitcode生成设置:

票数 71
EN

Stack Overflow用户

发布于 2015-06-27 12:26:19

Bitcode是iOS 9的一个新特性

Bitcode是已编译程序的中间表示形式。你上传到iTunes连接包含比特代码的应用程序将被编译并链接到Apps。包括bitcode将允许苹果在未来重新优化你的应用程序二进制,而不需要向商店提交一个新版本的应用程序。 注意:对于iOS应用程序,bitcode是默认的,但是是可选的。如果您提供bitcode,那么应用程序包中的所有应用程序和框架都需要包含bitcode。对于watchOS应用程序,必须使用bitcode

因此,您应该禁用bitcode,直到应用程序的所有框架都启用了bitcode。

票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31088618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档