cocoapods 组件化+私有库(二)

2,455 阅读4分钟

上一文章讲解了如何创建本地私有库,本文讲解,如何上传私有库至远程; 使用github来管理远程私有库;

cocoapods 组件化+私有库(一)

cocoapods 组件化+私有库(二)

创建远程仓库

1、新建远程仓库 iShot2022-04-03_20.08.38.jpg

iShot2022-04-03_20.11.38.jpg

远程仓库创建完毕,根据github的提示,上传本地项目即可。

iShot2022-04-03_21.32.38.jpg

因为我本地使用的是SSH,所以我直接根据SSH提示,上传项目;至于如何配置SSH,可以查看我的这篇文档 SSH 配置

如果你们用的是HTTPS的模式,那么就请百度吧😂

上传本地项目

1、使用终端,cd进入要上传的私有库路径

cd /Users/xxxxxx/QLYHomeLib
# QLYHomeLib 你要上传的私有库

2、执行命令,根据github的命令,一条一条执行即可;

git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:app-delegate/QLYHomeLib.git
git push -u origin main

3、上传成功

iShot2022-04-03_21.41.04.jpg

使用远程链接

在上篇文章中,链接到主工程,使用的是本地链接的模式;

但是,更多时候,我们都是使用远程链接模式的,所以,这里讲讲如何远程链接;

当我们把私有库上传github后,就可以直接使用远程链接的方式,接入主工程;

主要就是把Podfile文件中,私有库的下载链接,变更为远程下载地址即可;

iShot2022-04-04_06.53.13.jpg

然后重新执行 pod install即可;

远程链接完后,在项目中就显示得跟平时对接其他三方没有区别了;

iShot2022-04-04_16.42.47.jpg

但是不知道大家有没有发现,类文件没有层次感,不易于打理,所有的类都存放在QLYHomeLib文件夹中;

但我们在私有库中,明明已经将类文件按照不同的业务,拆分到了不同的文件夹内,那么为什么pod下来的私有库,却没有分层结构呢?

这就需要我们在做私有库的时候,进行配置;

文件显示层级

cocoaPods创建私有库的时候,如果私有库中的文件很多,想做到和项目中的文件夹分层,就需要在.podspec文件里面用到s.subspec 'xxx' do |ss|语句来配置。

首先我们先看看项目文件夹层级

iShot2022-04-04_17.38.45.jpg 可以看到,在Classes文件夹内,存在Header.h文件和Controllers、Models两个文件夹;

生成一个私有库后,都会存在.podspec文件,默认情况下,所有的.h .m .xib .png等文件都在Claesses文件夹里面;并没有Controllers、Models文件夹

iShot2022-04-04_17.26.25.jpg

这样并不影响我们使用,但是不易于管理,所以需要我们进行文件夹分层;

Classes文件夹下面,还有一个总领的头部文件:QLYHomeHeader.h,那么需要将s.source_files进行配置;

  s.source_files = 'QLYHomeLib/Classes/QLYHomeHeader.h'
  s.public_header_files = 'QLYHomeLib/Classes/QLYHomeHeader.h'

如果Classes文件夹下没有文件,只有文件夹;那么上面的s.source_files可以不用配置;

配置私有文件夹分层,需要将文件夹配置为 subspec的形式;

# Controllers文件夹
  s.subspec 'Controllers' do |a|
      a.source_files = 'QLYHomeLib/Classes/Controllers/*.{h,m}'
  end
# Models文件夹
  s.subspec 'Models' do |a|
      a.source_files = 'QLYHomeLib/Classes/Models/*.{h,m}'
  end

配置完成,使用终端进入私有库Example文件路径;执行一次pod install

然后将私有库更新到github上;

# 进入pod库的根目录
cd /Users/xxxx/QLYHomeLib
# 添加到缓存
$ git add .
# 提交到本地仓库
$ git commit -m "提交信息"
# 推送到远程
$ git push -u origin main

iShot2022-04-04_18.06.17.jpg

上传完毕,需要在主工程,重新 update 一下这个三方库; 终端 cd 打开主工程,执行pod update xxxx命令,更新三方库;

iShot2022-04-04_18.20.01.jpg

最后我们在主工程中,就可以查看:

iShot2022-04-04_18.21.25.jpg

资源使用

可以参考这篇文章pod加载资源

或者这篇文章

切记,在私有库加入资源后,使用终端cd进入私有库的Example文件路径;执行一次pod install

然后将私有库更新到github上;

最后,在主项目工程,更新私有库,注意哦,是更新(pod update xxx),不是直接pod install

更新完毕,私有库在主工程内,就会出现Resources文件夹,里面存放的就是私有库需要使用的资源

如下图:

iShot2022-04-05_13.21.22.jpg

到这里,私有库的创建与上传,基本完事了;

CTMediator 组件化

一般在工程里,在一个类中,调用另一个类,需要引入头文件;如果一个类,需要调用更多的类,那就需要引入更多的头文件,并且不同的类之间,也有一些依赖关系,那么就容易造成蜘蛛网的调用模式; 如下图: 1523957679974991.png

所以需要把项目按照中心化的思想去优化:

2.png

这样看,是不是每个模块之间没有任何耦合,并且结构清晰;

中心化的方式,常规的有:

方案一、url-block;

方案二、protocol-class;

方案三、target-action;

我们这里就使用target-action的方案来操作;

添加CTMediator库

在私有库podspec文件中,添加CTMediator依赖库;

iShot2022-04-08_15.17.52.jpg

使用终端cd进入私有库的Example文件路径;执行pod install,添加CTMediator三方库;

根据CTMediator的用法和项目业务分化集成组件即可;

Demo

QLYPodLib Demo