减少我的应用程序的大小
问:如何使我的应用程序更小,以便下载和安装更快?
答:本文档是一系列技术,可以在首次下载并安装应用程序时缩小应用的大小。有关应用程序更新的信息,请参阅“减少iOS应用更新的下载大小” - 它们的工作方式不同。
衡量你的应用程序
在尝试任何优化之前,您应该测量。本文档中的一些技术是必须考虑的缺点。您必须衡量其影响力,以确保您做出正确的权衡。没有测量,你不能知道你正在做什么样的变化。
应用程序分发过程产生大量不同的工件,每个工件都有自己的目的和大小。了解每个工件代表什么和测量应用程序大小时使用哪些工件很重要。
一个应用程序包是.app包含所有在您的应用程序二进制文件,再加上所有应用的资源,如图像束。此软件包包含您的应用在每个支持的设备上运行所需的一切。为了本文档的目的,应用程序包仅指.app通过归档您的应用程序生成的。
一个应用程序商店提交的.ipa从Xcode的档案上传至App Store或通过出口为iOS App Store的部署存档时创建的。这.ipa是一个包含App Store服务所需的应用程序包和附加资源的压缩目录,例如.dSYM用于崩溃报告的文件和On Demand资源的资产包。
一个普遍的.ipa是包含了所有的资源来运行的任何设备上的应用程序压缩包的应用程序。Bitcode已重新编译,App Store所需的其他资源(如.dSYM文件和On Demand资源)将被删除。对于App Store应用程序,将.ipa其下载到运行iOS 8或更早版本的设备。
甲变薄的.ipa是只包含一个特定的设备上运行应用程序所需要的资源的压缩应用程序包。Bitcode已重新编译,App Store所需的其他资源(如.dSYM文件和On Demand资源)将被删除。对于App Store应用程序,.ipa它将下载到运行iOS 9或更高版本的设备。
一个普遍的应用程序包的解压缩普遍.ipa。.ipa安装过程解压缩通用并安装通用应用程序包。
甲减薄应用束被解压缩的变薄.ipa。.ipa安装过程解压缩已更新并安装稀疏的应用程序包。
获取应用大小报告
Xcode提供报告工具,可帮助您了解应用程序的大小。生成大小报告:
选择“为特定设备导出”,然后从弹出菜单中选择“所有兼容设备变体”。
选择“从位代码重建”。
在输出文件夹中,您可以找到App Thinning Size Report.txt每个设备类型分解压缩和未压缩文件大小以及任何On Demand资源的大小。这个文件的例子如清单1所示。
您还可以使用命令行中的xcodebuild导出Ad-Hoc存档,其中包含创建稀疏.ipa文件并获取应用大小报告的选项。
注意:此报告不考虑App Store应用程序的加密。有关详细信息,请参阅iOS App Store特定注意事项。
清单1Lister示例代码项目的示例应用程序稀疏大小报告
Lister的所有变体的应用薄化大小报告
变种:Lister-iPad 2等
支持的设备:iPad(第3代),iPad(第4代),iPad 2,iPad mini,iPhone 4S,iPhone 5,iPhone 5c和iPod touch
App + On Demand资源大小:3.3 MB压缩,9.6 MB未压缩
应用程序大小:3.3 MB压缩,9.6 MB未压缩
按需资源大小:零KB压缩,零KB未压缩
变种:Lister-iPod touch(第6代)-etc.ipa
支持的设备:iPad Air,iPad Air 2,iPad Pro(12.9英寸),iPad Pro(9.7英寸),iPad mini 2,iPad mini 3,iPad mini 4,iPhone 5s,iPhone 6,iPhone 6 Plus,iPhone 6s ,iPhone 6s Plus,iPhone SE和iPod touch(第6代)
App + On Demand资源大小:3.2 MB压缩,9.6 MB未压缩
应用程序大小:3.2 MB压缩,9.6 MB未压缩
按需资源大小:零KB压缩,零KB未压缩
变种:Lister.ipa
支持的设备:通用
App + On Demand资源大小:5.1 MB压缩,16.6 MB未压缩
应用大小:5.1 MB压缩,16.6 MB未压缩
按需资源大小:零KB压缩,零KB未压缩
iOS App Store特定注意事项
App Thinning Size Report是App Store上应用程序的最终大小的估计值。作为App Store分发过程的一部分,.ipa当App Store生成通用.ipa和稀疏.ipa文件时,App Store提交中的所有二进制文件都将被加密。加密不会更改二进制文件的大小,但加密的二进制文件将具有不同的压缩特性,导致.ipaApp Store中的文件大于App Thinning Size Report中列出的大小。
注意:上面的大小变化并不是App Store的加密算法唯一的,而是任何强加密算法的正常后果之一。通过设计,强大的加密算法产生无法有效压缩的输出。
App Store提供的应用文件大小信息可以在App Store上使用您的应用的大小。如果您担心您的应用程式超出了手机下载限制,则您在iTunes Connect上的构建将指示该构建是否超出了移动下载限制。
注意:使用TestFlight分发的测试应用程序包含其他数据,增加了iTunes Connect报告的应用程序的大小。该应用程序发布到App Store后,该数据将不会显示。
直到应用程序被App Review批准,iTunes Connect上显示的大小只是最终App Store大小的估计值。应用程序批准后,尺寸将被更新以反映最终值。
检查.ipa文件
如果通用.ipa或任何稀释的.ipa文件大于预期,则下一步是查看减薄的应用程序包,并查看其中的哪些文件占用最多的空间。这些.ipa文件只是.zip解压缩时具有特定结构的存档。
只需将.ipa文件的扩展名更改为.zip,然后使用Finder将其解压缩即可。右键单击解压缩的.app软件包,然后选择“显示软件包内容”以查看其中的资源。这可以让您了解使用最多空间的内容。
您可以.ipa通过打开终端来检查每个项目的压缩大小,并执行以下命令:
unzip -lv /path/to/your/thinned_app.ipa
重要提示:App Store提交.ipa文件不代表设备上应用程序的实际大小,不应用于此检查。仅使用获取应用大小报告中.ipa的步骤来生成的文件。
大小列具有文件中每个文件的压缩大小.ipa。您应该评估此大小,以减少应用程序中的资源大小。您可以大量减少资源的大小,但在生成.ipa文件后,您可能会发现该资源的压缩大小没有显着变化。减少.ipa文件大小的最有效的技术是删除不必要的资源。
优化提示
分析你的代码
将数据保留在代码之外
将任何资源(例如长字符串或表)从代码中移出并进入外部文件将使最终下载更小,因为外部文件比将数据编译为二进制文件时更有效地压缩。有关完整的技术背景,请参阅iOS App Store特定注意事项。
编译器选项
将Optimization Level构建设置设置为Fastest, Smallest [-Os]可以显着降低编译的二进制文件的大小。此设置是Xcode项目中“释放”配置的默认设置。
注意:仅对Optimization Level您的版本构建启用。
如果您使用Swift编写的watchOS应用程序,请使用检查.ipa文件libSwiftCore.dylib中所述的步骤验证文件夹子目录中只有一个副本Watch。如果看到多个副本,请确保为watchOS应用程序目标Always Embed Swift Standard Libraries设置了构建设置Yes,并将其设置No为watchOS应用程序扩展目标。
分析您的资产
健康检查您的应用程序
使用检查.ipa文件中描述的步骤检查应用程序包中实际运送的内容。应用程序通常包含从不使用的额外文件,如标题或自述文件。
杠杆资产目录
对图像,纹理和数据资产使用资产目录,使用相关元数据标记每个资产,以指示资产所用的设备。资产目录有助于最大限度地减少App Slicing提供的大小减少,这对于每个设备不需要资产的应用程序来说都是重要的。有关App Slicing的简介,请观看App Thinning WWDC会话。
资产目录对每种资产类型都具有可配置的压缩级别。特别是,使用宽彩色图像或使用Metal的纹理的应用程序应考虑ASTC压缩选项。有关这些压缩选项的更多信息,请观看WWDC会话使用宽色。
资产目录还提供了通过可选的端盖定义图像的可调整大小的中心区域的能力,从而缩小了图像的整体尺寸。
尽可能使用8位图像
使用8位PNG而不是32位PNG可以将您的图像大小减少4倍,因此可以随时使用它们。但是,8位图像只能有256种不同的颜色,照片或其他详细的彩色图像可能不适合8位格式。灰度图像是8位图像的完美候选者,具有一小组颜色的图像可以以8位格式正常工作。
对可能的图像使用压缩
对于32位图像,使用Adobe Photoshop的“保存为Web”功能可以大大减少JPEG和PNG图像的大小。默认情况下,.png不在资产目录中的图像将被压缩pngcrush当应用程序构建时,会自动通过Xcode。
压缩音频
有关有效处理音频的信息,请参阅游戏WWDC会议的音频开发。一般来说,您应该使用AAC或MP3压缩音频,并尝试降低比特率。通常,44.1khz的样本是过度杀伤的,较低比特率的剪辑在质量上不会有明显的下降。
分析你的架构
以下优化提示可能需要您更改应用程序的体系结构才能实现提示。
采用按需资源
分析您的应用程序使用的所有资产,并确定哪些资源不经常使用或仅由某些用户使用,并将这些资源分组到随需应急资源提供的资产包中。有关详细信息,请参阅“On-Demand资源指南”。
采用背景下载
应用程序可以从Web服务下载应用程序包中的资源,而应将这些资源移动到Web服务,并使用NSURLSession提供的后台进行下载。
网友评论