现在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
5git 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
4gem sources -l
*** CURRENT SOURCES ***
http://ruby.taobao.org/
说明之前我替换过,若没有更改过gem source应该结果为1
2
3
4gem 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
3platform :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周报,欢迎关注或订阅
刚刚在线工作室,欢迎关注或提出建设性意见!
刚刚在线论坛, 欢迎踊跃提问或解答!
如有转载,请注明出处,谢谢!