背景
随着公司业务的不断发展,项目的功能越来越复杂,各个业务代码耦合越来越多,维护成本越来越高,已经无法高效的管理工程代码;因此需要用一种技术来更好地管理工程,而组件化是一种能够解决代码耦合的技术。项目经过组件化的拆分,不仅可以解决代码耦合的问题,还可以增强代码的复用性,工程的易管理性等。
为什么需要组件化
- 模块间解耦
- 模块重用
- 提高团队协作开发效率
- 便于单元测试
哪些项目不需要组件化
- 项目较小,模块之间交互简单、耦合少
- 模块没有被多个外部模块引用,只是一个简单的小模块
- 模块不需要重用,代码也很少被修改
- 特殊原因(懒)
如何实现组件化
将不同的功能或者业务抽离成一个个的组件(pod库),组件除了依赖基础组件,尽量保证每个组件之间都是独立的。
创建组件pod库
1、终端输入命令,创建项目文件:
pod lib create PrivateBaseLib
2、添加代码
将代码放在Classes目录下,cd 到 Example目录,终端执行命令:
pod install
会自动将Classes目录下的文件同步到Pod工程中,如下:
3、 提交代码
git add .
git commit -m "add"
git remote add origin git@github.com:fengyang0329/PrivateBaseLib.git
git push origin master
4、发布稳定版本tag
git tag -a 0.1.0 -m "0.1.0 relase"
git push origin 0.1.0
5、验证pod文件的有效性
记得一定要先打tag再验证;cd 到 .podspec文件所在目录,执行终端命令:
// pod lib lint 是只从本地验证你的pod能否通过验证。
// pod spec lint 是从本地和远程验证你的pod能否通过验证,远程验证一定要先打tag
pod lib lint --allow-warnings
组件库的发布
验证成功后,说明组件库基本制作完成,而如何使用组件库又分为三个方向:
1、直接使用(请慎重使用此种方式)
//缺点1:每次调用pod install 都会重新从网上下载,请慎重使用此种方式
//缺点2:使用此种方式,则无法在私有库中依赖私有库,后面会讲到:私有库中如何依赖私有库
pod 'PrivateBaseLib', :git => 'git@github.com:fengyang0329/PrivateBaseLib.git',:tag => '0.1.0'
2、发布到官网
2.1、 在终端执行命令,检验是否有提交权限
pod trunk me
2.2、 如果没有权限,则需要注册一个帐号:
// 邮箱为github绑定的邮箱,会发送一封带有链接的邮件,打开链接即完成注册
pod trunk register 12345678@qq.com
2.3、 上传PrivateBaseLib.podspec文件到官网
// 更新升级的时候也需要执行此命令,否则pod install时拉取不到最新tag
pod trunk push PrivateBaseLib.podspec --allow-warnings --verbose
2.4、 安装使用:
pod 'PrivateBaseLib', '0.1.0'
3、发布到私有网站
3.1、 首先,需要创建一个私有的repo索引库,我是在github上创建的
3.2、 将repo索引库添加到本地:
pod repo add TestRepo https://github.com/fengyang0329/Specs.git
3.2、 上传PrivateBaseLib.podspec文件到私有库
pod repo push TestRepo PrivateBaseLib.podspec --allow-warnings --verbose
3.3、 安装使用(Podfile中一定要添加私有库source):
source 'https://github.com/CocoaPods/Specs.git' # 官方库
source 'https://github.com/fengyang0329/Specs.git' # 私有库
platform :ios, '9.0'
use_frameworks!
target 'PluginTest' do
pod 'AFNetworking', '~> 3.0'
pod 'PrivateBaseLib', '0.1.0'
end
私有库中依赖私有库?
前面 如何实现组件化 中有讲到,其他组件是可以依赖私有基础组件的,而这也是完全可行的。
1、创建私有库 PrivateUtilLib
2、添加代码
3、提交代码并打tag
4、验证pod
// pod lib lint 是只从本地验证你的pod能否通过验证。
// pod spec lint 是从本地和远程验证你的pod能否通过验证,远程验证一定要先打tag
pod spec lint --sources="https://github.com/fengyang0329/Specs.git" --allow-warnings
5、上传PrivateUtilLib.podspec文件到私有库
pod repo push TestRepo PrivateUtilLib.podspec --sources="https://github.com/fengyang0329/Specs.git" --allow-warnings --verbose
6、安装使用
source 'https://github.com/fengyang0329/Specs.git' # 私有库
platform :ios, '9.0'
use_frameworks!
target 'PluginTest' do
pod 'PrivateUtilLib', '0.1.0'
end
通过上图可看出,安装 PrivateUtilLib 时,会自动安装依赖库 PrivateBaseLib
7、检验代码是否生效