OC组件化06:【方案二】cocoapods组件化
背景
随着公司业务的不断发展,应用的代码体积将会越来越大,业务代码耦合也越来越多,代码量也是急剧增加
如果仅仅完成代码拆分还不足以解决业务之间的代码耦合,而组件化是一种能够解决代码耦合、业务工程能够独立运行的技术
这篇文章主要介绍
远程公有库
的创建和管理以及本地索引库的使用
本文以创建 公有库
为例
查看本地索引库
- 我们用
cocoaPods
的时候,默认使用的是cocoaPods自带的索引库
终端中使用命令$ pod repo
1 | cocoapods |
组件化分类
公有库:所有人都能使用
私有库:公司内部拥有特殊权限才能使用
framework:公私都有,动态库/静态库。只能看到
.h
文件。
准备工作
注册
GitHub
账号:上传组件工程用安装
CocoaPods
:创建并验证pod
用安装
Git
命令行 :首次上传组件工程用安装
Github Desktop
或者SourceTree
:后续更新组件用的,Git命令使用熟练者忽略此项
创建公有库
- 首先在
Github
创建一个新的Repository
,你的pods
最终要托管在Github
平台上的,所以在Github
上创建一个空的Repository
注意:库名 = 项目前缀 + 组件名称
,如 ZJWeakProxy = 解决循环引用组件库
- 创建完成后的信息如下:
注册 cocoapods 账户
先安装
cocoapods
,这个很简单,可以百度搜索自行安装想要创建一个开源
pod
库,首先我们需要注册cocoapods账户
,基于cocoapods
已经安装好的前提下,这里直接使用trunk
去注册cocopods账户
,在终端执行:
1 | pod trunk register 邮箱地址 '用户名' --verbose |
邮箱地址:一般会使用 GitHub邮箱
用户名:随便
- 注册之后,在邮箱会收到确认邮件
- 注册成功之后可以在终端
验证是否注册成功
:
1 | // 验证是否注册成功 |
- 查看注册信息,以后可以使用该开源pod库发布工具,也可以通过此方式查看已经发布过的pods:
1 | mac@bogon ~ % pod trunk me |
在本地创建pod库
- 利用pod命令创建名为
ZJWeakProxy
的pod
库
注:这个名字要和 GitHub
创建的 Repository
名一致
1 | # cd 到桌面文件夹(组件文件夹)ZJComponent目录下,这个不强制随意 |
- 出现 fatal: unable to access ‘https://github.com/CocoaPods/pod-template.git/ ‘: HTTP/2 stream 1 was not closed cleanly before end of the underlying stream 报错
原因分析:一般这是因为服务器的 SSL
证书没有经过第三方机构的签署,所以才报错
解决办法:解除 SSL
验证,再次执行
1 | mac@bogon ZJComponent % git config --global http.sslVerify false |
- 执行完上述命令后,会问你几个问题,按需求填写即可
1 | # 你想使用哪个平台? |
- 到这里
pod
库就创建完成了,它会自己打开刚才创建的pod库
工程目录介绍
- 目录结构如下:
【第1部分】:主要是用来编辑pod相关配置元数据区
【第2部分】:主要是用来验证pod效果区
【第3部分】:主要是用来 提供给别人使用暴露出来的pod,ReplaceMe空的可以删除,
是提示我们可以添加自己的类
- 配置
podspec
本地索引文件
1 | Pod::Spec.new do |s| |
注:【s.dependency】:设置依赖三方库或其他组件,多个库可以分开写多次
- 需要注意如图:
Readme
主要是介绍这个组件的用途和使用,可以随时编辑。目前就确认一下自己的名字和邮箱就可以了
- 协议文件,也是确认一下自己的名字和邮箱就可以了
添加自己的类
- 打开pod库目录,删除ReplaceMe
- 创建
ZJWeakProxy
简单类,声明一个打印函数,方便后续测试
注:创建类文件一定要放到 Classes 目录下
.h 文件下:
1 | #import "ZJWeakProxy.h" |
.m 文件下:
1 | #import "ZJWeakProxy.h" |
- 此时
cd
到Example
路径下执行pod install
命令,看看是否能将刚刚添加的库文件引入到工程中
1 | mac@bogon ~ % cd /Users/mac/Desktop/ZJComponent/ZJWeakProxy/Example |
如果成功会在Pods中看到:
- 可以到项目中导入头文件简单使用一下
证明是可用的
【注】:
CocoaPods
工具的另外一个优点就是,多个组件依赖同一个组件时,它会自动帮你检测安装,而不会重复导入
。
项目上传与发布
- cd到你的项目路径下,将项目上传到GitHub中(即刚刚创建的ZJWeakProxy公有库中),依次使用下列命令行,不要遗漏
1 | # cd 到 组件ZJWeakProxy路径下 |
- 在执行
git push -u origin main
时,如果遇到需要输入用户名和密码:
1 | Username for 'https://github.com': BboyZJ |
【注意】:这个 密码
不是你 GitHub
的登录密码,而是需要生成一个 access tokens
- 生成
access token
需要在 GitHub
个人设置页 -> Settings -> Developer Settings -> Personal access tokens 中创建一个 token
- Generate new token 生成新的
token
设置 token
的有效期 按需设置,访问权限等
选择要授予令牌token的范围或权限
要使用token从命令行访问仓库,请选择repo
- 要使用token从命令行删除仓库,请选择delete_repo
其他根据需要进行勾选
点击
Generate token
生成token
ghp_VcqgAmF...ZPJ2IGxu0
【注】:记得把这个
token
保存下来,因为下次再刷新这个页面的时候,你会看不到了
- 在命令行输入完
token
密码
1 | Username for 'https://github.com': BboyZJ |
由上面看代表上传成功了
- 打开浏览器 https://github.com/BboyZJ/ZJWeakProxy ,就可以看到你的pod库已经push上去了
打 tag
至此,我们已经成功将本地的仓库关联并推送到远程仓库,现在我们需要发布一个可用的组件
- 首先我们要给当前项目打一个
tag
版本号,在podspec
中:
1 | s.version = '0.1.0' |
- 指定的版本号是
0.1.0
,那么我们就同样打个0.1.0
的tag
1 | // 打 tag |
- 打
tag
默认在当前分支上,这里只有master
,所以不用切换分支
验证podspec文件
- 我们创建的项目以及标签版本号都是沿用了
podspec
文件中的信息,因此可以直接验证podspec
文件信息是否可以通过验证,podspec
文件的版本号一定要和tag
保持一致
1 | // 同时验证本地仓库和远程仓库 |
【报错】:fatal: unable to access ‘https://github.com/BboyZJ/ZJFPSMonitor.git/ ‘: Empty reply from server
解决办法:
1 | mac@bogon ZJFPSMonitor % git config --global http.version HTTP/1.1 |
- 如果通过验证,那么你会看到类似下面的提示,绿色的
passed validation
提交到 cocoapods
- 首先要通过
trunk
注册生成一条会话:
1 | // pod trunk register 邮箱 用户名 描述 |
然后 去邮箱进行验证
,验证成功会出现下面页面:
- 现在,就可以将
podspec
提交给CocoaPods
了。这个文件将是别人搜索你的组件的索引。
1 | mac@bogon ZJWeakProxy % pod trunk push ZJWeakProxy.podspec --allow-warnings |
提交成功的结果:
- pod search 组件名
上传完成之后,接可以通过 pod search ZJWeakProxy
搜索到自己的组件了
如果搜索不到
- 移除本地缓存的索引文件,命令 :
1 | mac@bogon ZJWeakProxy % rm ~/Library/Caches/CocoaPods/search_index.json |
- 更新本地库到最新,命令行:
1 | mac@bogon ZJWeakProxy % pod repo update |
- 重新
pod search ZJWeakProxy
产生新的搜索文件,发布新版本则需要打新的tag
,重新编辑podspec
文件,然后再次提交给CocoaPods
。
集成到宿主工程
经过上面的操作我们已经完成了组件的创建和发布,也支持了 Cocoapods 的集成。现在我们需要将该组件集成到宿主工程中去,使用方式和集成三方库是一样的。
- 新建个带
pod
的项目Demo
,把我们做好的ZJWeakProxy
加入podfile
文件
1 | # Uncomment the next line to define a global platform for your project |
- 执行 pod install
mac@bogon ZJWeakProxy-Demo % pod install
【问题1】安装报错:[!] Unable to find a specification for ZJWeakProxy
解决办法:
mac@bogon ZJWeakProxy-Demo % pod install --repo-update
【问题2】:HTTP/2 stream 1 was not closed cleanly before end of the underlying stream
解决办法:更改默认通信协议
mac@bogon ZJWeakProxy-Demo % git config --global http.version HTTP/1.1
【问题3】:
解决办法:repo源文件过期了,使用下面的方法更新repo源
1 | mac@bogon Example % pod repo update |
- 引入头文件并打印结果
版本更新与维护
现在的
ZJWeakProxy
库已经在GitHub上托管了,以后维护这个项目就可以了(开始本地创建的ZJWeakProxy项目就可以删除了),管理GitHub仓库,有两种方案:可以使用命令行
git clone https://github.com/BboyZJ/ZJWeakProxy
也可以使用 GitHub Desktop
- 下载 GitHub Desktop 登录你的用户名和密码,
File -> Responsitory
- 下载 GitHub Desktop 登录你的用户名和密码,
其实
GitHub Desktop
更加可视化一些,上面History就是刚才git命令行的记录
总结
终于写完了,哇哦😮!
- Post title:OC组件化06:【方案二】cocoapods组件化
- Post author:张建
- Create time:2023-03-04 23:30:55
- Post link:https://redefine.ohevan.com/2023/03/04/OC组件化/OC组件化06:【方案二】cocoapods组件化/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.