美文网首页iOS开发
CocoaPods系列 - 提交

CocoaPods系列 - 提交

作者: 邓俊杰 | 来源:发表于2016-05-20 23:00 被阅读910次

上一篇已经讨论过如何制作本地库,本篇文章将讨论如何将本地库提交到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' => 'tonymillion@gmail.com' }    # 作者
  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。

AFNetworking的Specs文件夹 AFNetworking 1.0版本的Specs文件夹

2.提交到CocoaPods

我们要提交自己的库到CocoaPods,实质上要做两件事:

  1. 把源文件提交到GitHub
  2. 将Spec文件提交到Specs Repo

在提交之前最好先检查Spec的配置是否正确,CocoaPods为我们提供了这么一个命令pod lib lint
运行结果:


 -> CFALibrary (0.1.0)
    - WARN  | url: There was a problem validating the URL https://github.com/<GITHUB_USERNAME>/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 eloy@example.com 'Eloy Durán' --description='Personal Laptop'
          $ pod trunk register eloy@example.com --description='Work Laptop'
          $ pod trunk register eloy@example.com

执行
pod trunk register xxx@xx.com Jack
结果
[!] Please verify the session by clicking the link in the verification email that has been sent to xxx@xx.com
去邮箱认证即可。

注册账号之后,我们可以尝试将Spec提交到Specs Repo,这里有三步:

  1. 给项目打tag(必须要打tag,CocoaPods中的不同版本,实质是不同的tag,不打tag会导致下一步验证不通过)
git tag 0.1.0
git push origin 0.1.0
  1. 检查合法性
## 指令
pod spec lint CFALibrary.podspec
## 结果
-> CFALibrary (0.1.0)
Analyzed 1 podspec.
CFALibrary.podspec passed validation.
  1. 提交到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)

相关文章

网友评论

  • 踏云小子:大神,请问这个WARN | url: There was a problem validating the URL https://github.com/fifyrio/CWDropDownMenu,是什么原因啊
    7d03ea759c8a:@踏云小子 嗯,今晚上回家试试。要真是网速的问题,那真是哭笑不得,花了一天半的时间换了各种方式尝试解决这问题,都无果。。。
    踏云小子:@iYuer 我也不行啊,试试网络好的地方吧
    7d03ea759c8a:您好,我这两天也一直被这个问题困住,换了各种方式,都还是这个问题。请问您解决了吗?如果解决了请交流指点一下,非常感谢。
  • mkb2:你好,有个问题,以你的CFALibrary为例
    假设要更新的2.0版本,那么步骤是不是这样的?
    1.给项目打tag
    git tag 2.0.0
    git push origin 2.0.0
    2.检查合法性
    3.提交到Specs Repo
    不是很确定,所以想请教一下
    mkb2:好的,记住了,谢谢
    邓俊杰:@王鑫20111 还需要在.podspec文件里修改版本号
  • SDBridge:感谢楼主的文章
  • a6b95701a98f:请问公开库或者私有库的ReplaceMe.m这个文件怎么替换成自己写的类文件?为什么替换后,在不改变原来路径的前提下,用一个demo工程pod公开库后只能看到ReplaceMe.m文件看不到其他自己写的文件??
  • ITJason:根据文章的步骤成功提交了 iPicUploader, 感谢!

    有一点说出来让大家知道吧:提交后,即使通过 `pod search` 能找到,在网站中搜索时 https://cocoapods.org/?q=ipicuploader 还是没有结果,应该是网站需要更多时间来更新缓存。
    ITJason:@Coder_Hou
    # pod search SKTakePhoto
    [!] Unable to find a pod with name, author, summary, or description matching `SKTakePhoto`
    SDBridge:但是,我自己用pod search SKTakePhoto 却能搜索得到
    SDBridge:这个更新缓存的时间是多久啊? 我的都一天了,别的同事搜索不到,pod search SKTakePhoto ,有时间帮我试试

本文标题:CocoaPods系列 - 提交

本文链接:https://www.haomeiwen.com/subject/vmjnrttx.html