iOS安装包瘦身

Posted 孤独的菜鸟----

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS安装包瘦身相关的知识,希望对你有一定的参考价值。

摘自头条
摘自微信
ipa介绍
Xcode中和symbols有关的几个设置](https://www.jianshu.com/p/11710e7ab661)

前言

一、资源文件瘦身

资源文件优化思路较多,风险也相对较小。由于app内有优化空间的资源主要为图片,故本文中“资源”与“图片”可认为是等价词汇。

  • 排查和清除冗余图片
  • 删除重复的资源
  • 图片压缩
  • 将图片放置到云端

1.1 排查和清除冗余图片

整个排查和清除冗余图片可以分为三个方向:

(1)常规的冗余图片清理

随着业务迭代,有不少图片成为了永远也不会使用到的僵尸图片。这些图片往往占据着较大空间,对于冗余图片的排查和清理是包大小优化中便捷而有效的一项优化内容。
我们主要使用一个开源的Mac app,LSUnusedResources,来进行冗余图片的排查: https://github.com/tinymind/LSUnusedResources
或者
https://github.com/netyouli/WHC_ScanUnreferenceImageTool

1.2 删除重复的资源

重复资源(主要指图片)不是指命名重复而是内容相同。
fdupes 是Linux下的一个工具,可以在指定的目录及子目录中查找重复的文件。fdupes通过对比文件的MD5签名,以及逐字节比较文件来识别重复内容。

Mac 安装

 // 安装fpupes
 brew install fdupes
 // 查找重复图片
 fdupes -Sr Path >/Path/name.text 

fdupes 简单介绍链接
【总结】

  • 同一张图片(文件名也相同)多张存在【删除重复】
  • 同一张图片(文件名相同,bundle不同)多张存在【有选择删除重复】
  • 不同文件名的图片它们的尺寸和内容都完全相同【删除重复,修改代码】
  • 2X和3X图片尺寸和内容一样,都是2X的尺寸 【删除3X图片】

1.3 图片压缩

ImageOptim是一款优秀的无损图片压缩工具,它通过优化压缩参数,移除无用的文件元数据和不必要的颜色配置来实现图片的无损压缩。

// 显示图片大小
// S 大小排序 l 详细信息 R 递归 h 大小单位为K
ls -SlRh

【总结】

  • 美术给资源前要对图片压缩
  • 发布前用工具对图片压缩一次

二、可执行文件瘦身

比如 在项目里新建一个类,给它添加几个方法,但不要在任何地方import它,build完项目后观察linkmap,你会发现这个类还是被编译进可执行文件了。这是因为object-c的runtime 性质,按C++的经验,没有被使用到的类和方法编译器都会优化掉,不会编进最终的可执行文件,但object-c不一样,因为object-c的动态特性,它可以通过类和方法名反射获得这个类和方法进行调用,所以就算在代码里某个类没被使用到,编译器也没法保证这个类不会在运行时通过反射去调用,所以只要是在项目里的文件,无论是否又被使用到都会被编译进可执行文件。又比如我们的项目里会引入很多第三方静态库,如果能知道这些第三方库在可执行文件里占用的大小,就可以评估是否值得去找替代方案去掉这个第三方库。

LinkMap

LinkMap文件是Xcode产生可执行文件的同时生成的链接信息,用来描述可执行文件的构造成分,包括代码段(__TEXT)和数据段(__DATA)的分布情况。只要设置Project->Build Settings->Write Link Map File为YES,build完后就可以在设置的路径看到LinkMap文件了。(只设置Debug模式就可以)
Path to link Map File 设置输出文件地址,默认在DriverData中

我们可以用脚本从linkmap中统计出每个.o目标文件占用的体积和每个.a静态库占用的体积 【脚本链接
node linkmap.js XesApp-LinkMap-normal-arm64.txt -hl >文件.text

注意:
此时最好使用真机进行编译,不然可能无法找到我们想要的文件。

AppCode

利用AppCode检测未使用的代码:菜单栏 -> Code -> Inspect Code
软件很强大,对电脑的性能要求较高

无用类检测

https://github.com/CatchZeng/CATClearProjectTool
软件容易崩溃,检测到的文件谨慎删除

三、编译器优化

设置为YES
Strip Linked Product
Make Strings Read-Only

  • 打包策略调整,编译器优化级别。Xcode中,Build Settings->Optimization Level,release版应该选择Fastest, Smalllest,这个选项会开启那些不增加代码大小的全部优化,并让可执行文件尽可能小。

  • 去除符号信息。Xcode中,Strip Debug Symbols During Copy 和 Symbols Hidden by Default 在release版本应该设为yes,可以去除不必要的调试符号。

以上是关于iOS安装包瘦身的主要内容,如果未能解决你的问题,请参考以下文章

iOS安装包瘦身

iOS 优化 - 瘦身

谈谈 iOS 包瘦身方案

iOS App 瘦身方案

iOS可执行文件瘦身方法

[转]基于clang插件的一种iOS包大小瘦身方案