CocoaPods - 发布 podspec 到 repo
本篇文章我将通过一个名叫 FlyHUD 的开源组件来讲解如何提交 podspec 到共有 Specs Repo。
验证组件名
因为 Specs Repo 里的每个组件不能重名,所以我们在创建组件之前先验证一下组件名称是否已被使用。
方法一:在 cocoapods.org 官网搜索组件名
方法二:在终端输入一下命令
1
pod search 组件名 # 例如:pod search FlyHUD
创建代码仓库
点击此链接将跳转到 Github 去创建一个 Public 代码仓库。
创建组件工程
如果你是现有的组件项目,并且在 Git 的版本管理下,那么这一步就算完成了,可以直接进行下一步了。
如果你需要从零开始创建一个组件库,那么我建议你使用 Cocoapods 提供的一个工具将后两步结合起来做。
这个工具详细使用说明请参考官网 Using Pod Lib Create,也可以查看 Github,它是一个开源工具。
这里以 FlyHUD 为例,打开终端 cd 到要创建项目的目录然后执行:
1
pod lib create FlyHUD
之后他会问你五个问题:
- 选择创建 iOS 或 macOS 工程;
- 选择用 Swift 或 ObjC;
- 是否需要 demo 工程;
- 选择一个测试框架;
- 是否需要基于 View 测试。
我这里选择的是 1. iOS;2. Swift;3. Yes;4. None;5. No。问完这五个问题后他会自动创建一个 pod 组件工程,并且自动执行 pod install
命令生成依赖。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ tree FlyHUD -L 2
FlyHUD
├── Example
│ ├── FlyHUD
│ ├── FlyHUD.xcodeproj
│ ├── FlyHUD.xcworkspace
│ ├── Podfile
│ ├── Podfile.lock
│ ├── Pods
│ └── Tests
├── LICENSE
├── FlyHUD
│ ├── Assets
│ └── Classes
├── FlyHUD.podspec
├── README.md
└── _Pods.xcodeproj -> Example/Pods/Pods.xcodeproj
10 directories, 5 files
以上是生成的项目的目录结构。如果你不想使用这个目录结构则可以试试我这个工具 pod-project-template
接下来就是分别向 FlyHUD/Classes 和 FlyHUD/Assets 文件夹中添加代码文件和资源,并配置 FlyHUD.podspec 文件,然后进入 Example 文件夹执行 pod install
命令,再打开项目工程可以看到,刚刚添加的组件已经在 Pods 子工程下 Development Pods/FlyHUD 中了,然后编辑 demo 工程和测试案例。
每当你向 Pod 中添加了新的文件或者更新了 podspec 都需要重新执行
pod install
命令。
编辑 podspec 文件
上面有提到,如果你不是用 pod lib create
创建的工程,那么就需要创建一个 podspec 文件。
打开终端 cd 到 FlyHUD 项目根目录,并输入一下命令:
1
pod spec create FlyHUD
执行完之后,就创建了一个 podspec 文件,它包含很多配置项,具体怎么编辑请继续往下阅读。
将 FlyHUD 替换成你自己的组件名,此命令详细介绍可查看官方文档
下面是我的一个 podspec 文件,每个字段都注释说明了它的含义。详细信息请查看官方文档
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Pod::Spec.new do |s|
# 你的组件名称
s.name = "FlyHUD"
# 组件版本号
s.version = "1.0.0"
# 组件的简短介绍
s.summary = "The Swift version of FlyHUD."
# 组件的详细介绍
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
# 组件的主页,一般为 Github 地址就行(如果地址无法访问,则 podspec 文件将验证不通过)
s.homepage = "https://github.com/liam-i/FlyHUD"
# 开源协议
s.license = "MIT"
# 组件的作者信息:{ "作者名" => "邮箱" }
s.author = { "liam-i" => "liam_i@163.com" }
# 组件最低支持的 iOS 系统版本号
s.ios.deployment_target = '10.0'
# 组件地址,只支持 HTTP 和 HTTPS,最好使用HTTPS
s.source = { :git => "https://github.com/liam-i/FlyHUD.git", :tag => "#{s.version}" }
# 组件的源代码的路径
s.source_files = "FlyHUD/Classes/*.swift"
# 资源文件地址
s.resource_bundles = {
'FlyHUD' => ['FlyHUD/Assets/*.png']
}
# 公开头文件地址
s.public_header_files = 'FlyHUD/Classes/**/*.h'
# 所需的framework,多个用逗号隔开
s.frameworks = 'UIKit', 'MapKit'
# 组件所依赖的其他库,如果有多个需要填写多个 s.dependency
s.dependency 'AFNetworking', '~> 2.3'
end
推送到远端仓库
podspec 文件编辑完成之后,需要将该项目添加并推送到远端仓库。
在文章第二部分,我们已经在 GitHub 上创建了一个 FlyHUD 代码仓库,我们就推送到这里。打开终端 cd 到本地 FlyHUD 根目录,执行以下命令:
1
2
3
4
5
6
7
git add .
git commit -m "Initial Commit"
git remote add origin git@github.com:liam-i/FlyHUD.git # 添加远端仓库
git push origin main # 提交到远端仓库
git tag -m "release v0.1.0" 0.1.0 # podspec 文件中获取 Git 版本控制的项目需要 tag 号
git push --tags # 推送 tag 到远端仓库
详细的 Git 使用教程可查看【Git一个先进的分布式版本控制系统】
验证 podspec 文件
把项目推送到远端代码仓库之后,我们就可以验证 podspec 文件是否可用,打开终端 cd 到 podspec 文件所在目录,并执行一下命令:
1
pod spec lint FlyHUD.podspec
当你看到一下结果,说明验证通过了。
1
2
3
-> FlyHUD (0.1.0)
FlyHUD passed validation.
如果验证有任何 warning 或 error 都是不可以的,它就不能被添加到 Specs Repo 中,不过 xcode 的 warning 是可以存在的。
测试 podspec 文件
当 podspec 文件验证通过后,我们还需要验证 Pod 组件是可以用的,接下来我们在本地做个验证。
如果你是用 pod spec create
创建的工程,则直接 cd 到 Podfile
文件目录下执行 pod install
即可。
如果你不是用 pod spec create
创建的工程,则需要创建一个新的项目,在新项目的 Podfile
文件中直接指定刚才编辑好的 podspec 文件,在 Podfile
中我们可以这样编辑:
1
2
3
4
5
6
use_frameworks!
platform :ios, '10.0'
target 'FlyHUD_Example' do
pod 'FlyHUD', :path => '../' # 指定 podspec 文件所在路径
end
编辑好 Podfile
文件后,cd 到 Podfile
文件目录下执行 pod install
即可。
当 pod install
执行完毕,且没报错。打开项目工程,可以看到文件都被加载到 Pods 子项目的 Development Pods/FlyHUD 中了,这时你编译一下工程,不报错即可。
向 Public Spec Repo 提交 podspec
注册作者信息
第一次提交时,需要先注册你的信息:
1
pod trunk register liam_i@163.com 'Liam' --description='FlyHUD de description.'
- 注意替换你的邮箱、用户名 和 组件描述。
- pod trunk register 你的邮箱 ‘你的用户名’ –description=’你的描述’
注册成功的话就会收到一份邮件,点击邮件中的链接后验证一下。
我们也可以直接使用以下命令查看个人信息是否注册成功:
1
pod trunk me
注册成功的话会返回以下结果:
1
2
3
4
5
6
7
8
$ pod trunk me
- Name: Liam
- Email: liam_i@163.com
- Since: December 5th, 08:24
- Pods:
- FlyHUD
- Sessions:
- December 5th, 08:24 - April 12th, 2022 12:34. IP: 103.206.191.69
如果你的 pod 组件是由多人维护的,你也可以添加其他维护者:
1
pod trunk add-owner POD OWNER-EMAIL
例如,我们需要添加一个维护者 liam_i_other@163.com
则可以这样输入:
1
pod trunk add-owner FlyHUD liam_i_other@163.com
提交 podspec
注册完维护者信息之后,cd
到 podspec 文件所在目录:
1
pod trunk push FlyHUD.podspec
push
指令会先验证 podspec 文件是否有合法,验证通过后再提交到 Repo,最后会将上传的 podspec 转换为 json 文件。
如果提交成功,会输出以下结果。
1
2
3
4
5
6
7
8
9
10
11
12
13
Updating spec repo `trunk`
Validating podspec
-> FlyHUD (0.1.0)
Updating spec repo `trunk`
--------------------------------------------------------------------
🎉 Congrats
🚀 FlyHUD (0.1.0) successfully published
📅 December 5th, 08:24
🌎 https://cocoapods.org/pods/FlyHUD
👍 Tell your friends!
--------------------------------------------------------------------
详细的教程:Getting setup with Trunk
向 Private Spec Repo 提交 podspec
添加 Private Spec Repo
1
pod repo add REPO_NAME SOURCE_URL # E.g.: pod repo add liam-components 'git@github.com:liam-i/liam-components.git'
检查添加的 Private Spec Repo 是否有效:
1
2
cd ~/.cocoapods/repos/REPO_NAME # E.g.: cd ~/.cocoapods/repos/liam-components
pod repo lint .
提交 podspec
1
pod repo push REPO_NAME SPEC_NAME.podspec # E.g.: pod repo push liam-components FlyHUD.podspec
详细的教程:Private Pods
从 Specs Repo 搜索组件
将 podspec 提交到 Specs Repo 后,我们需要搜索一下来验证制作好的 pod 组件可以被正常使用。
打开终端,输入一下命令:
1
pod search FlyHUD
搜索成功
1
2
3
4
5
6
-> FlyHUD (0.1.0)
A short description of FlyHUD.
pod 'FlyHUD', '~> 0.1.0'
- Homepage: https://github.com/liam-i/FlyHUD
- Source: https://github.com/liam-i/FlyHUD.git
- Versions: 0.1.0 [trunk repo]
如果搜索不到,可执行以下命令:
1
pod setup # 更新pod库
如果 pod setup
成功后还是无法 pod search
可执行以下命令:
1
2
3
cd ~/Library/Caches/CocoaPods # 进入 CocoaPods 的缓存文件夹
rm search_index.json # 删除 search_index.json 文件
pod search FlyHUD # 执行搜索命令,并重新生成 search_index.json 文件
维护 podspec
当一个 pod 组件库制作好了,以后肯定需要更新维护的。比如如何升级 pod 版本,如何删除 pod 组件库。
升级 pod 组件版本,步骤还是和上面介绍的一样。
- 分别在 FlyHUD/Classes 和 FlyHUD/Assets 文件夹中添加、修改代码文件和资源
- 配置 FlyHUD.podspec 文件,比如 Classes、Assets、frameworks、ependency 和 version 等等
- 进入 Example 文件夹执行
pod install
验证 pod 组件是否可用 - 用
pod lib lint
验证 podspec 是否合法 - 推送到远端代码仓库,并打 tag
- 提交 podspec 到共有 Specs Repo
删除已发布的 pod 组件库,可用使用以下命令:
1
pod trunk delete NAME VERSION
以上命令需要指定组件名,和组件版本号。例如:pod trunk delete FlyHUD 0.1.0
- 删除 pod 组件通常被认为是不好的行为,如果别人正在使用你的 pod 组件,使用 delete 会给别人带来一定的麻烦,所以请慎重考虑是否可用使用 deprecate 命令。
- 当你的 pod 组件版本被删除之后,此版本将永远无法再次提交到 Specs Repo