图2:抖音流水线式迭代发版
抖音工程架构演进
========
阶段一:抖音原始工程架构(Original architecture of project)
图3:抖音项目原始工程架构图
抖音项目一开始是单体架构+Cocoapods,业务代码、工程配置、资源文件全部放在一个大业务仓库。由 Podfile 文件描述第三方仓库的依赖版本。
图4:抖音项目原始工程架目录结构
阶段二:分离壳工程后的工程架构(After splitting of host shell pod)
图5:拆分壳工程后的工程架构
分离壳工程后,工程配置、部分系统资源、工程主入口被拆分到主宿主壳工程。
Podfile 拆分出版本依赖管理文件 Podfile.seer,由依赖管理平台进行各个版本的容器化管理,业务仓跟随宿主集成发版,打平依赖,解决版本依赖决议耗时问题。
大业务仓中的代码和资源被拆分到各个业务线的仓库下,由 podspec 文件描述内外依赖。业务线仓库增加 ModuleInterface subspec,存放对外接口,采用依赖注入方式实现接口隔离,初步建立接口层。
业务仓库之间规定只能依赖其他业务仓库的 ModuleInterface subspec,通过 lint 进行编译检查。
部分基础能力代码被拆分成基础仓库,跟第三方仓库一样独立发版。本地研发工具支持单仓开发和多仓开发,不参与代码修改的仓库通过二进制的方式进行链接。同时 CI 流程上也支持通过二进制打测试包,提高打包效率。
图6:抖音项目拆分壳工程后目录结构
壳工程
图7:壳工程抽象
为了满足一个工程同时支持多个项目、部分业务线功能复用、