图片优化来减小App大小

前不久看到Apple文章有关减小iOS应用的大小[1],感觉对个人开发者还是很有帮助的。 由于Michael童鞋做的主要是一些给企业用户使用的App,App的大小一般不是问题,因为企业用户基本上不会OTA下载App。而 Michael 参与的唯一的不是企业级App,恰好遇到了App大小过大的问题,所以就想记录一下当时遇到的情况与大家分享。

App基本情况


App是银行给客户用的类似Square的app,iPhone版本有10M+,由于iPad版本是跟iPhone版本在一起的Universal版本,做完iPad第一个版本以后app的大小变成了50M+。当时Apple的规定是App超过50M就不能直接OTA下载了,所以客户希望能把App的大小降到50M一下。

从哪下手


把App解压以后,发现App的代码和Nib文件都不算大,真正大的是App里面的图片文件。经过分析和大家讨论,决定从两个方向入手:

  • 找出没用的图片
  • 对剩下的图片进行优化

找出没用的图片

由于App从最初的开发到Michael童鞋接手,经历了很多人的维护,能察觉到有些项目的图片其实是没有用到的。这里说的没用的图片,同时满足下面的条件,才能有助于减小App大小:

  • 图片文件出现在Xcode的工程里
  • 图片文件没有被Nib文件或者代码文件引用

规则确定了以后,Michael童鞋就写了一个shell脚本来找出这些图片:

  1. 列出项目里所有的图片文件的文件名,去除后缀和@2x
  2. 出现在项目工程里的图片,会在${Project Name}.xcodeproj/project.pbxproj文件里出现,可以遍历第一个步骤中得到的图片名称,用grep命令搜索出出现在工程的图片名称,得到筛选出来的第二个图片名称集合
  3. 遍历第二步得到的图片名称的集合,用grep命令搜索出没有出现在任何.m或和.xib文件的图片名称,得到第三个图片名称集合,也就是可以删除图片名称的集合。

具体做这一步的时候,有人建议说把项目里所有的图片名字打印出来,大家分工去项目里面查找那些图片没用到。虽然也是没有办法的办法,搜索.m文件的时候可以直接用Xcode的搜索功能,但是.xib文件就不能直接在Xcode里面直接对内容进行搜索了。 最重要的是,shell脚本可以更快更准确的完成任务,实在是开发人员的居家必备的利器啊!

优化图片

图片优化当时用的是ImageOptim[2],能够实现无损的减小图片大小,原理是删除图片里附带的有些无用的MetaData和color profiles,具体可以直接点链接进去看。印象中平均能把图片减小30%的样子。 值得注意的是,如果使用ImageOptim,需要在Xcode中需要修改一个编译设置,具体请自行去网站阅览。

成果


结果是App大小从50M+减到了30M+,算是不辱使命吧。

结论


  1. 控制导入到项目里的图片文件,及时删除不再用的图片。如果你跟Michael童鞋的情况类似,可以考虑写一个类似的脚本,来处理这样的事情。
  2. 对项目中的图片进行优化。

  1. Reducing the size of my App.

  2. ImageOptim.

0%