一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第10天,点击查看活动详情。
记录下学习cocoapods的组件化的过程
1. Cocoapods的原理
我们经常会进行pod install 导入一些代码,通过push 上传一些代码。通过pod search查找一些库的信息。通常我们使用cocoapods来搜索管理这些库
比如我们查看AFNetworking,就在我们的Specs中缓存了它的描述信息,通过这些描述信息就可以找到它
我们查看下des中的信息
通过这些描述比如name,verison,homepage,source等,我们就可以拿到这个AFNetworking了。
结合上面一开始那张图,通过CocoaPods/Specs 先在本地CocoaPods/Specs的索引库查找我们要导入的库的信息,没有的话通过pod search 去远端搜索,搜索到缓存到本地。之后进行pod install 导入。
就是通过spec进行管理的
2. 组件化模块创建
我们本地写一个pod库 之后在example 中 pod install 后最后,git push到云端就可以供别人使用了。
2.1 pod lib create
我们通过pod lib create 创建一个本地的组件库,会带有一个demo
我们的代码写在Classes中
接下来我们写一些代码放在Classes中
之后我们进入这个Example中进行pod install
导入了本地pods中
我们可以添加路径
- Example中使用
这里记得把这个类和需要使用的方法进行公开否则私有方法无法访问
2.2 依赖三方库
上面我们只是简单的使用本地写好的demo,但是通过我们会依赖一些三方的库。比如我们继续添加一些类型
我们就需要管理这个module,通常我们是在podfile里面pod 三方的Kingfisher。但是我们现在是对这个模块进行添加因此我们在这个模块的podSpec配置信息中配置相关信息
里面包括了这个module的一些版本信息,名称,地址等。我们每次版本变更可以进行版本管理
我们可以按照说明通过s.dependency 添加依赖的第三方库。之后进行pod install
导入了我们模块的pods库中
2.3 依赖本地库
我们使用同样的方法创建一个本地库用于存放我们的配置和拓展信息
如果我们之前创建的UI库依赖本地库怎么做呢
配置文件中添加依赖,之后进行pod。但是报错,因为三方的库已经导入云端,我们本地的没有导入云端,我们因此要添加路径。我们要在podfile中添加路径
在podfile中我们 pod BYCommonUIModule这个库的时候是 当前文件的上一级../ 进行查找BYCommonUIModule。因此我们找到本地BYMacroAndCategoryModule的路径进行pod
再次pod install 即可
2.4 组件化资源文件加载
通常我们使用组件的图片应该怎么做呢?
我们之前写代码的上面有个Assets
我们把我们要的图片放入
之后把我们spec中关于资源文件注释打开
但是要注意这个样式的格式,去掉.png.因为我们导入的image.asssets格式,pod install
之后我按照网上的一些加载方式找到bundele
但是并没有加载出来,郁闷。哈哈,后面根据打印的main bundle地址
在下2层,我们加载出来
对于json和xib的话类似,都是通过找到bundle后读取对应的json文件和xib。
2.5 把本地库上传到远端
创建一个仓库
之后复制仓库地址进行添加,我们cd 到我们当前文件所在的目录
$git init
$git add .
$ git commit -am "创建" //相当于本地commit
//即第一个步骤中创建的仓库地址,这个时候会报错,让我们使用token
//remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
//我们
$ git remote add origin https://token(你创建的token)@github.com/**(你的github名字)/BYCommonUIModule.git
$ git push origin master
//一定要有标签,不然会有下面的警告
//podspec文件中获取Git版本控制的项目需要tag号,
$ git tag -m "first release" "0.1.0"
$ git push --tags
2.6 验证podspec文件
tag打上去之后,进行远程校验,其实和本地校验一样,本地如何校验通过的,远程只需要把lib字段改成spec就可以了
校验podspec文件时会到远程podspec库查找相关依赖,默认只会到官方specs库校验,此时需要指定远程specs库去校验。
pod spec lint --verbose --use-libraries --allow-warnings --sources='git@私有库地址.git,https://github.com/CocoaPods/Specs.git'
2.7 提交到私有仓库
pod repo push [本地Spec Repo名称][podspec文件路径]
//******举例
$ pod repo push BYCommonUIModule BYCommonUIModule.podspec
2.8 使用
我们指定我们私有库的源地址,pod即可。
3. 总结
实际开发学习中,自己动手操作操作,原理大概就是这样。