发布个人开源框架到CocoaPods——让你的项目支持CocoaPods


写在开头

近期公司项目不是特别的忙,因此最近潜下心来研究了一下如何在cocopods上传项目。
本人在学习的过程中,发现并没有一篇完整详细的介绍文章,因此总结几位同行的文章,并实际操作,学到了一点皮毛,现将自己过程中所学到的知识,以及遇到的坑分享给大家
下面,我就一步一步的操作将自己的pods发布到CocoaPods中。
如果你现在对CocoaPods还不太了解,推荐你看一看这篇文章:用CocoaPods做iOS程序的依赖管理 ,2017年cocoaPods 1.2.1升级这里不再过多赘述.


本文以个人发布的一个简单的项目为例来说明: LCActionAlertView

完整的项目目录
项目目录.png

1.创建远程仓库(github)

CocoaPods是托管在github上的,所有的Pods也都是托管在github上,因此我们首先需要创建一个属于自己的 github 仓库,如下图所示:

创建仓库.png

<br />

**说明**
1.开源库的名字,必填项.
2.对该库的说明,可选项.
3.仓库的公开性,开源的话选**Public**。 如果是公司内部使用的话这里推荐大家使用私有的仓库,但是**github**的私有仓库是要收费的**$7/month**(壕请无视 - -!)。大部分公司都是有自己的git服务器,不过一般只能在公司内网使用,或者可以选择[Gitlab](https://gitlab.com/),[Coding](https://coding.net/),[Bitbucket](https://bitbucket.org/)任意一种.
4.readme文件,建议勾选进行创建,这是对该库完整的一个说明文档
5.添加忽略文件使用,根据情况进行选择
6.正规的仓库都有一个**license**文件,**Pods**依赖库对这个文件要求比较严格,需要有这个文件。这里最好让**github**自动创建一个,不过后续手动创建也行。建议使用**MIT**类型的**license**

2. clone项目到本地

这里推荐大家使用一个免费的git客户端 - SourceTree,推荐文章:SourceTree 的使用


3.向本地仓库中添加创建 Pods 依赖库所需的文件#

1.共享代码

将LCActionAlertView文件夹,即需要共享出去的源代码所在文件夹拖入工程内,建议同时拖入该源代码的使用示例工程

2.创建podspec文件

每个Pods依赖库必须有且仅有一个名称和依赖库名保持一致,后缀名为.podspec的描述文件。这里我们依赖库的描述文件名称应该为LCActionAlertView.podspec
创建这个文件有两种途径:

1.复制已有的podspec文件然后修改对应的参数。
2.执行命令行创建。 在终端输入:
pod spec create LCActionAlertView

文件内容如下所示:
里面有很多部分,根据需要选择即可,另外使用文本编辑打开此文件的时候,有时候英文标点会自动变为中文标点,因此建议拖入xcode,使用xcode打开,避免不必要的麻烦


LCActionAlertView.podspec 内容截图
@version = "0.0.1"

Pod::Spec.new do |s|
 s.name         = "LCActionAlertView"
 s.version      = @version
 s.summary      = "简单易用的底部弹出控件."
 s.description  = <<-DESC
                     首次pods上传
                     *希望可以成功
                  DESC
 s.homepage     = "https://github.com/loversunny/LCActionAlertView"
 s.license      = "MIT"
 s.author             = { "冀柳冲" => "HH330897537@163.com" }
 s.platform     = :ios, "8.0"
 s.source       = { :git => "https://github.com/loversunny/LCActionAlertView.git",:tag => "v#{s.version}" }
 s.source_files  = "LCActionAlertView/*.{h,m}"
 s.framework  = "UIKit"
 s.requires_arc = true

end
3. readme文件,不多赘述
4.开源许可证 LICENSE

CocoaPods强制要求所有的Pods依赖库都必须有license文件,否则验证不会通过。license文件有很多中,详情可以参考tldrlegal。前面我们已经选择创建了一个MIT类型的license。
以上操作完成后,目录是这样的(command + shift + . 显示隐藏目录)

项目目录.png

3.提交修改到github

提交之前,需要对刚才添加的podspec文件进行验证

pod lib lint

运行之后可能会得到下面的警告:

-> LCActionAlertView (0.0.1)
    - WARN  | source: Git sources should specify a tag.

[!] LCActionAlertView did not pass validation, due to 1 warning (but you can use `--allow-warnings` to ignore it) and All results apply only to public specs, but you can use `--private` to ignore them if linting the specification for a private pod..
You can use the `--no-clean` option to inspect any issue.

由于我们现在还没有正式生成 release 版本, github 上并没有任何 tag,所以我们刚才填写 .podspec 文件填写 git 地址的时候没有填写指定 tag (上面文件的注释中有提到),解决方法我们可以先执行忽略警告的命令:

pod lib lint --allow-warnings

如果成功会出现如下输出:

-> O2View (0.0.1)
    - WARN  | source: Git sources should specify a tag.

O2View passed validation.

当调试完成了之后,我们需要在 github 上把我们的代码生成相应稳定的 release 版本,根据版本号,(或者直接git命令指定tag值)再修改podspec文件,指定tag值即可.
使用sourceTree 推送到github上.或者使用以下命令:

git add -A && git commit -m "add pod files"
git push origin master

5. 将生成的podspec文件提交到官方的 CocoaPods Specs 中

经过前面的步骤,我们的 CocoaPods 依赖库就已经准备好了,但是现在你还不能在你的工程中使用它。如果你想成为一个真正可用的依赖库,还需要最后一步操作:将刚才生产的 podspec 文件提交到 官方的 CocoaPods Specs 中.
没错,我们平时用的能用pod search搜到的依赖库都会把它上传到这个仓库中, 也就是说只有将我们的 podspec 文件上传到这里,才能成为一个真正的依赖库,别人才能用! 流程如下:

1.CocoaPods Trunk发布自己的Pods

在cocoapods使用trunk,CocoaPods 需要0.33以上版本,用 pod --version查看版本,如果版本低,需要更新。终端执行 sudo gem install -n /usr/local/bin cocoapods

注册Trunk
pod trunk register jlc160993@163.com  'sunny冲哥' --description='描述信息'

大家将上面的邮箱,名字,更改成自己的,然后执行该命令,一切顺利的话就会受到一份邮件,点击邮件中的链接验证通过后,再执行:

pod trunk me

显示以下信息

jiliuchongdeiMac:~ JLC$ pod trunk me
  - Name:     jlc --description=弹窗控件
  - Email:    hh330897537@163.com
  - Since:    June 26th, 03:40
  - Pods:
    - LCActionAlertView
  - Sessions:
    - June 26th, 03:40 - November 2nd, 21:16. IP: 218.29.120.82

如果你的pod是由多人维护的,你也可以添加其他维护者:

pod trunk add-owner JLC  kyle@163.com

上面的工作完成之后,我们就可以开始 trunk push了。

trunk push

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

pod trunk push 

如果在trunk push过程中报错了,仔细查看一下错误信息,解决问题后,重新push
成功之后我们也可以在本地的~/.cocoapods/repos/master/Specs目录下看到转换之后的json文件

json文件目录.png

至此我们整个制作自己的开源库的过程就完成了,以后有新版本只需要修改工程根目录下的podspec文件,然后重新执行pod trunk push命令即可。
成功的话,一般会显示如下信息

   Congrats

   LCActionAlertView (0.0.1) successfully published
   June 29th, 00:57
   https://cocoapods.org/pods/LCActionAlertView
   Tell your friends!

然后耐心等待一般时间,就可以执行pod search LCActionAlertView命令去查看了哦

-> LCActionAlertView (0.0.1)
   简单易用的底部弹出控件.
   pod 'LCActionAlertView', '~> 0.0.1'
   - Homepage: https://github.com/loversunny/LCActionAlertView
   - Source:   https://github.com/loversunny/LCActionAlertView.git
   - Versions: 0.0.1 [master repo]

PS:

如果长时间过去还是搜索不到 请参考Cocoapods: pod search无法搜索到类库的解决办法

最后

最后对这个过程做个总结:

  1. 开源库发布之后,需要打上tag,参考Git 基础 - 打标签
git tag -a v1.4 -m 'my version 1.4'
  1. 进入到项目根目录下,创建podspec文件
pod spec create PodName
  1. 编辑podspec文件中的相关信息,有两个比较重要的地方s.source和s.source_files,可以验证是否有误:
pod spec lint PodName.podspec

或者cd 到podspec文件所在目录,执行

pod lib lint
  1. 注册pod trunk
pod trunk register jlc160993@163.com  'sunny冲哥' --description='描述信息'
  1. 发布到pod trunk
pod trunk push 

该命令在包含有.podspec文件的目录下执行

  1. 更新pod库
pod setup

如果pod trunk push成功后无法pod search到自己的库,可执行该命令。还是不行的话,参考此篇文章修改:CocoaPods 【pod search 搜索类库失败的解决办法】


感谢!

本文在写作过程中参考了以下文章,再次致谢!
简书当前Markdown语法与效果
如何发布自己的开源框架到CocoaPods
特别鸣谢简友:MarkLin
本文章也是参考该文写作而成的,再次致谢
制作 CocoaPods 依赖库
<br />

最后的最后

如果在操作过程中,有任何疑问或者不明白的地方,欢迎留言探讨,互相学习,共同进步,谢谢大家!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容