一起养成写作习惯!这是我参与「掘金日新计划 · 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
,解决本地组件的依赖问题