iOS安装包瘦身指南

先看下Apple对安装包大小的限制:html

资源优化

1.删除无用资源

解压ipa文件,检查是否有无用资源存在。ios

如今应该没有APP须要支持iPhone4如下的机型了,因此1X的图片能够所有删掉。3X的图片是保留仍是删掉看具体状况。git

重复的图片分两种,一种是名字同样的图片,若是你使用.xcassets来管理图片,那么Xcode的左边栏会有警告提示图片名字重复,直接按提示一一处理便可。另外一种是名字不同可是文件同样的图片,咱们使用了一个Python脚本(@甘超江 大神出品)来扫描,每次编译的时候执行该脚本,若是有扫描命中则会让Xcode编译失败,此时须要人工去处理。须要注意的一点就是使用.xcassets来管理图片的时候回存在一个映射关系,经过imageNamed:方法使用的名字和图片的真实名字有可能不同,脚本扫描的时候须要特别处理下。github

未使用的图片能够经过LSUnusedResources扫描出来,不过要注意的是可能会有误伤,该工具是全匹配,一些拼接名字来使用的图片要注意手动剔除。笔者就由于误删图片被惩罚过o(╯□╰)oshell

一些音频、视频和多余的plist文件以及readme文件什么的目测只能肉眼扫描了,咱们没用到这些资源暂时没这个问题。微信

2.资源压缩

首先是图片压缩,ImageOptim工具能够实现无损压缩。app

另外关于图片,建议使用Apple推荐的.xcassets来管理,它会把里边的全部png格式的图片压缩成一个Assets.car文件,压缩比率比其余方式管理图片要高。不过测试发现jpg图片不会在Assets.car文件里。函数

另若是你有用到音频或视频资源,也能够考虑压缩。工具

3.H5页面远端化

若是你的H5有本地页面和资源,能够考虑所有远端化。本地资源主要是一些js、html文件和图片。测试

编译选项优化

这个最有用的一个选项是Deployment PostprocessingStrip Linked Product,两个须要都设置为YES才有用。

原理是打开这两个选项后构建ipa会去除掉symbol符号,就是那些类名啊函数名啊啥的。这样子的影响就是运行时你无法进行线程回溯,符号都没了回溯了也是乱码。可是不会影响正常的崩溃日志生成和解析。在本机专门测试过,若是使用符号表来解析崩溃日志,则彻底不受影响。

其余编译选项见下方的思惟导图。

可执行文件优化

1.未使用类的扫描

原理直接参考微信的这篇文章,主要是使用otool这个工具去取出可执行文件里的一些编译信息,能够拿到该可执行文件里全部的类和函数列表,以及使用过的类,二者相减就获得一个初步的未使用的类的列表,不过可能会有误伤,须要一一确认。

2.功能重复的第三方库

好比model层的mantle和realm,JsonKit和SBJson等功能相似的只须要一个就好,或者直接用系统自带的Json序列化工具。能够肉眼扫描也能够本身写脚本去扫描。若是使用了Cocoapods来管理第三方库的话,查询起来会更方便一些。

3.空函数及默认实现的函数均可以删掉。

有些函数只是实现了一个[super function],例如didReciveMemoryWarning,或者viewDidAppear若是没作额外的处理其实都是能够删除的。

4.统计项目中各工程在可执行文件的大小占比

能够在每一个版本开发结束时统计一下各工程所占可执行文件的大小,这样能够看到size的趋势。

我写了个脚本能够用来统计每一个工程静态库的大小和framework的大小,见这里

效果图以下:

不过要注意的是,此处的工程静态库指的是这个工程的总体产出,而不是引入的某个第三方的静态库:

其余

重构以免重复代码,以及未使用函数的扫描和删除都对减小ipa size有帮助,不过这二者不像上面提到的那些方法效果好,并且难度更大一些。尤为是重构,若是一开始设计的很差,可能一些重复的代码处处都是,好比屏幕宽高的宏,计算给定字符串高度的代码,给定宽高和颜色画一张图片等等这些代码都极可能被复制的不少份。

引入第三方库要慎重评估是否值得,有时候为了一个功能引入了一个很大的第三库,形成ipa size的显著增长,可是其实你只用到了其中一小部分功能,这个时候能够考虑本身实现其功能,而不是引入该库。

咱们在实践中发现,技术上对于减小ipa大小最有用的主要是删掉未使用图片、去掉一些重复功能的第三方库以及编译选项去掉symbol符号。从产品角度砍掉部分鸡肋的功能效果却更明显,版本在迭代的过程当中会有不少功能的尝试,功能收敛对ipa size的减小也颇有帮助。

最后附上思惟导图一张

参考连接和拓展阅读

1.iOS APP可执行文件的组成

2.iOS 可执行文件瘦身方法

3.减小iOS应用程序的大小

4.你的iOS安装包真的“脱光”了么

 

 

 

原文:http://www.zoomfeng.com/blog/ipa-size-thin.html

相关文章
相关标签/搜索