笔者所在部门都一个很大的SDK,被公司众多部门所使用,笔者到来之前,这个SDK采取的是原始的开发方式,随着时间的迁移,已经变得非常大,大概一千多个OC文件,C++的没数过,功能也很丰富,但是对于某些部门,对包大小有非常严格的限制,某些不需要的功能需要减包,对于一个高度耦合在一起的SDK来说,几乎只能通过预编译宏来减少文件的引用,这样做造成一个git仓库上维护着多个分支,每次合并都是噩梦般地存在,而且由于功能模块很多,对于每一个功能模块都需要有一个预编译宏,这样带来一个问题,如果宏的组合发生错误,那么这个极有可能带来严重BUG。因为笔者面试的时候,和面试官除了常规技术问题,谈得最多的是架构设计,所以当笔者进入公司之后,总监以及组长都希望我能够解决掉现在的问题,至少说能够部分解决,特别是大ZT计划发布之后,这件事被真正意义上的开始实施。笔者这篇文章是一篇随笔,是希望为遇到同样的事情的开发者提供一些思路,由于保密的原因,有很多东西没有办法说清楚,忘见谅,勿喷。
需求
笔者的任务在初期是比较简单和明确的,要求对于某些模块能够可选集成,使用cocoaPod的时候,是否集成某个模块,不能改动一句代码,有点像友盟的社会组件集成方式,但是比那个应该要复杂一些,后面会细说原因。
看到这里,有经验的朋友第一个想到的就是组件化,组件化已经不是什么稀罕事儿了,业内有非常成熟的URL注册方案,Mediator方案以及Protocol注册方案