App瘦身

本文介绍了iOS应用瘦身的多种方法,包括官方的AppThinning(AppSlicing、Bitcode、On-DemandResources)、无用图片资源的删除、图片资源的WebP压缩以及代码瘦身。通过AppSlicing和On-DemandResources减少安装包大小,使用LSUnusedResources或cwebp工具处理无用资源和压缩图片,结合iSparta进行批量处理。对于代码瘦身,通过查找未使用的代码和方法进行删除。此外,讨论了动态库作为瘦身手段但可能影响启动时间的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方 App Thinning

App Thinning 有三种方式

        包括:App Slicing、Bitcode、On-Demand Resources。

  • App Slicing,会在你向 iTunes Connect 上传 App 后,对 App 做切割,创建不同的变体,这样就可以适用到不同的设备。
  • On-Demand Resources,主要是为游戏多关卡场景服务的。它会根据用户的关卡进度下载随后几个关卡的资源,并且已经过关的资源也会被删掉,这样就可以减少初装 App 的包大小。
  • Bitcode ,是针对特定设备进行包大小优化,优化不明显。

        同时,按照 Asset Catalog 的模板添加图片资源

        总结下来就是,App Thinning是官方提供的支持,要多了解官方文档获取最新的瘦身方案。

无用图片资源删除

        自己写工具步骤

  • 通过 find 命令获取 App 安装包中的所有资源文件,比如 find /Users/daiming/Project/ -name。
  • 设置用到的资源的类型,比如 jpg、gif、png、webp。
  • 使用正则匹配在源码中找出使用到的资源名,比如 pattern = @"@"(.+?)""。
  • 使用 find 命令找到的所有资源文件,再去掉代码中使用到的资源文件,剩下的就是无用资源了。
  • 对于按照规则设置的资源名,我们需要在匹配使用资源的正则表达式里添加相应的规则,比如 @“image_%d”。 

        也可以选择开源的工具直接使用,如 LSUnusedResources,特别是对于使用编号规则的图片来说,可以通过直接添加规则来处理。

图片资源压缩

        对于 App 来说,图片资源总会在安装包里占个大头儿。对它们最好的处理,就是在不损失图片质量的前提下尽可能地作压缩。目前比较好的压缩方案是,将图片转成 WebP。

        WebP 是 Google 公司的一个开源项目。首先,我们一起看看选择 WebP 的理由:

  • WebP 压缩率高,而且肉眼看不出差异,同时支持有损和无损两种压缩模式。比如,将 Gif 图转为 Animated WebP ,有损压缩模式下可减少 64% 大小,无损压缩模式下可减少 19% 大小。
  • WebP 支持 Alpha 透明和 24-bit 颜色数,不会像 PNG8 那样因为色彩不够而出现毛边。

使用命令行方式

        Google 公司在开源 WebP 的同时,还提供了一个图片压缩工具 cwebp来将其他图片转成 WebP。cwebp 使用起来也很简单,只要根据图片情况设置好参数就行。


cwebp [options] input_file -o output_file.webp

// 选择无损压缩模式的话,可以使用如下所示的命令
cwebp -lossless original.png -o new.webp

        图片色值在不同情况下,可以选择用 -q 参数来进行设置,在不损失图片质量情况下进行最大化压缩:

  • 小于 256 色适合无损压缩,压缩率高,参数使用 -lossless -q 100;
  • 大于 256 色使用 75% 有损压缩,参数使用 -q 75;
  • 远大于 256 色使用 75% 以下压缩率,参数 -q 50 -m 6。

        

使用工具

        除了 cwebp 工具外,你还可以选择由腾讯公司开发的iSparta。iSpart 是一个 GUI 工具,操作方便快捷,可以实现 PNG 格式转 WebP,同时提供批量处理和记录操作配置的功能。如果是其他格式的图片要转成 WebP 格式的话,需要先将其转成 PNG 格式,再转成 WebP 格式。

        不过,WebP 在 CPU 消耗和解码时间上会比 PNG 高两倍。所以,我们有时候还需要在性能和体积上做取舍。建议如果图片大小超过了 100KB,你可以考虑使用 WebP;而小于 100KB 时,你可以使用网页工具 TinyPng或者 GUI 工具ImageOptim进行图片压缩。这两个工具的压缩率没有 WebP 那么高,不会改变图片压缩方式,所以解析时对性能损耗也不会增加。

代码瘦身

        App 的安装包主要是由资源和可执行文件组成的,所以我们在掌握了对图片资源的处理方式后,需要再一起来看看对可执行文件的瘦身方法。

        可执行文件就是 Mach-O 文件,其大小是由代码量决定的。通常情况下,对可执行文件进行瘦身,就是找到并删除无用代码的过程。而查找无用代码时,我们可以按照找无用图片的思路,即:

  • 首先,找出方法和类的全集;
  • 然后,找到使用过的方法和类;
  • 接下来,取二者的差集得到无用代码;
  • 最后,由人工确认无用代码可删除后,进行删除即可。

发散思考

        除了上面提到的,还有个给app瘦身的方法是动态库,但是动态库又会消耗启动时间,所以实际情况下需要去平衡选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值