iOS旧项目模块化改做-准备工作
简介
- 工作中运营童鞋及公司发现业务发展,需要做各种马甲,并且马甲都必须要有迭代能力,本农刚好有机会就顺便记录一下,旧项目模块化改做的难点与坑,改做后对多马甲迭代有莫大的优势。这里由于一些不可描述的问题,就不放出自动重构脚本,因为脚本目前只适合本司的项目使用,如果同行欢迎讨论。 BeeHive,CTMediator,LDBusMediator,MGJRouter,这几种我都细看了源码的实现,及结合项目做了考虑。
前言
-
由于篇幅问题,多篇文章述对应不同内容。初步计划分四步,选项,分模块,分pod,模块系统构建,暂定这给个方法,更新频率也不会很高,因为这些我都需要时间一步步实践整理。
-
文字不如图片直观,所以先上一张思维导图,梳理脉络。另外图片可能更新不及时,请参考思维导图链接。
解耦框架选型
选型其实目前也就找了一些网上比较多讨论的框架,自建其实也不复杂,不过有现成又满足业务的,何必在做轮子。大概有如下3类,根据参数传递,及约定解耦协议,大概可以分如下3类,优缺点思维导图中很明确,本农在不在这里在叙述了。
-
1 URL
-
2 NSDictionary
-
3 protocol/代理
分仓库前期准备-重建项目结构
分析项目结构
旧项目结构
模块化项目结构
思路总结
-
原项目是典型MVC结构,每个TAB都会有一个对应TAB的文件夹,然后每个文件夹代表一个详情页,该文件夹内又会有独立的MVC结构文件夹,并且不同TAB之间可能存在图片,代码,单例,工具类等等的相互依赖关系。
-
所以明确方向,就是吧这部分相互依赖关系的模型,工具类。。。下沉到基本或者宿主项目中。。
-
从新项目结构看,把其中的一个TAB拆分为独立的.a工程,而该工程会引用所有宿主工程的资源。。。。把不能拆分的部分重新整理,留在宿主中。
-
另外,目前所有POD还是在宿主工程引用,后期会逐步精简,抽离。
项目文件配置
目前阶段,手工管理宿主工程
- 1 编译依赖添加模块工程
- 2 宿主工程引用模块的.a文件
- 3 脚本重建所有头文件索引,变量主工程所有.h文件,并制作所有.h的替身文件,
- 4 重建模块项目,搜索路径把POD路径,及宿主.h替身,引入项目头文件索引路径。
分仓库
soucre tree 子模块功能
-
使用GIT子模块管理功能,把模块分为独立的仓库
-
缺点,目前还是其实只是项目层面的初步解耦,但是目前业务下,基本都要设计模块GIT和宿主GIT作修改,也是相对麻烦的
-
但是,总体私路都已经有了,按这个思路走很快就会过度到稳定期,然后就是模块改POD配置的时候了。