组件化
● 为什么我们需要组件化
为了项目模块间的解耦、模块实现可重用、提升团队成员之间团队之间的协作开发效率。
● 并不是所有的项目都适合组件化
如果你的项目较小,模块之间交互简单耦合很少,模块不需要重用,团队规模很小,项目就没有必要做组件化。
组件化方案
cocoapods组件化:主要是利用 cocoapods 来进行 模块的远程管理,需要将项目上传三方托管平台,如 git (这里的组件化模块分为 公有库 和 私有库 , 对公司而言, 一般是私有库)
● 私有的意思是只有相对应权限的人才能访问,因为项目是公司的根本,正常人都不会选择开源公司的项目,只会开源对应的框架
概念解释:远程索引库、本地索引库、远程代码库、本地代码库;
● 远程索引库
每创建一个组件都会带一个 xxx.podspec 的索引文件,专门用来存放这些索引文件的库就叫做索引库。 我们需要将这些索引文件上传到远程索引库才能保证其他的同事能够拿来用;podspec文件为固定格式的索引文件,规范描述了Pod库的版本, 包括应从何处获取源,使用哪些文件,要应用的构建设置以及其他常规元数据(例如其名称,版本和说明)的详细信息;
● 本地索引库
与远程索引库对应,本地索引库用来存放本地索引文件的库,可通过命令 pod repo 查看你本地已经有哪些本地索引库;
● 远程代码库
用来存放准备组件化的代码,创建方式和创建远程索引库方式一样。这里我们把自己整理的相关代码组件化
● 本地代码库
在本地创建的组件代码库,最终要推到远端,与远程代码库对应
● 原理图
通过Podfile文件执行pod install或者pod update往iOS项目中导入第三方库,实际上是找到podspec文件中描述的git仓库, 然后从git仓库clone到本地的;
私有库创建流程
- 创建远程索引库
在第三方托管平台(github,gitlab,码云 等)创建一个私有的库
github创建远程索引库用来存私有组件的podspec索引文件
远程索引库已经创建成功,可以看到远程索引库的地址
-
生成本地索引库,关联到远程索引库
打开终端 pod repo 查看一下当前有哪些本地索引库(如果你之前没有创建过,应该只有一个master)
通过pod repo add <本地索引库的名字> <远程索引库的地址> ,创建本地索引库并和远程索引库做关联(注:本地索引库的名字建议和远程索引库起的名字一样)
可以查看本地索引库的文件路径
- 创建远程代码库
创建远程代码仓库(和创建远程索引库的方式一样),创建一个FFCategoryKit的远程代码库,用来存放FFCategory组件的代码。同样获取到FFCategoryKit组件的远程代码库地址
- 创建本地代码库
选取路径,然后 pod lib create <组件名> 创建本地代码组件模版库(根据自身需求对提示信息做选择)
编译运行通过看下效果。接着把要上传的组件库代码文件夹拖入到组件FFCategoryKit的classes路径下
接着cd到Example下进行pod install (把刚才拖入到classes里的文件夹pod进来)
- 修改podspec文件
编译组件工程看是否报错,编译通过后需要修改podspecs索引文件,一般需要修改下面几个问题
a. 修改版本号
b. 修改项目的简单概述和详细描述
c. 修改homepage和source地址
d. 添加依赖库
修改前的状态如下图所示:
修改后:
6.提交代码到远端,打tag
- git add .
- git commit -m “xxx"
- git remote add origin 远程代码仓库地址
- git push origin master (新版分支为main)
- git tag 版本号 (注:这里的版本号必须和podspec里写的版本号一致)
- git push --tag origin master
(推送时可能报错 Support for password authentication was removed on August 13, 2021,可按 https://blog.csdn.net/FatalFlower/article/details/119717823 解决)
验证podspec索引文件是否正确
首先,通过pod lib lint FFCategoryKit.podspec --verbose --allow-warnings 验证本地索引文件是否正确
也可以略过本地验证
直接通过pod spec lint --verbose --allow-warnings 命令验证podspec索引文件(既验证本地同时验证远程的podspec)
有时会遇到这样的错误
验证时发现source_files
匹配不到文件
此时,去远程代码库看看对应的Classes是否为空
验证通过后,pod repo push <本地索引库> <索引文件名> - -verbose - -allow-warnings 提交索引文件到远程索引库
本地也可以查看已成功
至此,spec索引文件,和组件代码都成功推到远端,接下来验证使用;
新建工程,修改podfile文件,把FFCategoryKit组件pod进来(注:需要在Podfile中指定组件远程索引库地址,如果不指定默认会从master的索引库查找就会报找不到组件)
后续代码有版本更新操作:
- 代码改动后,参考 6.0 提交代码到远端打tag步骤,将本地代码改动同步到远端;
- spec文件验证通过后,pod repo push <本地索引库> <索引文件名> - -verbose - -allow-warnings 更新索引文件到远程索引库
参考文献: