HCMediator组件化详解
2020-06-08 本文已影响0人
刚刚8888
组件化创建流程库
组件化需要创建私有spec库(索引库)、HCMediator库(App中介库)、其他组件库
私有spec库(索引库)
- 在github(或其他服务器)上新建一个仓库(XXXSpecs)作为私有spec库
- 终端执行命令
pod repo add XXXSpecs https://github.com/XXXX/XXXSpecs.git
克隆到本地作为私有库库源。(pod repo list 可查本地l库源列表)
HCMediator库
- 同上,在github上新建一个仓库,并通过Source Tree获命令克隆到本地
- 终端切换到目录 执行命令
pod lib create HCMediator
,会根据cocoapods的pods模板生成一个pods工程,包含pods以及demo工程 - 终端demo目录下通过
pod init
,然后
pod install
安装Cocopods,然后删除replaceme.m文件,在Classes目录下添加模块(HCMediator)源码文件 - 打开demo项目编辑XXX.podspec文件,字段含义参考链接
- 修改完成后终端podfile目录下
pod install - 通过终端切换至podspec文件存在的目录下执行
pod lib lint
检查本地索引(忽略警告使用pod lib lint --allow-warnings)
,执行
pod spec lint
检查远程索引(pod spec lint --allow-warnings) - 都没有问题后执行
pod repo push XXXSpecs XXX.podspec --allow-warnings
cocoapods会把podspec文件上传到GitHub XXXSpecs仓库中,从而完成索引配置 - 在组件化的工程中 通过cocoapods 导入组件时需要先在Podfile中添加库源地址
source 'https://github.com/XXXX/XXXSpecs.git'
如果不是framework注意注释掉use_frameworks!
之后就是正常pod第三方库写法" pod 'HCMediator' ", 然后pod install
其他组件库
其他组件库创建方法同HCMediator库创建方法
HCMediator使用流程
HCMediator模块介绍
HCMediator是工程组件化中中介路由功能模块,主要负责组件间解耦工作。实现组件间完全解耦,组件模块只和中介模块产生关联。
- 每个模块通过建立HCXXXDelegate类,然后实现HCModuleProtocol协议中代理方法从而实现本模块对外跳转接口vc及传参使用,并实现组件模块中需要处理的UIApplicationDelegate协议内容。
其中:
-(UIViewController *)rootViewControllerForModWithParameters:(NSDictionary *)parameters;方法中实现进入子组件时子组件跳转根vc 及参数使用,此代理方法为@required ,要求子组件必须实现。
其他HCModuleProtocol协议中的方法为子组件UIApplicationDelegate协议内容,子组件可以需要时使用
注:只有HCXXXDelegate类与中介模块有联系,其他组件内内部类与中介及其他组件完全没有联系,从而实现组件间完全解耦。 - 中介模块通过维护HCAppProfile.plist文件来维护各个组件的调用名及HCXXXDelegate类名,组件间相互使用时中介通过查HCAppProfile.plist来判断调用组件是否存在,新组件在构建完自己的HCXXXDelegate后需要提供出自己的调用名(代号)及HCXXXDelegate类名给中介模块,中介模块添加到HCAppProfile.plist后,其他组件才能调用到。
- HCMediator类为中介主类,组件通过
[[HCMediator mediator] launchModule:@"A" parameters:nil transition:HCModTransitionTypePush];
调用其他组件。
主工程使用
主工程除了实现主组件内容外,需要将自己的AppDelegate继承HCMAppDelegate,实现将AppDelegate中介化,从而其他组件也可以通过HCModuleProtocol使用AppDelegate中代理内容。
其他内容主工程和普通子组件使用方式相同
组件工程使用
组件工程只实现本模块下需要实现的内容,而且可以独立运行测试,提高运行效率
组件工程需要提供组件入口vc ,具体内容同HCMediator模块介绍 第1点。通过在组件HCXXXDelegate类中实现代理方法,实现对外接口提供。
组件工程开发过程中可以先进行内容开发,开发完成后,建立HCXXXDelegate类,实现相应方法完成对接,然后再将自己AppDelegate中UIApplicationDelegate各个代理方法中内容复制一份到HCXXXDelegate类中对应的HCModuleProtocol协议中各个代理方法中即可。
pod 日常更新流程
组件工程
- 完成修改内容后,需要修改组件的XXX.podspec配置文件的“ s.version ” 版本号(必须)
- 通过Source Tree 或命令提交代码,并打上标签号(tag ,注:规定标签号需要和第一步配置的版本号相同)
- 通过终端命令 pod spec lint --allow-warnings 验证无误
- 通过终端命令
pod repo push XXXSpecs XXX.podspec --allow-warnings
更新podspec文件到GitHub XXXSpecs仓库中,从而完成索引配置 - 确认GitHub XXXSpecs 仓库中标签(tag)值改变
- 使用组件的工程通过终端命令
pod update XXX
实现私有组件的更新
主工程
同组件工程更新流程
主工程更新组件通常通过终端命令
pod update
实现全部组件的更新
HCMediator中介模块
- 中介模块内容修改优化更新时同组件工程更新流程
- 新增组件时需要注意更新HCAppProfile.plist文件中内容