Git和Cocoapods的基本使用与进阶(二)
0
一.Cocoapods的基本使用和进阶
同样我们来简单回顾一下cocoapods的使用,关于安装的相关细节因 为我的电脑上已经装好了,在这里就不浪费时间去安装了,只有一点需要注意的是ruby的镜像淘宝的已经不再更新需要我们使用新的镜像地址,我这里给出一篇安装的详细文档,iOS安装CocoaPods详细过程可以按照文档上得步骤一步步操作就可以了。
1.使用Cocoapod安装第三方框架
好我们现在就开始演示在我们项目中安装一个AFN的框架,我记得我刚接触cocoapods的时候都是手动创建podfile文件,然后输入系统版本号,需要安装的框架名等等,现在我们可以直接使用pod init
然后pod search AFN
然后找到相应的框架复制粘贴到我们的podfile文件中
此时运行pod install安装就可以了
这里有一个注意点,我们着重来说一下,pod install 和 pod update的区别。
pod install:如果podfile.lock文件存在,直接从此文件中读取框架信息下载安装,如果不存在,依然会读取podfile文件内的框架信息,下载好之后在根据下载好的框架信息,生成podfile.lock文件。
pod update: 不管podfile.lock文件是否存在,都会读取podfile文件的框架信息去下载,下载好之后再根据下载好的框架信息,生成podfile.lock
两者的区别在于,podfile文件内的框架信息,版本描述没有指定具体版本。
开发中我们一般选择pod install而不是pod update,是为了开发中大家使用的第三方框架版本一致,如果大家需要统一升级第三方框架的话,那么每个人都使用pod update.
2.Cocoapods的图解机制
刚刚在上面讲了如何集成第三方框架到我们的项目中,我相信几乎所有人都会操作,那么我想问一下,你们知道在刚刚这个过程中发生了什么事情吗?那么我给大家图解一下Cocoapods的运行机制把。
其实所有的框架的描述信息都存在远程的索引库里面,所谓的框架描述信息我们叫做.spec文件,它里面包含了框架的名称、版本号、远程地址也就是真正存放代码的地址。
作为我们使用框架的人来说,我们在安装cocoapods的时候其中有个步骤叫做pod
setup,它会把远程索引库克隆下来在本地生成一个本地索引库,然后我们使用pod
search从我们的本地索引库里面去检索框架描述信息文件,但是描述信息文件很多,不可能遍历每个文件去比对,所以本地索引库会生成一个检索的索引文件,可以理解为一个字典,所以我们的pod
search是从这个文件里面去检索的,然后我们开始写podfile文件,我们开始使用pod
install,而它就是根据你检索到得框架信息找到真正存放代码的远程地址,再把它下载下来集成到我们的工程里面来。
所以我们想要发布一个框架,我们需要给框架加一个描述信息,上传到远程索引库里面,其他用户在setup的时候就可以把你的描述文件下载到本地索引库中,然后他就可以检索到你的框架描述信息,就可以pod install 下载到你的框架集成到他得项目中去。
接下来带着大家来对照着看看什么是远程索引库,什么是本地索引库,检索索引文件等等,它真正存在的物理形式是什么样子的。
首先我们看看远程索引仓库长什么样子,先打开我们的github,搜索cocoapods,
注意这个specs这个才是我们的远程索引仓库
我们打开这个specs文件夹看看,
这个就是我们远程索引仓库,里面就放着我们交由cocoapods管理的各个框架的描述文件
然后我们随便打开一个看一下
果然里面都是框架的描述信息,我们可以大致浏览一下,有框架名称,版本号,描述信息,作者,源码地址,标签号等等。
接下来我们说到通过pod setup的操作,将远程索引库克隆到本地索引库,所以我们看看本地索引库到底长什么样子
这里我们可以和我们的远程索引库做一个对比,我们发现本地索引库和远程索引库的文件都是一一对应的
接着我们看一下我们cocoapods的一些缓存有些什么东西
这里我们就找到了根据本地索引库生成的检索索引文件,其实就是我们使用pod search生成的json格式文件,小伙伴们有没有发现我们第一次使用pod search的时候,我们需要很长的时间等待去下载这个文件,虽然是纯文本,但是大小有10+M,所以它本身是非常庞大的。
我们接着看我们的Release文件夹下面都是我们下载好的框架,这些都是源码,其实就是缓存在本地的框架源码,所以我们再次pod install集成框架到我们的项目中非常快。
二.利用Cocoapods仓库上传第三方框架
好我们讲完cocoapods的机制之后,我们开始自己动手来创建一个cocoapod仓库和spec文件上传到远程索引库。
我们现在在本地重写构建一个代码仓库,github上面也新建一个代码仓库并且将他们关联起来。
首先我们新建一个文件夹,里面创建一个叫做Classe的文件夹
然后我们在终端中进入这个文件夹
初始化一个代码仓库
在Classes里面创建Perosn.h和Person.m文件,为了之后测试使用
我们在GitHub上面创建一个远程代码仓库,链接本地代码仓库和远程代码仓库
此时我们的本地代码仓库就成功的和我们的远程代码仓库链接好了
创建.spec文件
我们使用Xcode打开看看里面有些什么东西
这里需要注意的是,我们的tag和当前的版本号是同步的,同时我们的tag也就是和我们代码仓库的tag值对应的代码必须一一对应,但是此时我们的远程仓库其实还有没tag值,所以当我们运行上传我们spec文件的时候,它会自动校验里面的版本号和tag值对应远程仓库的tag值,就会出现警告提示,我们上传到远程索引库.spec文件的操作就会失败。
所以我们要在此之前要做的事情就是给我们的远程代码仓库添加一个相对应的tag值。
这里需要着重解释一下,s.source_files其实就是过滤一下我们从代码仓库中需要下载的文件,并不是将所有代码仓库中的文件都下载下来,现在我们现在看到的就是要下载我们Classes文件夹下面所有的.h和.m文件,其中两个**是通配符,它通配的是目录,即使创建了子目录它也能识别出来,而*代表的是文件,无论是.h还是.m文件。
大致我们能够用到的就是这些,如果同学们想要知道更加详细的其他信息代表的含义,可以去cocoapods得官网选择.spec文件去查看相应的说明。
上传.spec文件到远程索引仓库
首先我们需要在终端中注册一下trunk,pod trunk register 邮箱 ‘作者名' --verbose
出现这个提示需要我们去邮箱验证一下
此时就可以使用trunk上传我们的.spec文件到我们的远程索引库中了
+使用命令pod trunk push 框架名.podspec上传到远程索引库
出现此提示的时候说明我们的利用已经成功将我们的.spec文件上传到远程索引库当中了,意味着我们通过cocoapods发布框架已经完成了
现在我们可以使用pod search来搜索我们的框架信息了,看看我们的框架是否上传成功了
但是非常遗憾,我们使用pod search并不能找到我们的框架信息,为什么呢?其实是因为远程索引库虽然更新了,但是对应的本地索引库和其对应的检索索引文件并没有更新,所以我们需要再次使用pod steup将本地索引库更新,并且把检索索引文件删除掉
然后再次使用命令pod search 框架名来搜索我们的框架,此时可能需要等待的较长一段时间,前面我说过了,检索索引文件比较大需要花一些时间来下载,然后才能搜索到我们的框架信息
此时我们可以看到我们的上传到远程索引库的框架信息了