8、包大小:如何从资源和代码层面实现全方位瘦身?

App Store规定了安装包大小超过150MB不能使用OTA环境下载。(现在好像放大条件了,好像是200MB还是多少来着了~~)
如果你的 App 要再兼容 iOS7 和 iOS8 的话,苹果官方还规定主二进制 text 段的大小不能超过 60MB。如果没有达到这个标准,你甚至都没法提交 App Store。

官方App Thinning; (Assets)

使用 App Thinning 后,用户下载时就只会下载一个适合自己设备的芯片指令集架构文件。
App Thinning 有三种方式,包括:App Slicing、Bitcode、On-Demand Resources。
App Slicing,会在你向 iTunes Connect 上传 App 后,对 App 做切割,创建不同的变体,这样就可以适用到不同的设备。
On-Demand Resources,主要是为游戏多关卡场景服务的。它会根据用户的关卡进度下载随后几个关卡的资源,并且已经过关的资源也会被删掉,这样就可以减少初装 App 的包大小。
Bitcode ,是针对特定设备进行包大小优化,优化不明显。

无用图片资源;

删除无用图片和图片资源压缩。

删除无用图片的过程,可以概括为下面这 6 大步。

通过 find 命令获取 App 安装包中的所有资源文件,比如 find /Users/daiming/Project/ -name。
设置用到的资源的类型,比如 jpg、gif、png、webp。
使用正则匹配在源码中找出使用到的资源名,比如 pattern = @"@"(.+?)""。
使用 find 命令找到的所有资源文件,再去掉代码中使用到的资源文件,剩下的就是无用资源了。
对于按照规则设置的资源名,我们需要在匹配使用资源的正则表达式里添加相应的规则,比如 @“image_%d”。
确认无用资源后,就可以对这些无用资源执行删除操作了。这个删除操作,你可以使用 NSFileManger 系统类提供的功能来完成。

image.png

开源工具:LSUnusedResources

目前比较好的压缩方案是,将图片转成 WebP。WebP 是 Google 公司的一个开源项目。
首先,我们一起看看选择 WebP 的理由:
WebP 压缩率高,而且肉眼看不出差异,同时支持有损和无损两种压缩模式。比如,将 Gif 图转为 Animated WebP ,有损压缩模式下可减少 64% 大小,无损压缩模式下可减少 19% 大小。
WebP 支持 Alpha 透明和 24-bit 颜色数,不会像 PNG8 那样因为色彩不够而出现毛边。

图片转换为WebP:

cwebp:
iSparta:png转WebP。

建议:如果图片大小超过了 100KB,你可以考虑使用 WebP;而小于 100KB 时,你可以使用网页工具 TinyPng或者 GUI 工具ImageOptim进行图片压缩。这两个工具的压缩率没有 WebP 那么高,不会改变图片压缩方式,所以解析时对性能损耗也不会增加。

代码瘦身:

MachOView开源工具;
AppCode找出无用代码;

PS:上次项目打包莫名其妙突然包大了几十M,还以为是更新了Xcode问题,最后发现是新添加的图片资源问题,压缩图片使用完美了~~~

你可能感兴趣的:(8、包大小:如何从资源和代码层面实现全方位瘦身?)