上一篇已经讨论过如何制作本地库,本篇文章将讨论如何将本地库提交到CocoaPods,让其他开发者使用自己的库,还有如何对库进行版本管理。
1.Specs和Specs Repo
什么是Spec?
我们使用CocoaPods的指令创建好本地库之后,默认生成的podspec文件。它描述该库某一个版本的信息,比如库的名字、版本号、描述、依赖库等等。
举个栗子:
Pod::Spec.new do |spec|
spec.name = 'Reachability' # 库名
spec.version = '3.1.0' # 版本号
spec.license = { :type => 'BSD' } # 授权协议
spec.homepage = 'https://github.com/tonymillion/Reachability' # 库的首页
spec.authors = { 'Tony Million' => '[email protected]' } # 作者
spec.summary = 'ARC and GCD Compatible Reachability Class for iOS and OS X.' # 库的概要
spec.source = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' } # 库的源路径和版本号
spec.source_files = 'Reachability.h,m' # 源文件,这个库仅包含Reachability.h和Reachability.m文件
spec.framework = 'SystemConfiguration' # 使用到的系统框架
spec.requires_arc = true # 是否支持ARC
end
什么是Specs Repo?
Specs Repo是GitHub上的仓库,它包含了所有可用的第三方库。每个库都会有独立的文件夹,每个版本以独立的子文件夹保存。文件夹中只有一个描述文件,也就是Spec。
2.提交到CocoaPods
我们要提交自己的库到CocoaPods,实质上要做两件事:
- 把源文件提交到GitHub
- 将Spec文件提交到Specs Repo
在提交之前最好先检查Spec的配置是否正确,CocoaPods为我们提供了这么一个命令pod lib lint
。
运行结果:
-> CFALibrary (0.1.0)
- WARN | url: There was a problem validating the URL https://github.com//CFALibrary.
[!] CFALibrary 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.
库没有通过验证,说明Spec配置有问题。根据上面的提示,我们知道库的原路径没有设置对,无法从该URL获取需要的信息。所以,我们要做第一件事,把库文件推送到GitHub。
将文件推送到GitHub的方式有多种,不在本篇讨论范围内。最简单的做法,使用GitHub客户端,将项目文件拖入,点击Publish即可。
推送到GitHub后,将spec中的homepage和source路径改成GitHub上的项目路径,重新执行pod lib lint
,提示验证通过。
-> CFALibrary (0.1.0)
CFALibrary passed validation.
接下来要做第二件事,把Spec提交到Specs Repo。
提交之前,你需要注册pod账号。实质上是将"邮箱--名称--电脑"绑定在一起,所以这里不需要密码。
pod trunk register EMAIL [NAME]
以下是该指令的帮助文档,大概意思是:
如果第一次注册,邮箱和名称都是必须的。如果已经注册过,可以省略名称(除非你想修改名称)。推荐填写描述信息,以及给出了一些Examples,按着Example做就可以了。
pod trunk register EMAIL [NAME]
Register a new account, or create a new session.
If this is your first registration, both an `EMAIL` address and your
`NAME` are required. If you’ve already registered with trunk, you may omit
the `NAME` (unless you would like to change it).
It is recommended that you provide a description of the session, so that
it will be easier to identify later on. For instance, when you would like
to clean-up your sessions. A common example is to specify the location
where the machine, that you are using the session for, is physically
located.
Examples:
$ pod trunk register [email protected] 'Eloy Durán' --description='Personal Laptop'
$ pod trunk register [email protected] --description='Work Laptop'
$ pod trunk register [email protected]
执行
pod trunk register [email protected] Jack
结果
[!] Please verify the session by clicking the link in the verification email that has been sent to [email protected]
去邮箱认证即可。
注册账号之后,我们可以尝试将Spec提交到Specs Repo,这里有三步:
- 给项目打tag(必须要打tag,CocoaPods中的不同版本,实质是不同的tag,不打tag会导致下一步验证不通过)
git tag 0.1.0
git push origin 0.1.0
- 检查合法性
## 指令
pod spec lint CFALibrary.podspec
## 结果
-> CFALibrary (0.1.0)
Analyzed 1 podspec.
CFALibrary.podspec passed validation.
- 提交到Specs Repo
## 指令
pod trunk push CFALibrary.podspec
结果如下,表示已经提交到CocoaPods,其他开发者可以直接使用。
Updating spec repo `master`
CocoaPods 1.0.0 is available.
To update use: `sudo gem install cocoapods`
Until we reach version 1.0 the features of CocoaPods can and will change.
We strongly recommend that you use the latest version at all times.
For more information, see https://blog.cocoapods.org and the CHANGELOG for this version at https://github.com/CocoaPods/CocoaPods/releases/tag/1.0.0
Validating podspec
-> CFALibrary (0.1.0)
Updating spec repo `master`
CocoaPods 1.0.0 is available.
To update use: `sudo gem install cocoapods`
Until we reach version 1.0 the features of CocoaPods can and will change.
We strongly recommend that you use the latest version at all times.
For more information, see https://blog.cocoapods.org and the CHANGELOG for this version at https://github.com/CocoaPods/CocoaPods/releases/tag/1.0.0
- Data URL: https://raw.githubusercontent.com/CocoaPods/Specs/ddbcb337542df378e9b7a7dc711f324993ca88e4/Specs/CFALibrary/0.1.0/CFALibrary.podspec.json
- Log messages:
- May 20th, 02:47: Push for `CFALibrary 0.1.0' initiated.
- May 20th, 02:47: Push for `CFALibrary 0.1.0' has been pushed (3.049576125 s).
如果不放心,可以使用pod search LibraryName
来查询是否已提交到CocoaPods.
# 指令
pod search CFALibrary
# 有查询结果,说明已经正确提交到CocoaPods
-> CFALibrary (0.1.0)
My CFALibrary.
pod 'CFALibrary', '~> 0.1.0'
- Homepage: https://github.com/XXX/CFALibrary
- Source: https://github.com/XXX/CFALibrary.git
- Versions: 0.1.0 [master repo]
(END)