使用cocoapods进行组件化

717 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第10天,点击查看活动详情

记录下学习cocoapods的组件化的过程

1. Cocoapods的原理

image.png

我们经常会进行pod install 导入一些代码,通过push 上传一些代码。通过pod search查找一些库的信息。通常我们使用cocoapods来搜索管理这些库

image.png

比如我们查看AFNetworking,就在我们的Specs中缓存了它的描述信息,通过这些描述信息就可以找到它

image.png

我们查看下des中的信息

image.png

通过这些描述比如name,verison,homepage,source等,我们就可以拿到这个AFNetworking了。
结合上面一开始那张图,通过CocoaPods/Specs 先在本地CocoaPods/Specs的索引库查找我们要导入的库的信息,没有的话通过pod search 远端搜索,搜索到缓存到本地。之后进行pod install 导入。

image.png

就是通过spec进行管理的

2. 组件化模块创建

我们本地写一个pod库 之后在example 中 pod install 后最后,git push到云端就可以供别人使用了。

2.1 pod lib create

image.png

我们通过pod lib create 创建一个本地的组件库,会带有一个demo

image.png

我们的代码写在Classes

image.png

接下来我们写一些代码放在Classes

image.png

之后我们进入这个Example中进行pod install

image.png

导入了本地pods

image.png

我们可以添加路径

image.png

  • Example中使用

image.png

这里记得把这个和需要使用的方法进行公开否则私有方法无法访问

image.png

2.2 依赖三方库

上面我们只是简单的使用本地写好的demo,但是通过我们会依赖一些三方的库。比如我们继续添加一些类型

image.png

我们就需要管理这个module,通常我们是在podfile里面pod 三方的Kingfisher。但是我们现在是对这个模块进行添加因此我们在这个模块的podSpec配置信息中配置相关信息

image.png

里面包括了这个module的一些版本信息,名称,地址等。我们每次版本变更可以进行版本管理 image.png

我们可以按照说明通过s.dependency 添加依赖的第三方库。之后进行pod install

image.png

导入了我们模块的pods库

2.3 依赖本地库

我们使用同样的方法创建一个本地库用于存放我们的配置和拓展信息

image.png

如果我们之前创建的UI库依赖本地库怎么做呢

image.png

配置文件中添加依赖,之后进行pod。但是报错,因为三方的库已经导入云端,我们本地的没有导入云端,我们因此要添加路径。我们要在podfile添加路径

image.png

podfile中我们 pod BYCommonUIModule这个库的时候是 当前文件的上一级../ 进行查找BYCommonUIModule。因此我们找到本地BYMacroAndCategoryModule的路径进行pod

image.png

再次pod install 即可

image.png

2.4 组件化资源文件加载

通常我们使用组件的图片应该怎么做呢?

image.png

我们之前写代码的上面有个Assets

image.png

我们把我们要的图片放入

image.png

之后把我们spec中关于资源文件注释打开

image.png

但是要注意这个样式的格式,去掉.png.因为我们导入的image.asssets格式,pod install

image.png

之后我按照网上的一些加载方式找到bundele

image.png

但是并没有加载出来,郁闷。哈哈,后面根据打印的main bundle地址

image.png

在下2层,我们加载出来

image.png

对于json和xib的话类似,都是通过找到bundle后读取对应的json文件和xib

2.5 把本地库上传到远端

创建一个仓库 image.png

之后复制仓库地址进行添加,我们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 


image.png

2.6 验证podspec文件

tag打上去之后,进行远程校验,其实和本地校验一样,本地如何校验通过的,远程只需要把lib字段改成spec就可以了

image.png

校验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. 总结

实际开发学习中,自己动手操作操作,原理大概就是这样。