iOS组件化App壳工程方案

6/30/2017 iOS

之前确定过组件化方案,也在按照方案的步骤一步步在执行。随着平台组基础组件的逐个建立,App主工程也对基础组件进行接入。在此之前App也按照业务功能模块划分了文件夹。后面可进一步将公共资源下沉,并拆分业务组件。

# 目标

  • 主工程只剩下空壳,所以也叫做壳工程。
  • 通过CocoaPods管理第三方依赖,基础组件、公共组件和业务组件依赖关系
  • 组件独立开发,独立编译,独立发布

# 详细计划

主工程主要按照以下步骤进行拆分剥离组件。

# CocoaPods管理依赖(已完成)

目前主工程使用CocoaPods管理第三方依赖、基础组件依赖。下一步拆分业务组件,并在拆分业务组件的过程中下沉公共资源,并使用CocoaPods依赖。

# 使用文件夹隔离业务(已完成)

主工程已经按照之前确定的业务组件划分文件夹,对业务进行隔离,并在业务文件夹内部根据职责划分Controller、Model、View、Service等

App

# 业务模块拆分

在进行业务模块拆分的过程中会遇到各种问题,比如基类、公共宏、业务宏、工具类、弹出框、第三方类等。这就需要基础类剥离、公共资源下沉,最终才能把业务独立拆分。

  • 通用业务相关内容拆分到通用业务组件中,比如:Web容器,Passport等
  • 公共类资源类下沉到基础组件中,比如:BaseModel、公共宏、公共Utils类、App配置等。
  • 业务组件拆分,业务组件直接拆分会比较困难,因为业务组件势必会对其他业务模块、公共模块等存在功能依赖,页面跳转等问题。经过第一步的基础类拆分和第二步的公共资源下沉,业务模块就可以进行相应的基础依赖,从而解决这些问题。

注意:在业务模块拆分的过程中,对于一些代码需要重构,提高代码质量,例如:控件创建(推荐使用getter方法进行初始化)、页面布局(摒弃代码绝对布局、使用autolayout进行布局)、网络请求重新创建service层等。

# 组件二进制化

业务模块拆分后,就可以独立开发了。而组件之所以要进行二进制化有以下两点原因:

  • 保护代码,不会源码对所有人都暴露
  • 加快壳工程编译速度,二进制的组件不需要重新编译,所以会极大的加速壳工程的编译速度。

# Jenkins打包分发

壳工程之后,Jenkins根据不同版本创建不同Job进行壳工程打包,根据依赖配置拉取对于版本的组件进行打包,并自动化分发到测试平台。

Last Updated: 1/15/2023, 2:48:14 PM