2018年度总结-iOS模组化

简介

模组化其实是iOS发展的必然进程.我们类比一下服务端演进.

服务端 iOS
依赖管理 npm(nodeJS), pip(Python) cocoapods, carthage
运维 ansible,puppet,saltstack fastlane
模组化 微服务(概念) 模组化(概念), 组件化(概念)
容器化 Docker 小程序?
分布式编排 Kubernetes 没有

微服务的概念源于2014年3月Martin Fowler所写的一篇文章 Microservices

微服务架构 (Microservice Architecture) 是一种架构风格,其没有明确的定义.

可以看出各端追求的目标是一致的, 笔者总结为一下三点:

  • 高复用
  • 编排自由
  • 快速部署

目前大部分公司iOS模组化都基于cocoapods私有库方案, 将工程分层至cocoapods仓库中,再在宿主工程中利用Podfile管理.

工具链

  1. Gogs: 私有git服务方案,我们采用自主部署私有git服务方案,来提供iOS端的版本管理服务.

    Gitlab: 机器配置高建议采用该项目

    其他端业务 因为历史原因 依旧采用 svn 管理.

    svn 也可以搭建 cocoapods 私有化仓库, 但是坑多资料少. 极不推荐.

  2. cocoapods: iOS流行的依赖管理工具.

分层设计

  • cocoapods仓库分层设计

    1. 基础组件仓库
      • 仓库数: 1
      • 描 述: 该部分为iOS端独立功能件.
      • 复 用: 多项目复用.
    2. 业务组件仓库
      • 仓库数: 1
      • 描 述: 该部分为iOS端业务需求通用件.
      • 复 用: 多项目复用.
    3. 业务模块仓库
      • 仓库数: 每个项目一个仓库
      • 描 述: 该部分为iOS端业务模块.
      • 复 用: 多项目独立.
  • 模组分层设计

    1. 基础组件:

      承载与业务无关的功能,.

      划分标准: 脱离公司依然适用.

      该部分部分同步开源至Github.

    2. 业务组件:

      承载与业务定制化的功能.

      划分标准: 与公司具有一定耦合性.

    3. 业务模块:

      承载具体业务场景.

      划分标准: 依照具体的业务线拆分.不太建议单页面为一模块,会导致业务模块过多反而难管理.

    4. 宿主工程:

      具有一些必备的初始化配置的壳工程.

      划分标准: 依照公司项目要求.

    5. 组件下沉:

      即下沉到下层组件,这里的“下层”指架构的基层,一般为业务组件层或基础层。下沉指将不同上层库中的代码统一并移动到下层的基层库中。

以下是我司模组分层设计简单的示意图:

相关链接

2018年度总结-iOS路由(Khala)设计

2018年度总结-iOS模组化

2018年度总结-iOS自动化构建系统

参考

美团外卖iOS多端复用的推动、支撑与思考