APP包瘦身

·  阅读 1993

前言

公司的项目,有不少类14年的代码也有,可谓见证了该项目的持续辉煌,结果一搜,有些类没有被调用,看来当年的开发者不忍心删掉,就持续到现在了。我相信不少项目都会出现这种情况,要么先注释掉,要么先放着,又担心删掉,到时候需求回来,去git上还要慢慢找回来。但有一些隔得太长久了,就是时候删掉了。

无用到的照片

LSUnusedResources

一个 Mac 应用程序,用于在 Xcode 项目中查找未使用的图像和资源。

在github有3.7k个星。地址我先贴出来:github.com/tinymind/LS…

用法

20211213144826.jpg

打开LSUnusedResources,在 Project Path 填入我们要搜索的项目,选择Search。

20211213145214.jpg

我们可以看到搜索结果,居然有314张没有使用,大小占3400KB左右,是真实的吗?我们优化一下。

20211213150657.jpg

其实这里就选择了 Ignore similar name,匹配使用资源的正则表达式,比如@“image_%d”会忽略掉后缀的图片。

别以为这样就保证全部都是无用的图片,但我们基本就可以围绕着这些去删掉图片,优化2M大小还是可以的。

FengNiao

FengNiao 是一个简单的命令行实用程序,用于从您的 Xcode 项目中删除未使用的图像资源文件。

在github上有2.8k个星,还是先贴地址:github.com/onevcat/Fen…

这里怎么用呢,可以打开上面链接,里面有说到怎么用。这里我贴一位大佬写的,可以作为参考。

juejin.cn/post/684490…

无用到的代码

LinkMap

这个工具是专为用来分析项目的LinkMap文件,得出每个类或者库所占用的空间大小(代码段+数据段),方便开发者快速定位需要优化的类或静态库。

在GitHub上有1.6k的星,直接贴路径:github.com/huanxsd/Lin…

我们下载后,运行就可以看到下面的界面了。

20211213152445.jpg

步骤操作

  1. 开启 write link Map File

20211213152727.jpg

  1. 打开~/Library/Developer/Xcode/DerivedData/XXX-xxxxxxxxxxxxx/Build/Intermediates/XXX.build/Debug-iphoneos/XXX.build/XXX-LinkMap-normal-arm64.txt。

可以看到LinkMap文件有3部分:

Object Files,里面包含代码工程的所有文件。

20211213155330.jpg

Sections,描述了代码段在生成的 Mach-O 里的偏移位置和大小。

20211213155627.jpg

Symbols,会列出每个方法、类、block,以及它们的大小。

20211213155817.jpg

3.使用LinkMap工具打开刚刚的txt文件,点击输出。

20211213160300.jpg

全部的库大小和库名称我们都可以看到。哪些库占用大的,我们就可以看下是否存在优化的空间。

4.结合mach-o使用

我们打开XXX.app包,显示包内容,里面有很多资源文件,我们也可以在那里看看有没有优化空间,使用MachOView打开app可执行文件,就可以看到很多编译信息。

具体使用可以查看这篇文章:Mach-O 探究

重要的有3个:

__objc_classrefs记录了哪些class被引用了,这里记录了所有被实例化的class,有些类虽然在包里,但是我们并未使用,因此这里不会有。

__objc_selrefs记录哪些SEL对应的字符串被引用了,有系统方法,也有自定义方法。

__objc_superrefs记录了调用super方法的类。

20211213165940.jpg

appCode

打开appCode,选择code -> inspect Code,进行静态分析。

20211213170136.jpg

等编译完成后,我们就可以看到以下信息

20211214171859.jpg

我们要看的是无用的代码,Unused Code

  • Unused class:无用的类;

  • Unused global declaration:无用的全局声明;

  • Unused import statement:无用类的引入声明;

  • Unused instance variable:无用的实例变量;

  • Unused local variable:无用的局部变量;

  • Unused macro:无用的宏;

  • Unused method:无用的方法;

  • Unused parameter:无用的参数;

  • Unused property:无用的属性;

  • Unused value:无用的值。

这个就直接明牌了,哪些没有用到的都显示出来了。当然我们还是需要在工程内小心核对,以免误删。

不说了,要赶时间去优化代码了。

分类:
iOS
标签:
分类:
iOS
标签:
收藏成功!
已添加到「」, 点击更改