0%

从零开始创建cocoaPods公有库

简介

这篇文章记录了一个公共Pod库 RFSegmentView的创建过程

注册CocoaPods账号

想要创建一个开源pod库, 首先我们需要注册CocoaPods, 这里使用trunk方式, 那么只需要在终端执行(这里默认你已经安装好CocoaPods环境):

1
pod trunk register 邮箱地址 '用户名' --verbose

这里我们一般使用github邮箱和用户名, 然后在你的邮箱中会收到确认邮件,下面是确认邮件的内容:

img

在浏览器中点击链接确认即注册成功, 成功之后可以终端执行:

1
pod trunk me

通过上面的命令查看注册信息,里面会展示该账号下的所有的Pod库,可以用此方式查看自己发布过的Pods

1
2
3
4
5
6
7
8
➜  myBlog git:(master) ✗ pod trunk me
- Name: wangruofeng
- Email: wangruofeng007@gmail.com
- Since: November 16th, 12:17
- Pods:
- RFSegmentView
- Sessions:
- November 16th, 12:17 - March 24th, 2020 04:54. IP: 119.123.133.39

创建共享库文件并上传到公有仓库

共享库需要三个必不可少的部分:

  1. 共享文件夹(文件夹存放着你要共享的内容, 也就是其他人通过pod安装得到的文件, .podspec文件中的source_files需要指定此文件路径及文件类型);
  2. LICENSE文件(默认一般选择MIT);
  3. 库名.podspec(本库的各项信息描述, 需要提交给CocoaPods, pod通过这个文件查找到你共享的库).

如果没有 podspec 文件可以用下面的命令,初始化

1
pod lib create 库名

编辑.podspec文件

RFSegmentView.podspec 为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Pod::Spec.new do |spec|

spec.name = "RFSegmentView"
spec.version = "1.3.0"
spec.summary = "Imitate iOS7 style segmented controls, simple, practical!"
spec.homepage = "https://github.com/wangruofeng/RFSegmentView"
spec.license = { :type => "MIT", :file => "LICENSE.md" }
spec.author = { "wangruofeng" =>"wangruofeng007@gmail.com" }
spec.platform = :ios, "8.0"
spec.source = { :git => 'https://github.com/wangruofeng/RFSegmentView.git', :tag => spec.version.to_s}
spec.source_files = "RFSegmentView/RFSegmentView.{h,m}"
# spec.exclude_files = "Classes/Exclude"
# spec.public_header_files = "Classes/**/*.h"

spec.frameworks = 'UIKit', 'CoreGraphics', 'Foundation'
spec.requires_arc = true

# spec.dependency "JSONKit", "~> 1.4" 添加依赖库

end

编写完成后, 我们需要验证.podspec文件的合法性, 这里需要终端cd到.podspec文件所在文件夹, 执行:

1
pod lib lint RFSegmentView.podspec

如有警告或者错误请重新检查你的编写正确性, 如果没有问题会出现

1
2
3
-> RFSegmentView (1.3.0)

RFSegmentView passed validation.

打tag,发布新版本

一切准备就绪后, 我们需要在你的git仓库里面存在一个与.podspec文件中一致的版本, 这里你可以在你的git仓库中的准备一个版本, 也可以在当前文件夹下使用终端命令:

1
2
git tag -m 'first release' '1.3.0'
git push --tag #推送tag到远端仓库

成功之后即可在你分支里面看到这个tag的版本.

发布库描述文件

下面我们需要发布自己的库描述文件podspec给cocoapods
同样在这个文件夹下, 终端执行:

1
pod trunk push RFSegmentView.podspec

将你的库文件.podspec文件提交到公有的specs上面, 这一步做的操作是验证你的podspec文件是否合法+提交到specs中+将上传的podspec文件转成json格式文件,如果重复提交会出现下面的信息:

1
[!] Unable to accept duplicate entry for: RFSegmentView (1.3.0)

为了测试将RFSegmentView.podspec里面的spec.version修改成1.3.1,成功后会出现Congrats信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
➜  RFSegmentView git:(master) pod trunk push RFSegmentView.podspec
Updating spec repo `trunk`
Validating podspec
-> RFSegmentView (1.3.1)
- NOTE | xcodebuild: note: Using new build system
- NOTE | [iOS] xcodebuild: note: Planning build
- NOTE | [iOS] xcodebuild: note: Constructing build description
- NOTE | [iOS] xcodebuild: warning: Skipping code signing because the target does not have an Info.plist file and one is not being generated automatically. (in target 'App' from project 'App')

Updating spec repo `trunk`

--------------------------------------------------------------------------------
🎉 Congrats

🚀 RFSegmentView (1.3.1) successfully published
📅 November 17th, 07:08
🌎 https://cocoapods.org/pods/RFSegmentView
👍 Tell your friends!
--------------------------------------------------------------------------------

查找和使用新创建的库

成功后需要等待的时间不定, 目前一般比较快, 一般使用pod setup和pod search查看是否已经可以使用, 如果

pod search RFSegmentView 一直搜索不到,尝试删除pod setup成功后生成的~/Library/Caches/CocoaPods/search_index.json文件, 该文是用来查找的索引文件,

终端输入:

1
rm ~/Library/Caches/CocoaPods/search_index.json

删除成功后再执行:pod search 库名, 等待输出:Creating search index for spec repo 'master'.. Done!稍等片刻就会出现你想要的结果,如果还是没有结果需要等待pod同步,过一段时间再来尝试。

更新维护podspec

如果有错误或者需要迭代版本,修改工程文件后推送到远端仓库后, 需要修改podspec中的版本号, 并重新打tag上传, 再进行新一轮的验证和发布。

参考资料