编译器优化级别设置
Build Settings->Optimization Level有几个编译优化选项,release版应该选择Fastest, Smalllest,这个选项会开启那些不增加代码大小的全部优化,并让可执行文件尽可能小。
去除不必要的调试符号信息
-
Generate Debug Symbols:DEBUG和RELEASE下均设为YES(和Xcode默认一致);
-
Debug Information Level:DEBUG和RELEASE下均设为Compiler default(和Xcode默认一致);
-
Deployment Postprocessing:DEBUG下设为NO,RELEASE下设为YES,这样RELEASE模式下就可以去除符号缩减app的大小;
-
Strip Linked Product:DEBUG下设为NO,RELEASE下设为YES,用于RELEASE模式下缩减app的大小;
-
Strip Style:DEBUG和RELEASE下均设为All Symbols(和Xcode默认一致);
-
Strip Debug Symbols During Copy:DEBUG下设为NO,RELEASE下设为YES;
-
Debug Information Format:DEBUG下设为DWARF,RELEASE下设为DWARF with dSYM File,dSYM文件需要用于符号化crash log(和Xcode默认一致);
-
Generate DebugSymbols:DEBUG下设为NO,RELEASE下设为YES,用于RELEASE模式下缩减app的大小。
注意:
- 当Generate DebugSymbols设置为YES时编译产生的.o文件会大一些,当然最终生成的可执行文件也大一些。
- 当Generate Debug Symbols设置为NO的时候,在Xcode中设置的断点不会中断。但是在程序中打印[NSThread callStackSymbols],依然可以看到类名和方法名
无用图片资源删除
随着版本迭代过程中存在的图片资源可以借助三方工具来解决: LSUnusedResources
直接打开运行,点击Browse…选择工程目录,再点击Search
注意:这里所说没有用到的图片不是真的没有用到,因为这个工具他认图片使用的方式是通过imageName:@"xxx"这个方法来识别的,为了避免误删,这个时候就把图片名字复制到xcode里面搜索一下。
图片压缩
利用三方工具ImageOptim、小熊猫tinypng
ImageOptim Mac版是一款非常简单的图片大小优化工具。只要拖动图片到软件界面就可以自动把图片的大小进行优化。ImageOptimMac版对于开发人员和设计人员一定还有用处,如文件的EXIF标签和颜色配置文件等,达到优化减小占用磁盘空间。
图片文件中往往包含一些注释、颜色 Profile 等多余信息,移除后图像质量不变,体积更小载入更快。ImageOptim 以此方式压缩图片,先分析图片,找到最优压缩参数,去除无关信息减小体积,实行无损压缩。
Tinypng压缩的图片肉眼感官是很难察觉到显著的画质降低,能够对png和jpg格式的图片进行压缩,压缩后的图片质量也是接近无损的,但也并不是完全无损的。它的原理是将PNG24位真彩色图片 压缩成 PNG8位索引图片,从而做到基本不损失画质和观感。
三方静态库瘦身
项目中多少都会引入一些第三方静态库,比如项目中引入了第三方分享库,通过lipo工具可以查看支持的指令集:
lipo -info xxx.a
Architectures in the fat file: xxx.a are: armv7 armv7s i386 x86_64 arm64
i386,x86_64,模拟器的指令集,去掉之后插件包的大小由原来的14.3M变成了5.9M,armv7可以兼容armv7s,armv7s也可以删了,只保留armv7和arm64
lipo xxx.a -thin armv7 -output xxx-armv7.a
lipo xxx.a -thin arm64 -output xxx-arm64.a
lipo create xxx-armv7.a xxx-arm64.a -output xxx-device.a
代码层面优化
主要包括删除不用的类,不用的函数,重复的代码等。