名称: cocoapods-publishing-workflow 用户可调用: false 描述: 用于将CocoaPods库发布到CocoaPods Trunk。涵盖pod trunk注册、podspec验证、版本管理和发布最佳实践,以实现成功的库分发。 允许工具:
- 读取
- 写入
- 编辑
- Bash
- Grep
- Glob
CocoaPods - 发布工作流程
发布你的CocoaPods库到官方CocoaPods Trunk的完整指南。
发布概述
流程步骤
- 注册CocoaPods Trunk(一次性)
- 准备你的podspec
- 本地验证 (
pod lib lint) - 发布验证 (
pod spec lint) - 在git中标记版本
- 推送到Trunk (
pod trunk push)
Trunk注册
注册邮箱(一次性)
# 注册你的邮箱
pod trunk register email@example.com '你的名字'
# 验证邮箱(检查收件箱中的验证链接)
# 点击邮件中的链接激活账户
检查注册
# 验证注册
pod trunk me
# 示例输出:
# - 名字: 你的名字
# - 邮箱: email@example.com
# - 自从: 2024年1月1日
# - Pods: 无
Podspec准备
版本管理
Pod::Spec.new do |spec|
# 语义版本控制: MAJOR.MINOR.PATCH
spec.version = '1.0.0'
# 必须匹配git标签
spec.source = {
:git => 'https://github.com/username/MyLibrary.git',
:tag => spec.version.to_s
}
end
必填元数据
Pod::Spec.new do |spec|
# 身份(必填)
spec.name = 'MyLibrary'
spec.version = '1.0.0'
# 描述(必填)
spec.summary = '简短的一行描述'
spec.description = '更长的描述,详细说明库的功能'
# 链接(必填)
spec.homepage = 'https://github.com/username/MyLibrary'
spec.source = { :git => 'https://github.com/username/MyLibrary.git', :tag => spec.version.to_s }
# 许可证(必填)
spec.license = { :type => 'MIT', :file => 'LICENSE' }
# 作者(必填)
spec.authors = { '你的名字' => 'email@example.com' }
# 平台(必填)
spec.ios.deployment_target = '13.0'
end
本地验证
快速验证
# 快速验证(跳过构建)
pod lib lint --quick
# 检查常见问题,无需完整构建
完整验证
# 带构建的完整验证
pod lib lint
# 指定Swift版本
pod lib lint --swift-version=5.9
# 详细输出
pod lib lint --verbose
处理警告
# 允许警告(不推荐用于新pod)
pod lib lint --allow-warnings
# 更好:修复警告
pod lib lint
# 逐个解决每个警告
发布验证
Spec Lint
# 验证podspec以准备发布
pod spec lint
# 针对远程仓库验证
# 模拟真实世界安装
发布前检查清单
- [ ] 所有测试通过
- [ ] 没有lint警告
- [ ] 包含隐私清单(iOS 17+)
- [ ] README完整
- [ ] LICENSE文件存在
- [ ] CHANGELOG已更新
- [ ] 版本号正确
- [ ] Git仓库干净
Git标签
创建标签
# 暂存所有更改
git add .
# 提交更改
git commit -m "发布版本 1.0.0"
# 创建匹配podspec版本的标签
git tag 1.0.0
# 推送到远程并包含标签
git push origin main --tags
标签格式
# 语义版本控制
git tag 1.0.0 # MAJOR.MINOR.PATCH
git tag 1.0.0-beta.1 # 预发布
git tag 1.0.0-rc.1 # 发布候选
# 必须匹配podspec中的spec.version
发布到Trunk
推送Pod
# 推送到CocoaPods Trunk
pod trunk push MyLibrary.podspec
# 指定Swift版本
pod trunk push MyLibrary.podspec --swift-version=5.9
# 允许警告(不推荐)
pod trunk push MyLibrary.podspec --allow-warnings
成功发布输出
验证podspec
-> MyLibrary (1.0.0)
更新spec仓库 `trunk`
-> MyLibrary (1.0.0)
--------------------------------------------------------------------------------
🎉 恭喜
🚀 MyLibrary (1.0.0) 成功发布
📅 2024年1月1日
🌎 https://cocoapods.org/pods/MyLibrary
👍 告诉你的朋友们!
--------------------------------------------------------------------------------
版本更新
补丁发布(错误修复)
# 在podspec中
spec.version = '1.0.1' # 原为1.0.0
# Git工作流程
git add .
git commit -m "修复: 解决后台模式崩溃"
git tag 1.0.1
git push origin main --tags
pod trunk push MyLibrary.podspec
次要发布(新功能)
# 在podspec中
spec.version = '1.1.0' # 原为1.0.1
# Git工作流程
git add .
git commit -m "添加: 支持自定义主题"
git tag 1.1.0
git push origin main --tags
pod trunk push MyLibrary.podspec
主要发布(重大变更)
# 在podspec中
spec.version = '2.0.0' # 原为1.1.0
# Git工作流程
git add .
git commit -m "重大变更: 为现代Swift重构API"
git tag 2.0.0
git push origin main --tags
pod trunk push MyLibrary.podspec
管理多个Pod
列出你的Pod
# 查看所有你发布的pod
pod trunk me
# 显示:
# - Pods:
# - MyLibrary
# - MyOtherLibrary
添加贡献者
# 添加团队成员到pod
pod trunk add-owner MyLibrary email@example.com
# 移除贡献者
pod trunk remove-owner MyLibrary email@example.com
弃用
弃用旧版本
# 弃用特定版本
pod trunk deprecate MyLibrary --version=1.0.0
# 弃用整个pod
pod trunk deprecate MyLibrary
弃用并指定替代
# 在podspec中
spec.deprecated = true
spec.deprecated_in_favor_of = 'NewAwesomeLibrary'
常见问题
问题: 标签不匹配
错误 | [MyLibrary] 仓库没有版本1.0.0的标签
解决方案:
# 创建并推送标签
git tag 1.0.0
git push origin --tags
问题: 验证失败
错误 | [MyLibrary] xcodebuild: 返回非成功退出代码
解决方案:
# 运行详细验证
pod lib lint --verbose
# 修复输出中的错误
# 重新验证直到通过
问题: 缺少许可证
错误 | [MyLibrary] 缺少必填属性 `license`
解决方案:
# 添加到podspec
spec.license = { :type => 'MIT', :file => 'LICENSE' }
# 在仓库根目录创建LICENSE文件
最佳实践
发布前测试
# 1. 在示例应用中测试
cd Example
pod install
# 运行应用,验证功能
# 2. 在真实项目中测试
# 创建测试项目,从本地路径添加pod
pod 'MyLibrary', :path => '../MyLibrary'
# 3. 验证
pod lib lint
pod spec lint
版本编号
# 严格遵循语义版本控制
spec.version = '1.0.0' # 初始发布
spec.version = '1.0.1' # 错误修复
spec.version = '1.1.0' # 新功能
spec.version = '2.0.0' # 重大变更
CHANGELOG
# 更新日志
## [1.1.0] - 2024-01-15
### 新增
- 自定义主题支持
- 深色模式兼容性
### 修复
- 后台处理中的内存泄漏
## [1.0.0] - 2024-01-01
- 初始发布
README
# MyLibrary
库的简要描述。
## 安装
```ruby
pod 'MyLibrary', '~> 1.0'
用法
import MyLibrary
let library = MyLibrary()
library.doSomething()
要求
- iOS 13.0+
- Swift 5.7+
许可证
MyLibrary根据MIT许可证提供。
## 反模式
### 不要
❌ 未经测试就发布
```bash
pod trunk push --skip-tests # 有风险
❌ 在初始发布时使用 --allow-warnings
pod trunk push --allow-warnings # 应修复警告
❌ 忘记git标签
# 缺少git标签 - 发布将失败
pod trunk push
❌ 跳过版本号更新
# 更改后版本号仍为1.0.0 - 令人困惑
spec.version = '1.0.0'
要做
✅ 发布前彻底测试
pod lib lint
pod spec lint
# 在真实项目中测试
✅ 修复所有警告
pod lib lint
# 解决警告
✅ 总是git标签
git tag 1.0.0
git push --tags
✅ 每次发布都更新版本号
spec.version = '1.0.1' # 已递增
完整发布示例
# 1. 准备podspec
vim MyLibrary.podspec
# 更新版本到1.0.0
# 2. 更新CHANGELOG
vim CHANGELOG.md
# 记录更改
# 3. 提交并标签
git add .
git commit -m "发布1.0.0: 初始公开发布"
git tag 1.0.0
git push origin main --tags
# 4. 本地验证
pod lib lint
# 5. 发布验证
pod spec lint
# 6. 发布
pod trunk push MyLibrary.podspec
# 7. 验证
pod search MyLibrary
# 应显示你的新pod
相关技能
- cocoapods-podspec-fundamentals
- cocoapods-subspecs-organization
- cocoapods-test-specs
- cocoapods-privacy-manifests