作者
triplecc来源
tripleccsblog,点击阅读原文查看作者更多文章
火掌柜iOS客户端经过近两年的组件化推进,组件数量已经颇具规模,达到了近个。随着组件数量和代码量越来越多,主工程的打包时间从最初的十几分钟,增加到了现在的四十分钟左右。依赖组件较多,改动相对频繁的上层业务组件,其发布时间也较为漫长。编译时长的困扰,已经明显影响了日常开发体验,同时也造成CIpipeline执行时间过长,在runner资源匮乏的情况下,不利于内部CI的推广。当前时间节点下,如何减少编译时长,已经成为开发团队较为迫切的需求。
前言组件化除了让模块复用更加便捷,业务开发更加轻量,还有一个不可忽视的优势———组件二进制化,即可通过将非开发中的组件预先编译打包成静态/动态库并存放至某处,待集成此组件时,直接使用二进制包,从而提升集成此组件的App或者上层组件的编译速度。
对比源码依赖,二进制依赖的组件只需要进行链接而无需编译,可以极大地提升集成效率。掌柜主工程在大部分组件都二进制化的情况下,打包时长从四十分钟左右,下降到最快十二分钟,整整减少了三倍多,CIpipeline涉及到编译环节的lint、打包、发布,其耗时也成数倍减少,二进制化所带来的好处不言而喻。
在实践二进制化过程中,由于没有找到较为成熟的依赖切换工具,我们编写了cocoapods-bin通用插件,有需要的开发者可以尝试下。
需要说明的是有些二进制方案是在首次编译后,保留组件生成的二进制包,后续编译直接使用此二进制包。在大多数情况下,比如App打包,组件lint与发布,这类只进行一次编译的操作,首次编译才是主要
最近更新
推荐文章