iOS如何将自己的SDK上传到CocoaPods?
开篇
作为一名iOS开发者,一定用过CocoaPods吧?如果没有用过,可以查看CocoaPods官网。
CocoaPods是一款用来帮助我们管理第三方依赖库的工具。它可以解决库与库之间的依赖关系,下载库中源代码,同时通过创建一个.xcworkspace文件来将这些第三方依赖库和我们的工程连接起来,供我们开发使用。其目的是让我们能够更直观、集中地管理第三方库。
那么问题来了,我们自己也有一系列的小工具类,怎么让它也支持pod集成进而方便自己和他人在项目中更方便的使用呢?相信大家每次进行新项目开发,肯定都会把自己积累的一些代码、小工具类copy到新项目中,这样不但做了大量的重复工作,有时还要修改一些错误,会有诸多不便。
因此写这篇文章,介绍一下如何将这些代码添加到CocoaPods中。由于在创建的过程中,遇到了许多坑,这篇文章希望可以让后来者少走一些弯路。
一. 准备工作
1.申请GitHub账号(如果已有账号,可以忽略该步骤)
GitHub官网 具体申请流程这里就不说了,可以根据提示完成注册 (ps:完成注册之后GitHub会发送验证邮件到你的邮箱,先验证一下)
2. 创建GitHub仓库
(1)登录成功之后,右上角自己的头像下方,选择“New repository”,如图1-2-1
![](https://img.haomeiwen.com/i3014057/d3011c0e5815ed44.png)
(2)创建新仓库,如图1-2-2
![](https://img.haomeiwen.com/i3014057/773d369aed2c79ac.png)
说明:LICENSE文件,开源协议,建议选择。会自动生成一个格式是 MIT的文本文件,里面有开发者名字和年份。当然也可以不选择,copy别人工程里的LICENSE文件到自己的工程中(ps:顺便修改一下里面的年份和作者信息)。如果没有LICENSE文件,在后续验证.podspec文件的时候,会出现警告。.podspec文件在下文会详细介绍。
(4)创建完成之后,如果没什么问题的话,GitHub仓库里面有LICENSE文件。
3. 将本地项目上传到GitHub仓库
(1)cd到本地根项目下,创建README文件
$ vim README.md
说明:README文件内容,可以写项目名,项目简介,项目开发者信息等等。
(2)初始化本地Git仓库
$ git init
(3)添加所有文件到本地仓库(add空格.)
$ git add .
(4)将添加的文件commit到本地
$ git commit -m "first commit"
说明:如果commit成功,会出现如下界面,如图1-3-4
![](https://img.haomeiwen.com/i3014057/048a8ad8f5e35d73.png)
(5)将本地的仓库关联到github上
$ git remote add origin https://github.com/ZhaoBinHua/ZBHDataManager.git
说明:https网址修改成你自己的github仓库网址
(6)将本地代码上传到github上之前,先pull一下(建议每次上传时都要pull一下)
$ git pull origin master
$ git push origin master
说明:在push的时候如果出现这样的错误,如图1-3-6
![](https://img.haomeiwen.com/i3014057/e2c7eda609bc3a03.png)
出现这个错误的只要原因是github上的LICENSE文件不在本地代码目录中。
(7)将github上文件pull到本地(该操作是合并文件)
$ git pull --rebase origin master
(8)最后,再将代码push到github上
$ git push -u origin master
说明:期间会有输入username和password提示,按步骤填写即可。如果成功,则会出现如图1-3-8所示
![](https://img.haomeiwen.com/i3014057/88dc8e5f47ea9f35.png)
(9)之后在github仓库里面会有添加的本地文件,如图1-3-9
![](https://img.haomeiwen.com/i3014057/9e32129d4880c663.png)
讲到这里,所有的准备工作就已经完成。
二. 创建podspec文件流程
1. 注册trunk账号
(1)在注册trunk之前,通过 pod --version 查看当前的CocoaPods版本是否足够新。trunk需要pod在0.33及以上版本,如果版本太低,需要升级版本,执行以下命令:
$ sudo gem install cocoapods
(2)等待升级完成之后,执行注册操作:
$ pod trunk register zbh1019@163.com 'zhaobinhua' --description='imac' --verbose
说明:需要替换成你自己的邮箱和名字,--description是简介,加不加都可以,加上 --verbose 可以看到详细信息。如果顺利的话你会收到一份邮件,需要点击验证。
(3)查看自己的注册信息,如图2-1-3:
$ pod trunk me
![](https://img.haomeiwen.com/i3014057/6c981991d5d44998.png)
附:如果你的pod是由多人维护的,你也可以添加其他维护者
$ pod trunk add-owner zhangsan123 zhangsan123@163.com
2.配置podspec文件
(1)添加podspec文件
cd 到工程目录下,添加podspec文件
$ pod spec create ZBHDataManager
之后会出现以下界面,你会发现本地文件目录下多了一个.podspec文件,如图2-2-1
![](https://img.haomeiwen.com/i3014057/606d87d2b05b0e3a.png)
说明:该.podspec文件是自动生成的,里面有一些文件规范,可以根据里面的注释填写,下文会详细介绍到。
(2)podspec文件讲解
![](https://img.haomeiwen.com/i3014057/52fb295f6839ccf4.png)
![](https://img.haomeiwen.com/i3014057/ac02ce83a36f0647.png)
![](https://img.haomeiwen.com/i3014057/2f534523d54c3c32.png)
说明:以上就是.podspec文件的解释,podspec文件是开发整个SDK的关键性文件,里面有一些不常用的属性只是做了简单介绍,如果有兴趣的小伙伴,可以深入研究,一起探讨。
(3)验证.podspec文件的正确性
$ pod lib lint --verbose --allow-warnings
说明:① pod lib lint是利用脚本执行代码文件,--verbose是查看详细执行过程,--allow-warnings是允许warn出现。
② 此处可以根据提示信息修改podspec文件配置,由于情况比较多,此处就不一一给大家介绍了,错误大多数出现在分组形式的依赖关系错误,所以在xcode工程里引用头文件尤其注意,组与组之间切记不可相互引用,否则在验证podspec文件时报错。
③ 如果不是分组情况,应该没什么问题,无非是引入文件夹时,文件夹没有响应的文件。
注意:建议大家在每次修改完.podspec文件之后执行上面命令,这样有利于Code Review,什么是Code Review?
(4)验证成功之后,提交code到git仓库中,打上tag版本号并上传。
$ git tag -a 0.0.1 -m "update tag is v0.0.1"
$ git push origin 0.0.1
如果上传成功,则出现如图2-2-4所示
![](https://img.haomeiwen.com/i3014057/c2fee423211fc409.png)
注意:先提交再打tag
(5)通过trunk推送podspec文件
$ pod trunk push ZBHDataManager.podspec
这个过程比较耗时,休息一下,喝口茶...
![](https://img.haomeiwen.com/i3014057/a51b4c959f79d243.png)
如果出现上图所示信息,那么,恭喜你,你完成了一个CocoaPods私有库的提交,别人可以在Podfile里面使用这个私有库了。
3. 搜索私有库
$ pod search ZBHDataManager
搜索过程比较耗时,耐心等待...坚持就是胜利。
如果搜索成功,会出现如图2-3-1所示
![](https://img.haomeiwen.com/i3014057/5e04b045e626b8b9.png)
如果搜索失败,请移步 pod search 搜索类库失败的解决办法
-> [!] Unable to find a pod with name, author, summary, or description matching `ZBHDataManager`
三. 导入到测试Demo中
(1)在测试Demo的PodFile文件引用ZBHDataManager
$ pod 'ZBHDataManager', :git => 'https://github.com/ZhaoBinHua/ZBHDataManager.git'
如图3-1-1所示
![](https://img.haomeiwen.com/i3014057/088d4801a2553690.png)
保存,执行 pod install 之后,如图3-1-2
![](https://img.haomeiwen.com/i3014057/f2a903f6f04f6f72.png)
pod会把私有库所依赖的其他三方库也一并下载下来。另附 测试Demo(此处直接下载)
另外,在写文件名、Category方法名、利用typedef修饰的属性名的时候,尽量加上前缀,避免不必要的错误。
如果大家哪一步出现了问题,也可以及时联系我(zbh1019@163.com),相互学习,共同进步。
具体代码可查看文章附录。
附:文章中所出现的技术链接整理
1. 什么是Code Review?