一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情。
创建组件
使用CocoaPods,可分为本地和远程两种方式搭建组件化工程
- 本地:通过项目中创建模块,利用
CocoaPods的workspec进行本地管理,不需要将项目上传git,而是在项目的Podfile中指定目录 - 远程:利用
CocoaPods进行模块的远程管理,需要将项目上传git。对公司项目而言,一般使用私有库
下面我们以本地方式为例,搭建一个组件化工程
创建LGHomeModule模块
pod lib create LGHomeModule
-------------------------
//对模块进行以下配置:
//工程类型
What platform do you want to use?? [ iOS / macOS ]
> iOS
//开发语言
What language do you want to use?? [ Swift / ObjC ]
> objc
//创建App测试项目
Would you like to include a demo application with your library? [ Yes / No ]
> yes
//提供frameworks的测试
Which testing frameworks will you use? [ Specta / Kiwi / None ]
> none
//提供测试文件
Would you like to do view based testing? [ Yes / No ]
> no
//设置前缀
What is your class prefix?
> LG
配置完成后,生成以下工程:
进行组件的开发,真正的代码目录在
Pods项目的LGHomeModule中,而LGHomeModule是对组件进行测试使用
在组件中完成
Home模块的业务代码
在测试工程
Example目录下,执行pod install
打开工程,组件成功导入
三方和本地组件的依赖
三方框架
日常我们开发的组件,有些功能会依赖于其他三方框架,此时我们需要对其进行额外的配置
创建通用UI组件LGCommonUIModule
pod lib create LGCommonUIModule
完成组件的业务代码,部分功能依赖于AFNetworking、Masonry框架
配置组件的
Pod文件,写入对三方框架的依赖
在测试工程
Example目录下,执行pod install,解决三方框架的依赖问题
本地组件
除了三方框架的依赖,我们的组件也会对下层的本地组件进行依赖,例如:分类和宏定义等
在LGCommonUIModule插件中,对下层的公共组件LGMacroAndCategoryModule进行依赖,并且代码中使用到插件中的分类和宏
在
Pod文件中,按照三方库的导入方式
s.dependency 'AFNetworking'
s.dependency 'Masonry'
s.dependency 'LGMacroAndCategoryModule'
s.prefix_header_contents = '#import "Masonry.h"','#import "UIKit+AFNetworking.h"','#import "LGMacros.h"'
- 如果公共组件在云端,当然不会有任何问题。但案例中,使用本地组件,这种导入方式一定会报错
导入本地组件,除了上述的配置之外,还需要在
Pods项目中的Podfile文件中,对公共组件的本地路径进行配置
以当前的
Podfile文件路径为基础,向上两层,找到LGMacroAndCategoryModule本地组件
在测试工程
Example目录下,执行pod install,解决本地组件的依赖问题