iOS项目瘦身,删除无用图片,批量压缩图片

背景:

移动端关于瘦身,合理处理资源应该是风险最小,见效最快的手段了。
项目中会用到很多的图片资源,合理的压缩<压缩但不失真>和删除无用的图片在一定程度上可以优化我们的包大小

操作步骤:

操作步骤简介
1、查找出项目中没有使用到的图片资源,进行确认然后删除
2、确认项目中的图片存放地,并批量压缩项目中的图片

一、查找出项目中没有使用到的图片资源,进行确认然后删除
  • 1.1、查找出项目中没有使用到的图片资源
    网上也有些工具,但是功能不太好用,只能查找源文件名称在项目中有没有被用到,不能查找Assets.xcassets中的资源有没有被用到,查找不准确
    为了方便操作,搞了一个Python脚本进行这项工作

FindUnUseResource.py脚本地址
感兴趣也可查看 iOS 查找项目中无用资源脚本原理

python3 FindUnUseResource.py -f .png,.jpg,.jpeg,.mp3,.m4a -p  /Users/a58/Desktop/XXXXPath -e .bundle,Assets.xcassets,Pods

参数说明:
-f 查找的资源类型,多个用逗号隔开
-p 查找的项目路径
-e 排除哪些路径,多个用逗号隔开

image.png

主要是筛选的主项目中<不包含bundle>,和Assets.xcassets中的图片资源有没有在项目中使用。
脚本的扫描结果显示的不包含Assets.xcassets,说的是不包含Assets.xcassets中图片的源文件名称

image.png

  • 1.2、将查找出来的结果,挨个在项目中查询,然后确认删除
    为啥不直接删除呢?因为有一些图片名称可能是loading_1.png、loading_2.png,在项目中用for循环把名称拼接起来使用,所以还得根据开发者的实际使用情况来确认。

  • 1.3、删除Assets.xcassets中没有使用到的单倍图
    我们现在应该不支持单倍屏幕的机器了

    iOS项目瘦身,删除无用图片,批量压缩图片_第1张图片
    image.png

    iOS项目瘦身,删除无用图片,批量压缩图片_第2张图片
    image.png


二、确认项目中的图片存放地,并批量压缩项目中的图片

图片的存放地一般是.bundleAssets.xcassets主项目直接拖进去的

image.png

1、批量压缩Assets.xcassets
使用脚本CompressImages.py进行检查压缩,该脚本会在目标文件生成和源文件一模一样的目录,只压缩.jpg.png文件,其他的文件只是拷贝回去
脚本地址
CompressImages.py脚本使用需要满足一些环境条件,具体参考参考批量压缩图片

python3 CompressImages.py -k jSrjT94QC4f4Sdqn0JFTrclj2tbXxWh3 -f /Users/a58/Desktop/projectPath/Assets.xcassets -t /Users/a58/Desktop/Tools/FinalFile

参数说明:
-k tinify平台申请的key
-f 要压缩的文件路径<对于iOS项目来说,就可以直接把Assets.xcassets扔进去>
-t 压缩文件存储路径

iOS项目瘦身,删除无用图片,批量压缩图片_第3张图片
image.png

2、bundle中图片资源处理
bundle一般情况下是配合一些私有库使用的,极大可能是配合.a或者framework使用,所以,我们只把这部分的图片进行压缩,再放回去就好,不能随便删除

2.1、检测项目中所有的bundle文件
使用FindAllAPartFiles.py脚本进行检测,该脚本可以查找一个路径下除了哪些文件下面所有的某一类文件和文件夹
有点绕?? 看疗效。。。。

python3 FindAllAPartFiles.py -f .bundle -p /Users/a58/Desktop/Tools/TestFile  -e Pods

参数说明
-f 要查找的文件或者文件夹类型,多个用逗号隔开 -f .bundle,.png,.jpg
-p 要查找的文件目录
-e 不在什么文件下面找,这里我们不去找Pods中的bundle,如果在Pods中有自己写的bundle,那么可以不用写Pods,但是必须得写一个字符串当做参数

iOS项目瘦身,删除无用图片,批量压缩图片_第4张图片
项目中使用的.bundle.png

私有Pods中的资源最好不要使用bundle的形式进行图片管理,可以使用Images.xcassets
相关的使用方法和区别参考:
https://www.jianshu.com/p/5cb284934be2

image.png

因为只有把图片资源加到 Images.xcassets才会被苹果优化
iOS项目瘦身,删除无用图片,批量压缩图片_第5张图片
image.png

2.2、压缩主项目bundle中的图片资源
这个地方为啥要用手动去一个个的压缩bundle呢?
因为不是所有的bundle中都有图片资源的,而且一些不想压缩或者拿不准的bundle可以选择不压缩,一般一个项目中bundle也没几个
如果bundle中的图片多,使用脚本CompressImages.py进行检查压缩
脚本地址
CompressImages.py脚本使用需要满足一些环境条件,具体参考参考批量压缩图片

python3 CompressImages.py -k jSrjT94QC4f4Sdqn0JFTrclj2tbXxWh3 -f /Users/a58/Desktop/Tools/TestFile/HUDSource.bundle -t /Users/a58/Desktop/Tools/FinalFile

iOS项目瘦身,删除无用图片,批量压缩图片_第6张图片
image.png

bundle压缩完毕之后,将新文件中的内容拷贝出来替换原 bundle中内容就行

3、主项目中的图片
这些图片就是些散户了,常见的图片比如引导页,为了使用[UIImage imageWithContentsOfFile:"imagePath"]加载图片,可能放在主项目中等

3.1、查找主项目中的这些散户
FindAllAPartFiles.py

python3 FindAllAPartFiles.py -f .png,.jpg,.jpeg -p /Users/a58/Desktop/projectPath -e .bundle,Assets.xcassets

参数说明
-f 查找文件类型,这里查找
-p 需要查找项目路径
-e 排除搜索的文件夹名称

iOS项目瘦身,删除无用图片,批量压缩图片_第7张图片
image.png

感觉图片路径找到图片,对于比较分散的图片,直接用网页在线压缩就可以了https://tinypng.com/

压缩后的结果查看

压缩完毕之后一打包,可能显示压缩效果明显,但是打出来的包其实是包含多个架构的包,不能真实反馈将来上线到AppStore后的大小
可以参考:
iOS查看将来各种机型在AppStore中下载的包大小
只需要把压缩后的包扔到itunes上就可以查看

坑点:

1、项目中的jpg图片最好转化成png图片,因为在ipa包中发现,苹果自动把jpg转化成了png,并且体积变大了
2、pod私有库中的图片资源最好加到Images.xcassets,因为只有把图片资源加到Images.xcassets才会被苹果优化。有的团队是这么做的,将图片放在bundle中,但是只放两倍图。这样估计还是会有差别,待验证。
3、图片不要过度压缩,苹果有自己的图片处理策略,如果压缩过度,打出的包可能感觉小了,但是放在应用商店下载可能会发现图片反而比之前大,有种图片压缩回滚的表现,待验证。
4、对比最终压缩效果,不要只看ADHOC下打出来的ipa大小。要看将来在appStore的ipa大小iOS查看将来各种机型在AppStore中下载的包大小,这样的参考才是有意义的

扩展:

iOS 脚本查看项目中重复文件
可以进一步检测项目中资源,对于重复的资源可以优化一下

在项目中查看某一类文件脚本
可以查看项目某一类的文件,并且大小排序排好,比如查询所有png的文件,可以将较大的文件进行处理,或者UI再切图之类的

你可能感兴趣的:(iOS项目瘦身,删除无用图片,批量压缩图片)