关注

IOS&TvOS上支持Bitcode

问题

  • 我的应用程序转到3.x版本后文件大小增加了130-150MB。
  • 应用程序在使用了Bitcode以后,文件尺寸变大。
  • 我想在iOS以及tvOS上使用Bitcode。

原因

在Unity 5.3.0f1中,我们给iOS项目默认开启了Bitcode支持。这项来自苹果的技术,可以在应用被提交到应用商店之后,对其进行重新优化 。 虽然在提交应用的时候, 需要提供更多额外的应用信息,但这是一项很有用的技术,应该尽量使用它。当应用在应用商店上架时,这些额外的信息将会从您的包里剥离,并不会增加用户最终下载的文件大小。这个技术已经捆绑到tvOS以及watchOS应用上了,因此我们也为iOS应用打开了支持,帮助用户优化他们的应用。当使用Bitcode的时候,您可能会遇到两个问题:

  • 由于启用了Bitcode,应用尺寸会超过iOS无线下载时对文件大小的限制, 并且也比tvOS的主要应用包程序大。
  • 您希望给iOS以及tvOS应用获取最好的下载大小,以及存储利用率。

解决方案

在修改任何东西之前,首先需要了解苹果的要求是什么以及他们的限制在哪儿。一旦明白了这些限制,就能够优化应用的尺寸。这里可以阅读更多关于IL2CPP构建尺寸优化相关的信息

Bitcode尺寸

下图中的项目,由一个Unity 5.3.4p1的空项目编译而成,然后在Xcode7.3中,使用分发证书进行存档构建。

在应用打包完成以后,可以通过Archives选项卡下的Window->Organizer菜单,找到打包好的.ipa文件。

然后打开终端,找到生成的.ipa文件,使用以下命令运行应用:

otool -l <your_app_name>.app/<your_app_name>

检查终端输出,然后寻找"segname __LLVM"这样的词条:

cmd LC_SEGMENT
cmdsize 124
segname __LLVM
vmaddr 0x00fac000
vmsize 0x07ce0000
fileoff 15564800
filesize 130940928

“filesize”属性就是Bitcode的文件大小。

注意:如果您为多个系统架构进行构建编译,可能会看到多个这样的segments 。这时需要对他们进行单独辨认 。

空项目例子

项目由一个Unity 5.3.4p1的空项目编译而成,然后在Xcode7.3中,使用分发证书进行存档构建。

  • IPA文件大小:159MB(Unity-iPhone.ipa)

提取IPA:

  • 18MB BCSymbolMaps(支持Bitcode的符号文件,将不会传递到最终用户)
  • 234MB Payload(包含游戏资源,额外文件以及可执行程序,238M)
  • 58MB符号(符号文件,不会传递给最终用户)

Payload主要由可执行文件和标准引擎文件组成。虽然资源大概只有5MB,我们把关注点聚焦在可执行文件上。我们可以通过运行两次,然后使用otool来对其进行分析:

  1. otool -arch armv7 -l <exec_name>
  2. otool -arch arm64 -l <exec_name>

The segment sizes of the reports are following:

各部分大小报告如下:

  1.  armv7:
    1. TEXT segment (代码): 7.5 MB
    2. DATA segment (各种静态代码区域以及il2cpp元数据): 0.3 MB
    3. LLVM (Bitcode) segment: 111.1 MB (将被苹果服务器剥离,不会传达至最终用户)。
    4. LINKEDIT (链接动态链接库) segment: 0.9 MB*
  2. arm64:
    1. TEXT segment (代码): 8.4 MB
    2. DATA segment (各种静态代码区域以及il2cpp元数据): 0.5 MB
    3. LLVM (Bitcode) segment: 110.2 MB (将被苹果服务器剥离,不会传达至最终用户)。
    4. LINKEDIT (链接动态链接库) segment: 0.8 MB*

armv7平台上无Bitcode的可执行程序尺寸是8.7MB,而对于arm64则是9.7MB。

不包含Bitcode的整个可执行程序:18.4MB

预计的安装尺寸(可执行程序+资产):23.4MB

在没有对应用进行瘦身的条件下预计下载大小:1.25MB(压缩资产)+15.9MB(TEXT segment,因为加密的原因所以没有压缩得很好)+0.5MB(DATA+LINKEDIT,他们压缩得相当好)=17.65MB

*如果您没有使用存档构建而是正常构建并且运行.ipa,LINKEDIT大小会增加5倍。当在设备上核查空项目的安装尺寸时,可以监控到这个情况。在XCode中使用Build and Run产生的通用构建安装包大小是44.5MB。相对的,使用存档构建导出的ipa进行安装的通用构建安装包大小是23.4MB。导出功能可以由上面的图片看到。

当使用存档构建时,Bitcode才会被启用。一旦将应用程序上传到iTunes Connect,就可以查看不同平台的压缩大小,下载大小和安装大小以及通用构建的预期大小。在此阅读更多关于IL2CPP构建尺寸优化的信息

禁用Bitcode

有时我们需要禁用Bitcode。一些第三方工具还不支持Bitcode,同时您又需要使用这些第三方工具 。了解更多取消支持Bitcode的内容请查看如何取消Bitcode支持

更多信息

本文适用于Unity 5.2.0p1及更高,XCode 7及更高,iOS 9.0及更高版本

这篇文章有帮助吗?
0 人中有 0 人觉得有帮助
还有其它问题?提交请求

0 评论

登录写评论。