一、查看编译时间
Clean后,执行Command+B,查看编译时间为24.0seconds
而如果编译后,不Clean,继续执行编译,即使用之前的编译缓存,得到的新的编译时间为0.6seconds

二、hmap优化的结果
系统的Pods中Headers里有Public和Private目录:

使用 plugin ‘cocoapods-hmap-prebuilt’ 后
在Pods中Headers里会多出一个HMap目录,里面的文件为hamp,如下截图所示:

此时,我们重新Clean,然后编译,得到的优化后的编译时间为16.8seconds

如果编译后,不Clean,继续执行编译,得到的时间为0.5seconds,也比之前的0.6seconds短

三、hmap优化怎么使用
我们直接使用 cocoapods-hmap-prebuilt
1、cocoapods-hmap-prebuilt的使用方法
直接在你的Podfile中,添加以下一行代码就行
1 | # this is part of Podfile |
之后,你和平时一样执行pod install就行。
2、安装cocoapods-hmap-prebuilt
如果你没安装cocoapods-hmap-prebuilt,则会在执行pod install的时候,发生如下错误:

所以请先安装,安装方法如下:
1 | gem install cocoapods-hmap-prebuilt |

之后,你和平时一样执行pod install就行,执行过程中,会多出如下输出:

三、coapods-hmap-prebuilt介绍
以下内容摘自:一款可以让大型iOS工程编译速度提升50%的工具
cocoapods-hmap-prebuilt 是美团平台迭代组自研的一款 cocoapods 插件,以 Header Map 技术 为基础,进一步提升代码的编译速度,完善头文件的搜索机制。
四、Header Map 是个啥?
Header Map是二进制文件,其包含头文件和头文件路径的映射表。
其核心功能是让编译器能够找到相应的头文件的位置,相较于使用header search path提供的路径查找会快很多
1、Hmap在编译后的文件路径
我们编译后,通过Products,找到生成的app的目录,如下图:

在其中,我们找到Intermediates.noindex目录下的Pod.build

2、hmap查看工具
我们通过hmap查看工具来输出下hmap文件的内容。
1 | hmap print Masonry-all-target-headers.hmap |
输出内容如下:

附:该hmap工具的安装方法,如其github上的How to use一样,使用如下一行命令,在终端中执行即可。
1 | brew install milend/taps/hmap |