前言
工程项目越来越大,团队成员越来越多的情况下,组件化是趋势,组件化好处就不细说了.
实施组件化之前我们首要的就是组件拆分,如何拆分拆分原则不是文章重点,假定拆分完之后我们有如下
- 开发流程中我们会有一个主工程(所谓的壳工程)MainApp
- 业务组件:Business_a
- 基础组件:BaseAppKit 内部依赖第三方库AFN
- 远程索引库my_proj_spec
MainApp依赖business_a
Business_a依赖BaseAppKit
BaseAppKit依赖AFN
当然实际大型项目开发会有很多的业务组件、通用业务组件、基础组件、路由、日志等。
接下来就开始我们简单的组件化搭建吧
创建索引仓
组件化之前,我们首先要理解组件化的基本流程
pod 'SDWebImage'
本质上去CocoaPods官方https://github.com/CocoaPods/Specs.git
中去寻找对应的第三方库的.podspec文件,进而解析文件依赖源码资源等配置信息,拉进你的工程
pod repo
pod repo查看本地repo仓
master
- Type: git (master)
- URL: https://github.com/CocoaPods/Specs.git
- Path: /Users/pengxin/.cocoapods/repos/master
会在这里搜索SDWebImage的spec文件,pod setup之所以慢就是拉取官方的仓到本地,知道这个原理后,如果pod setup很慢把已经下载好的repo拖进你的电脑也是一种解决方法
创建索引库my_proj_spec
首先创建我们私有的远程索引仓my_proj_spec,我已在码云上已创建好[email protected]:xxx/my_proj_spec.git
然后把my_proj_spec索引库添加到本地
pod repo add my_proj_spec https://gitee.com/xxx/my_proj_spec.git
添加后 我们执行下pod repo查看下
以后组件有更新,我们本地可以更新下索引
pod pod repo update my_proj_spec
创建基础组件库BaseAppKit
- 这里我们简单用GitHub模板来创建一个工程
pod lib create BaseAppKit
根据提示和你的需要下一步即可
创建完后我们编辑BaseAppKit.podspec让其依赖AFN
s.source = { :git => '[email protected]:xxx/BaseAppKit.git', :tag => s.version.to_s}//这个地方不要错了
s.dependency 'AFNetworking'
BaseAppKit.podspec这个文件就是你的组件发布配置文件,将来会更新推送到远程my_proj_spec仓库对外下载更新的,具体细节展开篇幅较多了,如果不熟悉的自行谷歌、百度吧。
我们执行pod install看下库工程是否下载依赖了AFN
- 提交源代码并打tag
注意这里的tag必须跟podspec中的tag一致,因为CocoaPods是通过podspec文件中的tag去找源文件的,如果tag对应不起来就会验证失败。打好tag提交远端
git add -A && git commit -m "Release 0.1.0"
git tag 0.1.0
git remote add origin [email protected]:username/BaseAppKit.git//关联远程库
git push --tags
git push -u origin master
- 验证spec
有两种方式验证
本地验证:
pod lib lint --allow-warnings
联网验证
pod spec lint --sources='[email protected]:xxx/my_proj_spec.git,https://github.com/CocoaPods/Specs' --allow-warnings
建议大家都⽤用联⽹网验证
这里可选参数有:
--allow-warnings 允许警告
--sources=‘master,privateSpecs:指定源 比如你的私有pod同时依赖了公有库和私有库你必须指定源才行,因为默认会去公有源查找对应的依赖
--use-libraries 如果使用了静态库 记得加上
- 推送到Spec仓库
pod repo push my_proj_spec BaseAppKit.podspec --allow-warnings
同样的加上上⾯面验证时使⽤用到的可选参数
创建业务组件Business_a
创建过程同上略过
- 编辑BaseAppKit.podspec
s.dependency 'BaseAppKit'
- 编辑Podfile
因为依赖的是我们自己的私有库所以要特别指定源
source 'https://gitee.com/frankpx/my_proj_spec.git'
source 'https://github.com/CocoaPods/Specs.git'
pod install 试试看有没有正确下载你的私有组件。
当然了较大团队内部还可以把CocoaPods公有库的spec文件迁移发布到公司内部远端私有spec上,这样上面就可以不用添加source 'https://github.com/CocoaPods/Specs.git'官方索引源,这样团队其它成员在私自引入第三方库上就会有所控制,流程上面更规范些。
之后有时间会继续写一些延续的实践,组件化本地联调(创建dmeo工程和framework工程以及之间的联调、组件项目中资源文件管理、路由相关工程实践、fastlane自动化证书管理、打包等),在此先立个flag,就当先给自己备忘下吧