如何发布自己的开源框架到CocoaPods

现在iOS开发过程中Cocoapods已经用的很普遍了,可以很方便的将第三方框架加到自己的项目中。现在也有个第三方的Cocoapods的插件,下载链接:https://github.com/ChinaFishNews/cocoapods-xcode-plugin.git 安装好后是这样的

还有个管理插件的插件Alcatraz,下载地址:https://github.com/ChinaFishNews/Alcatraz.git 安装好后是这样的

通过Alcatraz可以随意安装很多插件,但是一些插件和当前的Xcode版本有时并不兼容,会导致卡慢、崩溃或者不起作用。这时候可以随意卸载

目前安装了十多个插件,包括XAlign、Activate Power Mode、VVDocumenter、MacVim等十多个插件,感觉的确更便利于开发,更重要的是,不经意间一些很高大上的效果或动作在产品、测试面前装逼基本会得到满分。

如果我们想把自己写的组件或者库,甚至一个类开源出去,让别人也可以通过Cocoapods安装我们写的框架该怎么做呢?接下来和大家演示一下如何上传到Cocoapods上。

这里以我的一个Demo为例,cd到项目根目录,创建Podspec文件,UIImageDemo为项目名

1
pod spec create UIImageDemo

打开podspec文件基本是这样的

不需要填写的可以前面加个#注掉。

需要填写的大概有这几项
s.name ,是库的名称

s.version是库源代码版本号,项目提交到github上时需要给项目加个标签,这个标签要和这个 version一致,注意,版本号前面不需要加v

用到的命令是

1
2
3
4
5
git add .
git commit -m"test"
git tag
git push --tags
git push origin master

s.summary是对库的简要概述

s.homepage是库的主页,我在这里填写的是github的链接(https://github.com/ChinaFishNews/UIImageDemo.git)

s.license是许可文件,这里填”MIT”

s.author是库的作者

s.platform是库所支持的软件平台

s.source是声明原代码的地址,我这里也是填写的github链接,tag和上述的version要一致

s.source_files,声明了库中源代码的位置,前面的Classes可以去掉,我这里填的是”UIImageDemo/UIImageDemo/UIImageFactory.{.h,.m}”,{.h,m}匹配所有以.h和.m为扩展名的文件,我是把UIImageFactory这个类提交到Cocoapods上,项目目录如下所示

s.exclude_files 这里没有用到,注掉就好

s.framework是依赖的核心库,我这只用了UIKit,如果有用到其他的库,可以用s.frameworks = @”aaa.framework”,@”bbb.framework”

s.dependency是填写依赖的库,没有的话注释掉就好。

填写完后,保存退出,需要验证这个文件是否可用,有任何的warning或者errror都不可以,验证命令:

1
pod spec lint UIImageDemo.podspec

UIImageDemo换成你们自己的名字。我在这里尝试了多次都是失败,如下图所示

这个错是因为cocoapods不是最新版本,需更新到最新版本,如下图所示

步骤如下,先输入下面命令

1
gem sources -l

结果若为

1
2
3
4
gem sources -l
*** CURRENT SOURCES ***

http://ruby.taobao.org/

说明之前我替换过,若没有更改过gem source应该结果为

1
2
3
4
gem sources -l
*** CURRENT SOURCES ***

https://rubygems.org/

或者

1
2
3
4
$ gem sources -l
*** CURRENT SOURCES ***

http://rubygems.org/

现在淘宝ruby的源现在改成https的了,更换操作如下

移除操作(移除当前你查询到的gem source)

1
gem sources --remove http://ruby.taobao.org/

执行结果为

1
http://ruby.taobao.org/ removed from sources

添加操作

1
gem sources -a https://ruby.taobao.org/

执行结果为

1
https://ruby.taobao.org/ added to sources

再查询

1
gem sources -l

结果已经发生变化

1
2
3
*** CURRENT SOURCES ***

https://ruby.taobao.org/

然后更新

1
sudo gem install cocoapods

更新完毕,再次验证,没有错误,但是有个警告

1
pod spec lint UIImageDemo.podspec

这个警告是说没有找到许可文件,我随便从其他第三方库中找到了这个License文件导入到项目目录中

再次验证,UIImageDemo.podspec passed validation 终于验证通过

如果把它作为私有库来使用,可以使用pod 'ProjectName',:git=>"http://xxx.git"(把xxx替换为库的git地址)。这时候可以把podspec文件放到自己本机中,目录为~/.cocoapods/repos/master/Specs。

这时候并没有UIImagDemo文件夹,需要自己创建,也没有json文件,这是之后传到Cocoapods trunk之后才生成的文件。然后搜索这个库就已经有了

但是这个时候别人并不能通过Cocoapod搜索到这个库。2014年5月20日,CocoaPods不再接受向CocoaPods/Specs的pull request,官方的说法是为了安全考虑,防止每个人的pod被其他人修改,于是CocoaPods团队开发了trunk服务,这样每个人都是其发布的pod的owner,没有权限的人无法修改,这样更安全。在cocoapods使用了trunk服务后,这需要0.33以上的版本,可以通过pod –version查看当前版本,上文已讲如何更新cocoapods到最新版本。使用步骤如下

注册Trunk
1
pod trunk register your_email 'your_name' --description='macbook pro'

改成自己对应的邮箱和名字即可,会收到一封邮件,点击邮件链接验证,然后
可使用pod trunk me查看信息

如果项目是多人维护,可以添加其他维护者`pod trunk add-owner her_name her_email,不过我并没有尝试。

最后在工程根目录下执行pod trunk push命令。pod trunk push 命令会首先验证本地的podspec文件(是否有错误),之后会上传spec文件到trunk,最后会将你上传的podspec文件转换为需要的json文件。

如图,即上传成功了,整个过程就结束了。以后有新版本只需要修改工程根目录下的podspec文件就行了,然后重新执行pod trunk push命令。这时候别人就可以通过cocoapods使用你的库了。

新建一个项目,创建podfile文件,

1
2
3
platform :ios, "8.0"

pod 'UIImageDemo'

这时候使用pod install --verbose --no-repo-update并不会成功,因为这个命令 不会更新本地仓库,需要使用pod install才可以,下载到本地之后以后再次使用就可以使用`pod install --verbose --no-repo-update命令了。

如果想删除已经上传到Cocoapods上的库,只需前往/Users/xinwen/.cocoapods/repos/master/Specs 目录下找到对应名字的文件夹删除即可。我只是删除本地对应文件,但是pod search就搜索不到了,看来这应该是本地搜索。但是pod install 也安装不了,有些奇怪。在别人的电脑上,这个库对应的文件还在,还是可以继续使用,这时候如果不想别人继续使用,只能去github上把对应的源删了。关于删除这一点还有些许疑惑,后续有时间再留意下!

整个流程如下

  • 上传至github时,给项目打个tag

  • 到项目根目录创建podspec文件 命令:pod spec create name

  • 验证podsepc文件 命令:pod spec lint name.podspec

  • 注册pod trunk 命令:pod trunk register your_email 'your_name' --description='macbook pro

  • 发布到pod trunk 命令: pod trunk push

  • 更新pod库 命令:pod setup 如果pod trunk push成功后无法pod search到自己的库,需要执行该命令。

以上,流程参考了网上的一篇上传HUPhotoBrowser的文章,过程中遇到不少问题,但是也的确很受帮助,感谢!

还是得感慨一下,这写博客的时间比我自己操作的时间还要长,心塞!


如有任何疑问或问题请联系我:fishnewsdream@gmail.com,欢迎交流,共同提高!

Objective-C/Swift技术开发交流群201556264,讨论何种技术并不受限,欢迎各位大牛百家争鸣!

微信公众号OldDriverWeekly,欢迎关注并提出宝贵意见

老司机iOS周报,欢迎关注或订阅

刚刚在线工作室,欢迎关注或提出建设性意见!

刚刚在线论坛, 欢迎踊跃提问或解答!

如有转载,请注明出处,谢谢!

本站总访问量 本文总阅读量