前言
在项目的开发过程中我们经常会使用到很多的第三方框架,通过CocoaPods我们可以非常容易的去管理这些第三方库,至于CocoaPods如何使用,这不是我们今天讨论的重点,这里我就不再赘述了,不太明白的小伙伴们可以参考这篇文章:用CocoaPods做iOS程序的依赖管理
今天我们讨论的重点是如何将属于我们自己写的组件或者是库开源出去,用户通过一句 pod install 就可以集成我们写的框架呢? 不着急,下面我将带领大家一步步的将属于自己的pods发布到CocoaPods中,下面我就简单的以一个小Demo来做演示
工作原理
从网上看到一张特别好的图 这里就直接拿过来用了
一.上传项目到代码托管平台
首先我们需要在第三方代码托管平台上创建一个属于我们自己的Repository,假如名称为GZPCode,创建好之后将我们的库上传到github上,并且打上tag,这个非常重要。将tag push到github上之后我们就可以在release 文件中看到一个0.1.0的版本了,注意这里一定要先将我们的库commit 之后在打tag,否则的话会出问题
二.注册trunk
如果不知道我们曾经有没有注册过trunk,那么可以使用下面的命令向trunk服务器查询自己的注册信息:
pod trunk me
否则我们可以通过下面的命令去注册trunk:
pod trunk register zswangzp@163.com 'gzp' --verbose
大家在注册的时候需要将邮箱和用户名替换成自己的即可,--verbose参数是为了便于输出在注册过程中的调试信息。执行上面的语句后,你的邮箱将会受到一封带有验证链接的邮件,如果没有请去垃圾箱找找,有可能被屏蔽了。点击邮件的链接就完成了trunk注册流程。
点击邮箱中的链接则会跳转到下图所示的界面,表明已经注册成功了
三.配置PodSpec,并且推送到CocoaPods服务器
1、添加podspec描述文件
首先在我们框架的同级目录下创建一个名称为 GZPCode 的PodSpec的文件,代码如下
pod spec create GZPCode
至于pod spec文件,它是用来描述我们的框架的一些具体信息的,比如框架的作者、版本、下载地址等信息。我们在 pod install 安装第三方框架的时候就是根据这个文件中的下载地址去Clone 具体代码的。通过上面这个命令我们就创建了一个GZPCode.podspec 文件,用XCode 打开这个文件 我们可以看到它里面有非常多的信息,这里我们讲解几个必要的:
Pod::Spec.new do |s|
s.name = "GZPCode" #项目名称
s.version = "0.1.0" #项目版本
s.summary = "GZPCode. 框架的简单描述" #框架的简单描述
s.description = <<-DESC
框架的具体描述,这里的信息要长一些不然会报错的。。。。。。。。。。
DESC
s.homepage = "https://github.com/Guanzhangpeng/GZPCode" #该框架在github上的主页地址
s.license = "MIT" #协议
s.author = { "gzp" => "zswangzp@163.com" } #作者
s.platform = :ios, "8.0" #最低适配的版本
s.source = { :git => "https://github.com/Guanzhangpeng/GZPCode.git", :tag => "#{s.version}" } #源代码的具体地址
s.source_files = "Classes", "Category/**/*.{h,m}" #框架相对于spec文件的路径
s.exclude_files = "Classes/Exclude"
s.requires_arc = true #支持arc
end
2、将podspec文件通过trunk推送给CocoaPods服务器
相信上面的注释已经写的很详细了,编辑完podspec文件后,需要验证一下这个文件是否可用,如果有任何WARNING或者ERROR都是不可以通过的,它就不能被添加到Spec Repo中,不过是可以存在的,当然我们也可以通过 --allow-warnings 来屏蔽警告
pod spec lint GZPCode.podspec
当看到 GZPCode.podspec passed validation. 之后 就表明已经验证通过了,那么接下来我们就可以通过trunk推送pod spec文件到CocoaPod官方库中了. CocoaPods/Specs代码库的地址是:https://github.com/CocoaPods/Specs
pod trunk push GZPCode.podspec
上面的代码帮我们做了下面几件事情:
1、验证你的podspec文件是否合法。在trunk方式之前我们一般用“pod lib lint”命令进行验证。
2、上传podspec文件到trunk服务器(其实最终也会自动添加到https://github.com/CocoaPods/Specs中,只是使用trunk方式省去了以前先fork在pull request的繁琐操作)
3、将你上传的podspec文件转成json格式文件
执行上面的push操作,就相当于你把你的源代码提交给CocoaPods团队审核了,一般需要几秒钟或者几分钟就可以完成了。当我们看到下面这个界面就表示我们的GZPCode.podspec 文件已经成功的上传到了CocoaPod官方库中了。
四.更新本地pod索引库
经过上面的步骤后我们已经成功的将spec文件上传到了CocoaPod官方库中了,但是我们本地的pod索引库还不是最新的,所以这个时候我们需要通过 pod setup 将远程的CocoaPods 索引库更新到我们本地。pod setup其实在做这么一件事:Cocoapods在将https://github.com/CocoaPods/Specs 的信息下载到你电脑的~/.cocoapods目录下并进行文件比对,总数据大小大约在300MB左右,再加上服务器在国外,因此速度会比较慢。在执行过程中你也可以新开一个Terminal窗口,cd到~/.cocoapods目录,用du -sh *来查看下载进度。第一次会比较慢,第一次以后只需要几秒钟即可完成。
五.测试使用
完成上面的步骤后我们可以来测试下 看看我们的框架是否可以通过 CocoaPods来集成了,首先我们在终端上 搜索下我们的框架 pod search GZPCode,很遗憾 没有搜索到,而且给我们一个红色的提示
[!] Unable to find a pod with name, author, summary, or description matching `GZPCode`
这是因为什么原因呢?其实原因很简单,这是因为我们本地索引库的检索文件 search_index.json 缓存造成的结果,我们将索引缓存路径 ~/Library/Caches/CocoaPods/ 下的这个json文件 删除后再次搜索就可以搜索到了
是不是很神奇? 下面你就可以通过 pod的命令来集成这个框架了。
谢谢大家,欢迎讨论。