
前言
前段时间,本鑫看了一篇美团的文章:《一款可以让大型iOS工程编译速度提升50%的工具》,一看标题就觉得惊讶,为什么呢?因为它能让编译速度提示50%且不是通过组件二进制化实现,我们日常的提升编译速度就是将组件编译成二进制文件导入项目。本着不清楚的就去了解的原则,就来看看怎么实现的。
探索
编译耗时原因
在项目中我们会引入头文件,例如下图:我们在ViewController中引入了Person的头文件

在我们引入头文件的时候,引入的是头文件的名称Person,那么Xcode是怎么找到这个Person文件实际位置的呢?这就要提到项目中配置的header search path

Xcode在编译的时候会读取到header search path的地址,并且拼接上我们引入的头文件名。
也就意味着我们导入的头文件分成两个部分:
- 1.
前半部分:头文件所在的文件目录 - 2.
后半部分:头文件名称
这也就是为什么我们设置header search path的时候,只需要设置头文件所在目录就可以了。
问题:因为我们项目里有很多文件,那么我们就会在header search path设置很多目录,但是对于找到我们上面引入一个头文件Person,他需要查找遍历所有的文件目录,来找到这个类。这个过程随着项目的类越来越多,查找的时间就会越来越长,就会越来越耗时。比如我们项目组件多达上百个,类有上万个,那么这个过程所产生的的耗时就比较明显了。
解决办法
上面我们知道项目编译耗时的原因,那么怎么解决这个问题呢?美团的文章给出答案,就是使用hmap
hmap
hmap是什么呢?美团文章说了它就是Header Map的实体,类似于一个Key-Value的形式,Key值是头文件的名称,Value是头文件的实际物理路径,其实这个东西一直都存在,只不过我们没注意到罢了。
- 大家想一下,
第一次运行项目或者编译的时候,会发现很慢,但是一旦运行或者编译成功后,再次编译或者运行就会很快,想过为什么没? - 其实
第一次编译后,Xcode就会帮我们生成一些.hmap文件,再次编译时候会直接使用这些.hmap文件快速找到对应的头文件,所以编译速度就会快很多

我们看到
生成了很多.hmap文件,Xcode是按类别生成的,箭头指的就是我们主项目工程的.hmap文件,如果我们对Xcode进行清理,那么这些.hmap文件也会被清掉,然后我们就会发现,编译又慢了起来。
通过上面的讲解我们知道.hmap其实就是个容器,它内部肯定包含了Person的文件目录,那么就

本文从美团的一篇文章出发,探讨了如何通过.hmap文件提高大型iOS工程的编译速度。文章详细分析了编译耗时的原因,解释了.hmap文件的作用和结构,并介绍了如何生成和读取.hmap文件,旨在帮助开发者优化项目构建过程。
最低0.47元/天 解锁文章
470





