理解:一个项目都是由多个功能组合而成的,就像一辆汽车由发动机、变速箱、车架、轮胎等配件组合而成。往往一个生产商很难生产所有的配件,毕竟这不仅仅只是金钱上的问题。项目亦是如此,一个人往往精力时间上都是有限的,更何况项目还等着上线运营。把一个项目跟生产配件一样拆分成多个模块,同时分配多个人来同时生产搭建,这可不仅仅解决了项目着急上线的问题。
先不急着去理解多人同步的事情,先把模块的问题来捋一捋,毕竟模块也分很多种有基础模块。如可分核心基础模块、业务功能模块、第三方服务模块等等。接下来总结下项目中所使用的本地模块化的步骤:
1.创建
-
在项目根目录下创建一个文件夹目前(想创建多个文件来管理并非无可),该目录就相当于模块化的总目录,在此目录内可以来细分模块内容和层级关系,下面是大致的模块分类,当然项目越大会划分的越细。
├── BasicModule/ │ ├── Network │ ├── Model │ ├── Tool │ └── .... └── FeaturesModule/ ├── Home ├── Personal ├── Login └── ... -
cd到本地对应的模块文件夹
pod spec create xxx (模块名称)
修改模块podspec文件
// 以下是必填项
spec.name = "GCRequestManager"
spec.version = "0.0.1"
spec.summary = "GCRequestManager"
spec.homepage = "GCRequestManager"
spec.author = { "xxx" => "GCRequestManager" }
spec.source = { :git => "GCRequestManager", :tag => "1.0" }
// Path为模块代码存放文件名
spec.source_files = "GCRequestManagerModule", "Path/"
在source_files指定的目录下创建相应的代码文件
-
添加模块
在podfile文件中按照如下格式添加创建的模块:
pod '[模块名称]', :path => '[模块所在的目录]' -
最后执行
pod install
- 注意事项
- 模块之间的依赖应该是单向的,避免循环依赖。而且通常都是上层模块可以依赖下层模块
- 如何只允许模块访问,不允许继承或重写的则使用public
- 允许其他模块继承或重写的则使用open
报错
The Swift pod `GCHomeModule` depends upon `MJRefresh`, which does not define modules. To opt into those targets generating module maps (which is necessary to import them from Swift when building as static libraries), you may set `use_modular_headers!` globally in your Podfile, or specify `:modular_headers => true` for particular dependencies.
解决方案
pod 'MJRefresh',:modular_headers => true