ios端组件化实践(总纲)

2018年11月5日
一.实现效果
1.原来的项目包含所有代码;现在的项目支持模块化,需要那个模块,引入那个模块即可(不会引入不需要的模块代码),在做简单的修改既可。
同时可以支持各个库 用各个库自己的版本,eg培训库用1.0版本 我的(个人中心)库 用2.0版本。


image.png

非模块化前缺点:
1.1.最多只是隐藏,其实代码还在;
1.2. 不容易支持培训用1.0版本, 我的(个人中心)用2.0版本


image.png

2.业务库也可以做成独立运行的程序,如下面的培训库


image.png

2.1实现,其实就是把工程库的主要文件导入到demo里面


image.png

同时依赖登录模块


image.png

启动跳转到登录页面,设置各个环境变量(主干库代码也有)


image.png

3.文件目录结构清晰很多了
组件化后的工程 主干除了部分没有配置文件和图片没有抽离外,基本上就是个空壳了 「理论上也可以抽离极光,做库的时候报错了,先不抽离了」
image.png

没模块化前工程,很乱。


image.png

二.实现原理

1.主要是将各个文件放到对应库里面,之后对各个库进行解耦,使之能独立编译运行

2.我们用的关键技术其实就是 Target -action方法 (用的CTMediator其实也是这个原理)

可以参考如下两篇文档:performSelector实现不引入头文件

用运行时命令实现不引入头文件

三.具体实践

1.第一步,我们要抽离一些基础库,如网络库,宏定义库 ,公共库等

参考:组件化-创建工具类私有库

2.第二步,基础库抽离完了,我们接可以开始抽离业务库了,我们这边根据业务抽离了5个业务库和5个业务服务库

    ##登录##
    pod 'HuLoginAndRegisterKit'
    pod 'HuLoginAndRegisterCategoryKit'
    ##培训##
    pod 'HuTrainKit'
    pod 'HuTrainCategoryKit'
    ##宣教##
    pod 'HuHealtheducationKit'
    pod 'HuHealtheducationCategoryKit'
    ##发现##
    pod 'HuDiscoveryKit'
    pod 'HuDiscoveryCategoryKit'
    ##个人中心##
    pod 'HuPersonalCenterKit'
    pod 'HuPersonalCenterCategoryKit'

参考:组件化-创建业务类私有库 (含库如何实现分层显示)

注意以上两个步骤,一般会来来回回修改,有可能该开始抽离到业务库的类,之后又要重新抽离到公共库中。

四.抽离过程注意点,

1xib等资源文件处理,参考如下文档 组件化-xib等资源文件处理

2.组件化库里无法区分4个环境的宏定义解决

3.组件化过程常见问题

4.组件化后发现UAT SIT DEV环境无法正常调试

五.抽离好后 一般开发流程 参考如下流程

1.组件化后开发流程

2.多人开发协作,如果组员C做好一个库(基础库),并上传印证成功,一般组员A的做法是

a.先更新本地索引库

pod repo update HuModularizationSpecs

b.在更新对应的库

pod update HuUtilsKit --verbose --no-repo-update

//或者 全部更新
pod update --verbose --no-repo-update

2.1补充,我们也试过组员A做了一个HuCategoryKit库 1.0.29版本 ,组员C本地还是1.0.28

组员C不调用如上命令更新库, 组员A在含有库1.0.29的主工程上修改1.0.29库的代码,push到远端, 组员C在把主工程更新下来,发现也有对应的修改

不过最好还是按正常流程走,

2.2.如果你忘了更新远端库,直接pull, 接下来一般流程是先更新本地索引库和对应库

之后可以调用如下命令

pod install --verbose --no-repo-update //(只安装新增的库,不更新已存在的库)

六.补充

1.组件化后-代码合并冲突一般解决流程

如果您发现本文对你有所帮助,如果您认为其他人也可能受益,请把它分享出去。

推荐阅读更多精彩内容