一、常规瘦身方案
1、压缩资源
压缩项目中资源包括图片、字符串、音视频等资源。
使用Assets
管理图片资料,其内部实现了splicing切片技术,并且会压缩图片
图片压缩工具:tinypng或者ImageOptim
- 帧动画图片可替换为lotties、APNG
- 小图或表情图可替换为iconFont
- 大图可替换为svg、webp
2、删除无用/重复资源
- 图片用2x和3x图就可以,不要用1x图
- 可以用LSUnusedResources搜索出未使用的图片
注意:该软件搜索出来的图片有可能项目中还在用,删除之前需要在工程中先搜索下图片是否有使用再确认是否可以删除。
3、删除无用代码
- 删除无用类:可以用WBBladesForMac来分析,注意 通过字符串(路由)调用的类也会检测为无用类。
- 删除无用库
- 删除已下架业务
二、非常规瘦身方案
1、Strip :去除不必要的符号信息
- Strip Linked Product 和 Strip Swift Symbols 设置为 YES,Deployment Postprocessing 设置为 NO,发布代码的时候也需要勾选 Strip Swift Symbols。
- Strip Debug Symbols During Copy 和 Symbols Hidden by Default 在release下设为YES
- Dead Code Stripping 设置为 YES
- 对于动态库,可用
strip -x [动态库路径]
去除不必要的符号信息- 动态库strip之后需要再次对ipa重签名
2、Make Strings Read-Only设为YES
3、Link-Time Optimization(LTO)release下设为 Incremental。
WWDC2016介绍编译时会移除没有被调用的方法和代码,优化程序运行效率
===============下面几个一般不用===============
4、开启BitCode:需要所有使用的第三方库支持
5、去除异常支持:不能使用@try @catch
Enable C++ Exceptions和Enable Objective-C Exceptions设为NO,Other C Flags添加-fno-exceptions
6、不生成debug symbols:不能生成dSYM,但是效果非常显著
Generate debug symbols选项 release 设置为NO
7、移除不必要的指令集:如armv6 armv7,但该设置已不需要
Xcode现在将AppStore的ipa的链接 推迟到上传包之后,也就是说:ipa提交给苹果服务器之后,苹果服务器会链接生成所有指令集的最终ipa,再根据splicing技术给不同机型分配不同指令集的ipa。
- 所以开发者直接设置支持所有指令集即可
三、脑图借鉴
四、参考文档:
iOS 安装包瘦身 (上篇)
iOS 安装包瘦身(下篇)
https://github.com/wuba/WBBlades
京东商城iOS瘦身
微信iOS瘦身