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 上传, 再进行新一轮的验证和发布。

参考资料