由美团文章“一款可以让大型iOS工程编译速度提升50%的工具”引出的.hmap文件(下)hmap落地

3,024 阅读3分钟

系列文章:OC底层原理系列OC基础知识系列Swift底层探索系列iOS高级进阶系列

前言

距离上篇文章写出来已经有一个多月的时间了,上面文章由美团文章“一款可以让大型iOS工程编译速度提升50%的工具”引出的.hmap文件探索介绍了什么是hmap,有什么用!文章结尾我说会进行落地,然后就比较坑了,感觉不落地,这以后都没法交代,没法继续写文章了!后面不再写这样的话了,坑!

结果展示

  • 1.创建个项目工程,如下图所示,红框为自己写的组件 image.png
  • 2.Pod目录 image.png
  • 3.使用写的插件生成我们需要的hmap image.png
  • 4.文件变化 image.png

发现podxcconfigHEADER_SEARCH_PATHS添加了hmap路径 image.png 此时我们的文件目录也发生了变化,在Headers文件中多生成了一个Hmap,在Hmap文件夹下,我们根据Cocoapods引入不同的库而生成了相应的.hmap文件

  • 5.读取一下hmap image.png

这个和我们上面文章读系统自动生成的格式是一样

  • 6.优化结果 image.png image.png

上面没有使用hmap的编译时间下面使用了hmap的编译时间,可以明显感觉到编译速度提升了!说明我们做的没错

分析

上面我们也看到了,我们是通过pod命令来实现生成的hmap的,那么我们就需要使用ruby语言实现这个功能

  • 1.看下这个插件 image.png

红框就是实现代码文件,通过文件我们可以感觉它特别像组件 image.png 上图是项目的组件,而ruby写的其实ruby的组件cocoapods其实就是用ruby写的

  • 2.更新bundle,因为在写ruby,也会引入依赖库,就和项目引入第三方库类似 image.png

引入的依赖 image.png image.png 到这一步,意味着更新完成

  • 3.生成插件 image.png

通过rake install:local命令将写的组件生成我们要用的插件

  • 4.查看插件 image.png

上面的红框就是我现在使用的cocoapods,下面的就是我们刚生成的

代码分析

代码也没啥分析的,因为我的ruby学的也不怎么样,就粗略的说一下

hmap创建

  • 1.通过pod获取相关信息 image.png

因为cocoapods也是ruby写的,所以我们可以引入cocoapods,通过cocoapods获取podfile

  • 2.获取将要生成的Header路径 image.png
  • 3.获取pod所有的Target,通过Target名称生成相应的文件 image.png

调用了create方法生成hmap

  • 4.将hmap路径生成好 image.png
  • 5.将生成的hmap路径导入xcconfig中 image.png

hmap写入

上面说了hmap创建将路径写入到xcconfig中,下面说下怎么写入的

  • 1.生成Header image.png

就是生成HMapHeader,这部分内容在上面文章中讲过了

  • 2.生成Bucket image.png
  • 3.生成String image.png

最后

今天总算写完了,代码没有细讲,就是粗略的说了下,会ruby的看看就知道啥意思,不会ruby讲的细也不知道啥意思,只需要会用就好了,后面我会放出代码,明天还需要再自己项目中验证一下,没什么问题就会放出代码

后续

测试没啥问题,优化了其中的一切代码,完善了一些功能。贴出来插件链接:hmap落地。最后补充这个hmap插件对组件化项目效果明显