App Thinning
三个组成部分: App Slicing、 Bitcode和OnDemand Resources
App Slicing(应用切片):
切片是为不同的目标设备创建和交付应用程序包变体的过程。从iOS9.0
开始, 你跟往常一样往iTunes上
提交ipa
文件。 App Store
将根据您的应用支持的设备来创建和提供不同的变体。图片资源根据其分辨率和设备系列进行切片。GPU
资源根据设备功能进行切片。
用户在支持的设备上安装应用程序,应用商店会下载基于用户设备的应用程序变体。
On Demand Resources(随需应变资源):
按需资资源是一种资源,例如图像和声音,您可以使用标记关键字和组内请求。商店托管Apple服务器上的资源并为您管理下载,按需资源可实现更快的下载速度和更小的应用程序大小,从而改善首次发布体验。例如游戏应用可以将资源划分为游戏级别,并且仅当应用预期用户将移动到该级别时才请求下一级资源。同样只有当用户购买相应的应用购买时,应用才能请求应用内购买资源。
当不再需要资源并且磁盘空间不足时,操作系统会清除按需资源。如果您导出应用程序以在商店外进行测试或者分发,则必须自己托管按需资源。请注意不支持可执行的按需资源。
对于用户而言,按需资源在后台透明地工作,在用户浏览应用程序功能时根据需要提供资源。
如何设置On-Demand Resource
请参考:https://www.jianshu.com/p/bacedd8a3ad8
Bitcode(位码):
Bitcode
通过消除针对不同架构的优化,以及只下载相关优化,从而使下载变得更小。
位码是编译程序的中间表示形式。你上传到iTunes Connect
中包含位码的应用程序将被编译并链接到商店。包括位码将允许苹果在未来重新优化你的应用程序二进制而不需要提交一个新的应用程序版本到App Store
。
Xcode
默认启用Bitcode
, 但有时集成三方SDK
时,文档上要求关闭Bitcode
。因此,是否开启该属性也要灵活决定。
综上可见, 苹果官方对于应用瘦身的机制已然相当完善, 开发者养成良好的编程习惯至关重要。
其他瘦身方式
- 组件化,非组件化开发的项目,冗余庞杂在所难免
- 删除废弃代码(废弃功能、界面等)
-
Use Asset Catalog
图片资源管理(该管理方式会使用App Slicing
) - 无损压缩图片,删除废弃图片
ImageOptim是一款优秀的无损图片压缩工具,它通过优化压缩参数,移除无用的文件元数据和不必要的颜色配置来实现图片的无损压缩。
但发现实际生产的安装包体积没有变小,因为Xcode
默认开启了Compress PNG Files
,它并不是压缩图片的大小,而是将图片转换成iPhone
能更方便处理的格式,加快处理速度,所以会增加图片的大小。把COMPRESS_PNG_FILES
和STRIP_PNG_TEXT
设置成了NO
就能让项目中的PNG
保持不变,达到压缩图片的效果。
COMPRESS_PNG_FILES
的作用可以参考:https://www.jianshu.com/p/811e9e90aeeb
注意:工程目录下存在PNG
图片才会出现COMPRESS_PNG_FILES
和STRIP_PNG_TEXT
,不是在Assets.xcassets
目录下存在。
参考:
https://www.jianshu.com/p/18c3adbe7a57
https://www.jianshu.com/p/82db0f9458ee
网友评论