iOS模块化开发的两种基本实现方式
前言
模块化开发有诸多的优势:
- 避免耦合
- 分工明细
- 职责单一
- 依赖清晰
- 便于移植
- 灵活组合
- …
模块化开发试用场景:
- 项目较大,功能复杂
- 功能模块需要跨项目运行
- 功能模块有高频度复用需求
- …
iOS开发中模块化主流的有两种方案:
- CocoaPods私有库
- 一个XCode Workspace组合若干个Project
- 综合前两中方案实现
使用CocoaPods私有库实现模块化
这里也可以参考我的另一篇文章,如何创建CocoaPods开源库,里面有CocoaPods创建自建仓库的详细说明。
接下来我们实战创建两个私有库来实现模块化开发。
得到一个工程,工程目录如下:
创建Cocoapods私有库
显然,这时候CocoaPods还没有参与管理项目,我们找到项目根目录。
我们要使用Cocoapods在这里创建一个新的库命名为MyUILib
用做UI工具库,执行:
1 |
|
在输入一系列的参数后,控制台输出如下:
编辑私有库的工程
接着XCode会自动打开一个新生成的工程。打开ReplaceMe.Swift所在目录.
可以看到MyUILib下包含了Classes和Assets两个目录
将Classes拖入工程ReplaceMe所在的位置。点击Finish
完成目录导入。
删除Classes目录下的所有文件和ReplaceMe.swift
点击Move to Trash即删除到废纸篓。接着在Classes目录下创建
创建一个文件,命名为UIView+Extensions.swift
然后我们在UIView+Extensions.swift文件中写入代码:
1 |
|
接下来我们就可以去之前我们创建的Proj1中引入MyUILib模块(实际上是Cocoapods私有库)了。
关联工程与私有库模块
关闭MyUILib工程,使用终端打开Proj1工程目录。
1 |
|
,然后执行:
1 |
|
Proj1变成了使用Cocoapods管理的工程。工程目录下多了一个Podfile
文件,使用文本编辑器打开该文件,加入如下代码:
1 |
|
执行pod install
主工程Proj1成功依赖MyUILib库。如果要创建更多的模块,可以重复上述的步骤,实现更多的私有库模块。
我们来看看工程调用效果。打开Proj1.xcworkspace
。在ViewController中调用MyUILib中的API,可以看到实际效果。
大功告成。
WorkSpace嵌套Project实现模块化
初始化主工程
创建一个工程命名为Proj2作为我们开发的主工程。
接着创建一个WorkSpace,同样命名为Proj2(也可以叫其他名字)。
创建WorkSpace并将主工程引入其中
将新创建的WorkSpace放在与Proj2.xcodeproj相同路径。
点击Save
。
接着XCode会自动打开该WorkSpace。我们在菜单中找到Add Files to "Proj2"
。
选择Proj2.xcodeproj
,点击Add
,即实现添加Project到WorkSpace。
创建一个工程作为依赖模块并引入到WorkSpace
然后我们再创建一个XCode工程。
我们创建一个用作UI库的模块,命名为UILib,这里创建类型选择Framework。
将该工程的保存路径放在与Proj2.xcodeproj相同路径。
点击Create之后,即生成了一个工程,关闭该工程窗口。
接着在之前打开的WorkSpace中将UILib工程添加进去。步骤之前已经有讲,这次选中UILib.xcodeproj工程。
点击Add
后,WorkSpace中就包含UILib和Proj2两个工程了,其中Proj2这里作为主工程,UILib则是主工程依赖的模块。要注意的是模块之前的依赖管理一定要理清,尽量使用单向依赖,方便模块解耦,也符合设计模式的依赖倒置法则。
在模块中添加API并在主工程中调用
接下来我们在UILib中添加一个UIView+Extensions.swift文件,添加一段代码。
1 |
|
在Proj2的Build Phases -> Link Binary With Libraries中引入UILib.framework。
接下来在Proj1的ViewController中调用UILib中的方法,即实现了设置红色背景色的API。
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付