Cocoapods本地模块化

60 阅读2分钟

理解:一个项目都是由多个功能组合而成的,就像一辆汽车由发动机、变速箱、车架、轮胎等配件组合而成。往往一个生产商很难生产所有的配件,毕竟这不仅仅只是金钱上的问题。项目亦是如此,一个人往往精力时间上都是有限的,更何况项目还等着上线运营。把一个项目跟生产配件一样拆分成多个模块,同时分配多个人来同时生产搭建,这可不仅仅解决了项目着急上线的问题。

先不急着去理解多人同步的事情,先把模块的问题来捋一捋,毕竟模块也分很多种有基础模块。如可分核心基础模块、业务功能模块、第三方服务模块等等。接下来总结下项目中所使用的本地模块化的步骤:

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