废话不多说,直接开整。
1、准备源码
首先,想要制作一个依赖库,肯定要有足够的技术支持,也就是说源代码,不管源码来源自哪里,肯定是要保证它的正确性,做好必要的测试工作。我的源码准备好了,把输入的字符串经过处理再输出,一个类方法(需要超强的技术功底)
。
2、创建本地仓库
- 1、打开终端,然后……什么?不知道终端是啥?看图。
- 2、在Mac的桌面创建本地仓库的文件夹
(也可以创建到其他路径下)
,在终端输入以下命令:
cd Desktop
#LYKit是我的命名,这个命名任意起就好
pod lib create LYKit
输入完之后,终端会显示出几个关键性的问题,根据题目作答,如下图:
答完题就会自动创建一系列的文件,并打开创建完成的项目,这个项目的窗口弹出来的时候是不是吓一跳?,哦没有就好,项目结构如下图:
先不用管这个,直接最小化,然后在桌面找到刚刚创建的文件夹,双击打开,看到如下图显示的结构:
什么?你的目录中没有显示那几个灰色的文件(.git等)
?别慌!低头看键盘,左手的食指和无名指分别按住command
键和Shift
键,右手的食指按一下.
,好了,抬头再看你的目录,一样了吧,到这里,本地仓库创建完成。
3、本地仓库安装CocoaPods
哦?你还没安装
CocoaPods
?看这里☞:付费商家的引流入口
- 1、继续在终端输入命令,直接cd到本地仓库目录中
Example
的文件下,并安装CocoaPods,终端命令如下:
cd /Users/不告诉你我的管理员名字/Desktop/LYKit/Example
pod install
安装完成的终端显示如下图:
2、为了验证正确性,打开项目
building
一下看看,不报错就代表可以继续进行了,报错的话就自己解决一下,根据错误信息解决问题这个是很科学的。3、把第一步中准备好的源码,复制到下图显示的文件中
- 4、配置本地仓库支持的
CocoaPods
文件,怎么配置?看下图:
就是配置图中选中的.podspec
文件,是不是发现双击不能打开这个文件?别慌,直接右键 — 打开方式 — 其他 — Xcode — 打开。
打开之后的初始页面是这样的
这个配置文件的参数需要注意一下
name:不用改,用默认的
version:依赖库的版本号
summary:依赖库的简介,注意这个简介不能比description
的内容长,不然为啥叫简介呢?
description:依赖库的描述说明,比如说咋用啊,应该是啥样的姿势啊都可以写在这里的
homepage:依赖库的介绍页的地址,随便放,没要求
license:不用改,用默认的
author:作者信息,可以改也可以不改
source:依赖库在git
上的地址,不能写错,写了不行的奥
deployment_target:依赖库支持的最低iOS系统版本
source_files:不用改,用默认的
resource_bundles:依赖库如果用到icon的话,素材存放的位置
frameworks:用到的系统框架
dependency:用到的第三方的依赖库,用到多个的话就写多个,不能像frameworks
那样写,要分开写,一行一行的
到这里,就需要创建远端仓库了。
4、创建远端仓库
- 1、为了避免一些不可描述的问题发生,强烈建议远端仓库的名字和本地仓库的名字一致
远端仓库创建完成就是下图的样子
- 2、复制远端仓库的地址,我这里用的https格式
- 3、继续配置
.podspec
文件,配置完成保存,然后update
一下就好了,终端命令如下:
pod update --no-repo-update
执行完命令发现报错了!!What mother fucker WHY
重点是最后这句:but they required a higher minimum deployment target
,翻译成普通话就是支持的最低系统版本太低了。调整一下就完了呗,回头看一下,我这里.podspec
文件中的s.ios.deployment_target
写的是9.0,嗯可以,继续看,发现两处不同的,如下图:
这两地方好像创建完成之后没有改过的?不管了,全都改成9.0,然后再执行命令pod update --no-repo-update
,成功了✌️
- 4、好,现在看下本地项目,呦西……源码添加进来了,可以测试一波试试效果了。
- 5、如下图,找到
LYViewController
文件,导入依赖库的头文件,调用依赖库的方法测试一下
测试结果:正常,下图图中有惊喜
- 6、源码没有问题了,现在验证一下
.podspec
文件的配置有没有问题吧,现在终端的路径需要回到本地仓库的路径下了。然后执行如下命令:
pod lib lint
执行完命令发现又报错了!!What mother fucker WHY
看图中那个WARN
,说The summary is not meaningful
,嗯??没意义?啥叫有意义?破B事儿还挺多的……
改配置文件吧,为了有意义,顺便把description
也给改一下,然后保存。
保存之后再回到Example
目录下执行命令pod update --no-repo-update
,
然后再回到本地仓库的路径下执行命令pod lib lint
。
看到显示了passed validation
的字眼就表示配置文件也验证成功了,现在就可以把依赖库上传到Git
了。
- 7、继续在本地仓库目录下执行命令,把依赖库上传到
Git
需要给依赖库打上tag
标签,相当于标记版本号。
第一步,添加远端仓库的地址,命令如下:
git remote add origin 远端仓库地址
第二步,把所有修改过的文件添加到缓存区
git add .
第三步,提交变动记录
git commit -m "submit files first"
到这里,前三步都没问题,终端显示如下:
第四步,遵循先拉后推的原则,先拉一下远端仓库的代码
git pull origin master
发现问题了
这里说不给合并,意思就是有冲突了,说两个master不相关,不能合并,开玩笑,经过Search
一番之后,找到答案,直接执行命令git pull origin master --allow-unrelated-histories
,意思就是霸王硬上弓,强制合并。
第五步,推送代码到远端仓库
git push origin master
又报错!!
在这里找到答案,直接执行命令git push --force 远端仓库地址
,还是霸王硬上弓,强行覆盖。
第六步,给依赖库打上tag
标签,注意,这个标签的版本号一定要和.podspec
文件中的version一致
git tag 0.0.1
第七步,将tag
标签推送到远端仓库,版本号同样和.podspec
文件中的version一致
git push origin 0.0.1
好,第六步和第七步整的挺好,没报错了,终端显示如下:
到这里,刷新一下远端仓库看看,代码全都提交上去了
- 8、这就完了吗?很显然还没有捏,到这里,本地仓库和远端仓库都创建完成并且验证完成了,想要支持
CocoaPods
安装,还必须要一个管理仓库,也叫索引库。索引库和仓库一样也是需要两个,一个本地的一个远端的。
5、创建远端索引库
- 1、创建远端索引库的方式和创建远端仓库的方式一样,如下图:
远端索引库创建完成就是下图的样子
- 2、远端索引库的地址,我这里用的https格式
6、创建本地索引库
- 1、创建本地索引库,需要终端回到根目录,或者退出终端重新打开,还需要远端索引库的地址,因为需要把远端索引库和本地索引库关联起来,这就是需要先创建远端索引库,再创建本地索引库的原因,为了避免一些不可描述的问题发生,还是强烈建议本地索引库的名字和远端索引库的名字一致,然后执行如下命令:
pod repo add 本地索引库名字 远端索引库的地址
创建完成的终端显示如下图:
- 2、为了验证是否创建成功,可以直接在终端输入命令查看创建结果,终端命令如下:
pod repo
执行完成终端显示如下图:
- 3、到这里,准备工作都做完了,需要把
.podspec
文件推送到远端索引库进行绑定操作,终端需要回到本地仓库所在的目录下,再执行命令,终端命令如下:
pod repo push 索引库名字 LYKit.podspec
执行完成的终端显示如下:
- 4、回到远端索引库刷新看下是否提交成功,提交成功页面如下:
7、验证依赖库
- 1、创建一个测试demo,用
CocoaPods
引入我们的依赖库,如下图:
然后看到终端显示如下:
嗯??怎么版本号是1.1.1
?看下Pod文件,显示如下:
这是什么鬼呢?为啥是这个鸟样子的?难道我的依赖库没有发布成功的吗?用命令pod search LYKit
搜索一下看看
巧了啊,这哥们的依赖库也是这个名字,那咋办?我要引入的是我自己的依赖库,但是名字和这个哥们的重名了,难道要我换个名字?很显然不可能的。但是话说为啥同样的名字能搜到他的这个依赖库,搜不到我自己的?难道是因为他先发布的?
- 2、现在直接按键盘上的
q
键退出终端的搜索页面,再回到测试demo里,在Pod文件中修改如下:
直接指定仓库地址,像上图中修改的样子,再重新install
一次
这时候看到版本号从1.1.1
变成了0.0.1
了,再回到demo中看下
好了,成功引入了自己的依赖库,测试一下看看,
测试结果:正常
- 3、到这里,制作的支持
CocoaPods
的依赖库就做好了。 - 4、那么要是依赖库内容有更新咋办呢?
8、依赖库源码更新
- 1、打开依赖库的源码,修改源码。可以直接按照下图打开源码进行修改,也可以把测试好的源码重新导入到
Classes
文件下。
- 2、源码修改完成,对应修改
.podspec
文件中的version号,然后终端cd到本地仓库目录下的Example
目录下,然后再执行命令pod update --no-repo-update
,终端显示如下:
看到版本号从0.0.1
更新到了0.0.2
了,到这里,还是有必要对本地仓库进行一次验证,终端回到本地仓库的路径下执行命令pod lib lint
有显示passed validation
,并且版本号也是0.0.2
,表示验证通过,源码的修改也生效了。
- 3、接下来一系列的操作,保存、提交、拉取、推送、打标签、推送标签,整个流程没报错,执行完成的终端显示如下:
刷新一下远端仓库看提交上去没有
有了,最新的标签也提交上去了
- 4、把
.podspec
文件推送到远端索引库进行绑定,还是在本地仓库所在的目录下,终端执行命令pod repo push 索引库名字 LYKit.podspec
,终端显示如下:
- 5、看下远端索引库是否提交成功,成功页面如下:
- 6、终端回到测试demo的目录下,
update
一次依赖库代码看看
看到没?版本号从0.0.1
更新到了0.0.2
了,在看Pod文件下的代码
源码中最新添加的方法也有了,测试下
一切都是那么的自然,完成。
- 4、那么如果换了电脑,怎么继续维护这个依赖库呢?同样的道理,从远端仓库把代码拉取到电脑,然后创建本地索引库和远端索引库关联,在本地仓库进行了一系列的操作后,记得先
push
代码到远端仓库保存代码,然后把最新的变动打上tag
并推送到远端索引库,再把.pospec
推送到远端索引库就ok了。
9、总结
从头撸到尾,做个最终总结
(纯属个人理解)
。
制作一个支持CocoaPods
依赖库共需要四个仓库:
远端仓库
本地仓库
远端索引库
本地索引库其中本地仓库用来测试及调整源码,远端仓库用来保存本地仓库的所有文件,远端索引库用来支持
CocoaPods
安装,本地索引库用来和远端索引库进行绑定,并把本地仓库的.podspec
文件推送到远端索引库。
源码的每次变动都必须要打tag
标签,并且推送tag
的时候必须和.podspec
文件中的version一致。
只要远端仓库和远端索引库存在,可以随时随地维护自己的依赖库。
步骤总结
1、创建本地代码库:pod lib create 仓库名
2、创建远端代码库,拿到远端代码库git地址,回到本地代码库目录下打开.podspec文件替换掉source地址和homepage地址,修改summary内容
3、cd到Example目录下,更新本地代码库:pod update --no-repo-update(此步骤可跳过)
4、cd到本地代码库目录下,验证:pod lib lint --allow-warnings
5、将本地代码库推送到远端代码库并打标签(tag标签版本号和.podspec中版本号一致)
git remote add origin 远端代码库git地址
git add .
git commit -m 'commit'
git pull origin master(新仓库推送代码,此步骤可跳过)
git push --force 远端代码库git地址(强制推送合并代码)
git tag 0.0.1
git push origin 0.0.1
6、创建远端索引库
7、重新打开终端或cd ~,创建本地索引库:pod repo add 本地索引库名 远端索引库git地址
8、验证本地索引库:pod repo(或直接查看本地索引库是否创建成功:~/.cocoapods/repos)
9、cd到本地代码库目录,将本地代码库的.podspec文件和索引库邦的:pod repo push 索引库名 本地代码库.podspec --allow-warnings
10、在Demo项目中,pod引入组件库
指定分支:pod '代码库名', :git => '代码库git地址', :branch => 'master'
指定commit:pod '代码库名', :git => '代码库git地址', :commit => '******'
可将代码库本地引入,修改代码库中源码:clone代码库到Demo项目同级目录,podfile文件改为:pod '代码库名', :path => '../代码库名'
11、创建远端代码库和索引库时,保证仓库中有文件存在,避免push不成功