iOS App优化1---减少包体积

  • 如今的App相比几年前包的大小明显发生了变化,需求的不断变更迭代,甚至有些产品为了‘迎合’市场,一个基本页面一年到头改得数不胜数,让人的感觉像是,我是产品我说了说,你必须改,不让我怎么有存在感。好了,如果都这样发展下去,我们的App就算是顶级大神来造,总有一天也会受到App Store的限制,那个时候我们的产品就乖乖的静下来反思。App Store 规定了安装包大小超过 150M 的App 不能使用 OTA下载,你只能坐在有WiFi的地方静静的下了,这样一来,相比会流失一部分的用户。说一百道一千,万一我们的App达到这样的高潮了该肿么办勒?只有一个办法,那就‘减肥’,减少包的体积。
  • 减少包的体积,那可不是一件容易的事,特别是一些非常‘古老又年代已久’的项目,这种App是最棘手的。我们先一点一点来说,从以下几个方面。
1、最简单粗暴的就是减少一些垃圾文件,图片资源等。

项目迭代久了,其中多多少少会有一些没用的图片资源,当然了图片那么多不可能一张一张去排查,这里我们借助一个三方工具LSUnusedResources,打开这个工具,如图

0C2540F9-EC0A-4AFC-804C-DE44E7A27815.png

你可以看到上面那样,点击Browse去选择你的项目,然后搜索一下就OK了,但是你不要绝对相信一个不是自己写的工具,如果你加载图片不是通过imageWithName:这个的方式,他是无法查找的,如果你的图片名采用拼接的方式,那么他也是无法确认的,所以你要删除一张图片的时候,最好是确认一下。

2、图片压缩

美工妹妹给图的时候,叫她尽量的给png, 尽可能做出来的图不要太大,我见过很多UI,一个控件上面的小图标做出来几百KB, 我在想这是有多么不专业啊,人家几十KB,你咋给我的这么大勒。当然了有时候UI没有考虑那么多,这个时候就考验我们专业的时候了,自己压。你可以采取有损和无损看你们的要求,你也可以把图片转成WebP格式的,这个是谷歌推出来的,可以自行谷歌了解一下,它压缩率很高,比直接有损和无损强几倍。有一个腾讯开发的iSparta,可以把图片转成WebP,怎么加载WebP,SD怎么支持WebP,大家可以自行查阅。

3、删除注释代码和无用的类

我们写代码很多的逻辑是最初写好后,由于某种原因就注释在那,这一注释不要紧,最后连谁写的都忘了,留着还有啥意义,别以为后面的迭代会需要,你永远都猜不透一个产品接下来给你抛什么样的需求,因为连他们自己也不知道接下来要干嘛。所以你就大大方方的删除那些不要的注释代码,大不了再撸一遍咯。当然注释的代码只会增加预编译的速度,不会被编译到可执行文件中。
那不要的类咋办,如果项目很大很老又是接手了多手项目,那怎么去排查类文件空置着。我们也可以借助其他工具,你可以用 AppCode这个IDE。工具条Code-->Inspect Code...。是的,不要以为只有Xcode才能写OC, 这个工具可以把一些没有使用到了类、属性啥的都可以检测出来,还是那句话,不要一味地相信他人,要二次确认是否可删。

  • 这个工具不能检测运行时都干了嘛,只能做静态分析,有可能某个哥们在动态运行时替换了一个你以为没有用的类,你一删就炸了。
  • performSelector 方式调用的方法也检查不出来
  • 子类调用了父类的方法,那这个父类就被检测出来无用
  • 通过NSClassFromString等运行时方式也是无法检测准确性
    ······
    当然除了这个工具还有其他很多方式,比如可以通过LinkMap 来查找 Mach-O 文件里面的无用代码,这部分大家可以去了解。
    所以任何人和任何工具都不要绝对的相信,毕竟科学是严谨的。
4、减少三方库的使用

用三方库的时候尽量不要全部导入进来,像AFN,SD他们都由几部分组成的,如果你只是请求个网络,下载个图,可以把库里面的分类去掉,如果是Cocoapods管理那更简单,直接pod你要的那部分就行。这些功能强大的三方库拓展性是很强的,支持的功能也多,但是有大部分是我们项目不用的,所以该删就删。

以上只是简单粗略的讲讲日常开发过程的优化,更细致更专业还待大家去挖掘。