本文译自:Guides and Sample Code 中对问题:How can I make my app smaller, so that it is faster to download and install? 的回答。
本文介绍一些如何减小app首次下载安装时的大小的技巧。注意这里说的是“首次安装”,跟更新app不一样。关于“如何减少app更新时下载包大小”的介绍详见我的另外一篇译文:
- 测量一下你的app
在尝试任何优化前,应该先测测你的app的大小。本文介绍的一些技巧是考量了一些必须考虑的消极影响后给出的,你必须权衡利弊后作出正确的选择。所以你要先测测app的大小,然后才能分析如何去优化。
app的发布流程中会产生很多产物,每个都有其作用,同时也占据空间。理解每个产物代表什么、怎么用它衡量app的大小,这一点很重要。
1、app bundle:
.app bundle 包含着app中的所有二进制文件、资源(如图片),
bundle中有着app运行在所有其支持的设备上的一切东西。就本文而言,
app bundle 就是你打包app是产生的.app文件。
2、提交到App store 的.ipa(App Store submission .ipa):
它是在你用Xcode archive后export for iOS App Store Deployment时产生的。
这个.ipa文件是一个压缩目录,包含着app bundle和一些App Store services 所需的资源,
比如用于崩溃报告的.dSYM 文件和 On Demand Resources 的一些资源包。
3、通用.ipa(universal .ipa):
它是由包含 '运行在任何设备上所需资源'的app bundle 压缩而成。
Bitcode被重新编译,其他App store所需的类似.dSYM文件和一些On Demand Resources都被移除了。
在App Store下载app时,这种.ipa文件会被下载到运行iOS 8 及更低系统版本的设备中。
4、瘦身版的.ipa(thinned .ipa):
它是由只包含'运行在特定设备上所需资源'的app bundle 压缩而成。
Bitcode被重新编译,其他App store所需的类似.dSYM文件和一些On Demand Resources都被移除了。
在App Store下载app时,这种.ipa文件会被下载到运行iOS 9 及更高系统版本的设备中。
5、通用app bundle(universal app bundle):
它是通用.ipa 的解压缩文件,app的安装过程中会将通用.ipa解压成通用 app bundle,并安装到设备中。
6、瘦身app bundle(thinned app bundle):
它是瘦身.ipa 的解压缩文件,app的安装过程中会将瘦身.ipa解压成瘦身 app bundle,并安装到设备中。
- 获取app 大小检测报告
Xcode提供了检测app大小的工具 ,方式如下:
最后导出的文件夹中包含App Thinning Size Report.txt文件,文件内容是这样的
注意:此报告没有将上架App Store时的那道加密程序计算在内。
上面这个App Thinning Size Report.txt文件是对app上架App Store大小的一个估值。在App Store发布应用的流程中,当生成universal .ipa和thinned .ipa文件时,开发者提交审核的.ipa中的所有的二进制文件都会被加密。加密不会改变二进制文件的大小,但是加密的二进制将具有不同的压缩特性,导致App Store 的.ipa文件比App Thinning Size Report.txt里的估计值要大。
注意:使用TestFlight分发的测试app包含其他数据,增加了iTunes Connect报告的应用程序的大小。
未完待续。。。。