上一文章讲解了如何创建本地私有库,本文讲解,如何上传私有库至远程; 使用github来管理远程私有库;
创建远程仓库
1、新建远程仓库
远程仓库创建完毕,根据github的提示,上传本地项目即可。
因为我本地使用的是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、上传成功
使用远程链接
在上篇文章中,链接到主工程,使用的是本地链接的模式;
但是,更多时候,我们都是使用远程链接模式的,所以,这里讲讲如何远程链接;
当我们把私有库上传github后,就可以直接使用远程链接的方式,接入主工程;
主要就是把Podfile文件中,私有库的下载链接,变更为远程下载地址即可;
然后重新执行 pod install即可;
远程链接完后,在项目中就显示得跟平时对接其他三方没有区别了;
但是不知道大家有没有发现,类文件没有层次感,不易于打理,所有的类都存放在QLYHomeLib文件夹中;
但我们在私有库中,明明已经将类文件按照不同的业务,拆分到了不同的文件夹内,那么为什么pod下来的私有库,却没有分层结构呢?
这就需要我们在做私有库的时候,进行配置;
文件显示层级
cocoaPods创建私有库的时候,如果私有库中的文件很多,想做到和项目中的文件夹分层,就需要在.podspec文件里面用到s.subspec 'xxx' do |ss|语句来配置。
首先我们先看看项目文件夹层级
可以看到,在Classes文件夹内,存在Header.h文件和Controllers、Models两个文件夹;
生成一个私有库后,都会存在.podspec文件,默认情况下,所有的.h .m .xib .png等文件都在Claesses文件夹里面;并没有Controllers、Models文件夹
这样并不影响我们使用,但是不易于管理,所以需要我们进行文件夹分层;
在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
上传完毕,需要在主工程,重新 update 一下这个三方库;
终端 cd 打开主工程,执行pod update xxxx命令,更新三方库;
最后我们在主工程中,就可以查看:
资源使用
可以参考这篇文章pod加载资源
切记,在私有库加入资源后,使用终端cd进入私有库的Example文件路径;执行一次pod install;
然后将私有库更新到github上;
最后,在主项目工程,更新私有库,注意哦,是更新(pod update xxx),不是直接pod install;
更新完毕,私有库在主工程内,就会出现Resources文件夹,里面存放的就是私有库需要使用的资源
如下图:
到这里,私有库的创建与上传,基本完事了;
CTMediator 组件化
一般在工程里,在一个类中,调用另一个类,需要引入头文件;如果一个类,需要调用更多的类,那就需要引入更多的头文件,并且不同的类之间,也有一些依赖关系,那么就容易造成蜘蛛网的调用模式;
如下图:
所以需要把项目按照中心化的思想去优化:
这样看,是不是每个模块之间没有任何耦合,并且结构清晰;
中心化的方式,常规的有:
方案一、url-block;
方案二、protocol-class;
方案三、target-action;
我们这里就使用target-action的方案来操作;
添加CTMediator库
在私有库podspec文件中,添加CTMediator依赖库;
使用终端cd进入私有库的Example文件路径;执行pod install,添加CTMediator三方库;
根据CTMediator的用法和项目业务分化集成组件即可;