如何发布源码到 CocoaPods

说实在话,类似的教程网上很多,基本可以满足大多数人零基础发布CocoaPods,但是其中可能会遇到一些问题,只有亲自尝试过才知道。

准备工作

1. clone远程仓库到本地

1
git clone 你的仓库链接

2. 注册trunk

注册的命令

1
pod trunk register 你的邮箱 你的用户名

记得去邮箱里验证,然后可以输入以下命令查看个人信息

1
pod trunk me

步骤

1. 创建.podspec

1
pod spec create AXKit

2. 修改.podspec并验证

有很多类似的教程,可以参考。

一个小技巧:你可以去GItHub搜索一些热门的第三方库,然后点击查看这些大牛的 .podspec 是怎么写的。
传送门:YYKit的podspecReactiveObjC的podspecBlocksKit的podspec

最容易出错的地方就是资源路径

1
s.source_files = "AXKit/**/*.{h,m}"

常见写法

1
2
3
"Directory1/*"  表示匹配所有文件
"Directory1/Directory2/*.{h,m}" 表示匹配所有以.h和.m结尾的文件
"Directory1/**/*.h" 表示匹配所有子目录

s.source 常见写法

1
2
3
4
# 推荐写法:与版本号绑定
s.source = { :git => "https://github.com/TeaseTian/HTQRCode.git", :tag => "#{s.version}" }
# 与commit id 绑定
s.source = { :git => "https://github.com/TeaseTian/HTQRCode.git", :commit => "68defea" }

tag => s.version 表示将这个Pod版本与Git仓库中相同版本的comit绑定
注意:如果仓库中对应的tag是 “v1.0.0” 这样以字母开头的,可以在 #{s.version} 前面加上对应的字母。commit => “68defea” 表示将这个Pod版本与Git仓库中某个commit绑定

验证

1
pod spec lint AXKit.podspec

3. 上传到远程仓库

修改.podspec时指定的版本号,如 0.0.1。那么远程仓库中必须始终存在这个版本的 branchtag 才能够下载。建议使用tag。s.source 中的tag需要与远程仓库中的tag对应起来。

1
2
s.version = "0.0.1"
s.source = { :git => "https://github.com/xaoxuu/AXKit.git", :tag => "v#{s.version}" }

这里指向的是 "v0.0.1" 这个分支,因为分支我们用完之后习惯把它删掉,所以这里也可以指向tag,也就是说打一个 "v0.0.1" 的tag并推送到远程就可以了。

1
2
git tag v0.0.1
git push --tags

这样做的好处就是删掉当前分支不影响CocoaPods中指向的仓库源码,对git命令不熟悉可以参考廖雪峰的git教程

4. 发布到CocoaPods

1
pod trunk push AXKit.podspec

n. 删除一个podspec版本

删除的命令是:

1
pod trunk delete 项目名 版本号

官方建议使用 deprecate 来弃用

1
pod trunk deprecate 项目名

这两种方法执行完有很大几率会出现一串很长很长的错误,不要着急,这实际上这是一个html。把它保存到一个html文件中,打开,是个404错误页。所以要翻墙喽,如果你没有VPN代理工具,可以去下载Lantern

删除之后立即搜索还是能搜到的,因为有一定的延迟,可能要半个小时才能更新。

pod trunk 命令

在终端输入

1
pod trunk --help

可以查看帮助

使用脚本

没必要每次都重复每个步骤,如果你已经发布过一个,可以省去注册的步骤,直接把已经发不过的podspec复制一份,改一下仓库模块名,验证通过就可以发布了。

我写了一个便于发布更新的脚本,把脚本放在与podspec同级目录下,当你更新了项目之后,如果需要更新到cocoapods,可以执行此脚本。流程是:

1
输入版本号 -> commit、push tag -> pod spec lint -> 询问是否发布(y/n) -> 发布(y)

脚本的项目在这里:https://github.com/xaoxuu/podspec.sh