Highlight
Xcode Cloud 通过”何时触发(Start Conditions)+ 执行什么(Actions)+ 在什么环境运行(Environment)“的三维配置模型,让个人开发者用单个 workflow 实现自动构建分发,让中型团队用三个 workflow(PR 验证 / Beta 内测 / Release 发布)覆盖完整开发流程,让大型团队通过”Not Required To Pass”测试模式平滑迁移遗留测试到云端。
核心内容
个人开发者:一个 workflow 搞定全部
一个人维护 iOS + macOS 双平台应用,用 CocoaPods 管理依赖,通过 TestFlight 给亲友测试。手动构建和分发占用大量时间。
Xcode Cloud 的解法是创建一个 CI Workflow:
- 触发条件:任意分支的代码推送(Any Branch)
- 构建动作:iOS 和 macOS 双平台 Archive,选择 “TestFlight and App Store” 部署准备
- 后置动作:自动上传到 TestFlight 的 “Friends and Family” 测试组
CocoaPods 依赖通过 post-clone 自定义脚本处理。Xcode Cloud 原生支持 Swift Package Manager,其他依赖管理器只需在 ci_scripts/post_clone.sh 中安装即可。
(02:28)
中型团队:三个 workflow 分工协作
跨时区团队,有开发者、项目经理和 QA。工作模式:开发者在自己的分支开发,通过 PR 合并到 beta 分支,QA 测试后合并到 release 分支打 tag 发布。
PR Workflow:
- 触发条件:目标分支为 beta 的 Pull Request
- 动作:在 iPhone 13、iPhone 14 Pro Max、iPad mini、iPad Pro 四种设备上跑测试
- 目的:合并前确保代码质量
Beta Release Workflow:
- 触发条件:beta 分支的代码推送
- 动作:先跑测试,再 Archive(选择 TestFlight Internal Testing)
- 后置动作:分发给 “QA Team” 测试组
- 自定义脚本:pre-build 阶段替换应用图标为 Beta 版本图标
Release Workflow:
- 触发条件:tag 名以 “release/” 开头的推送
- 动作:Archive(选择 TestFlight and App Store)
- 后置动作:先分发给内部 “Executive Stakeholders”,再分发给外部 “Early Adopters”
- 通知:构建完成后发送 Slack 消息到 “Releases Feed” 频道
(07:30)
大型团队:渐进式迁移策略
大型团队有复杂代码库和大量遗留测试,已经在用自建的 CI/CD 系统。直接全部迁移风险太高。
推荐分三步走:
- 先建 Release Workflow:把 App Store 归档构建迁到 Xcode Cloud,利用内置的云端代码签名(Cloud Code Signing),省去证书和描述文件管理
- 再迁测试:创建 PR workflow,把所有测试标记为 “Not Required To Pass”。测试失败不会阻塞合并,但可以收集测试可靠性数据。运行一段时间后,把稳定通过的测试移入 “Reliable Tests” Test Plan,再新建一个 Required 的测试动作只跑这些稳定测试。不稳定的测试继续修复,逐步迁移
- 最后补齐其他 workflow:利用 webhook 和 Xcode Cloud Public API 与现有的项目管理工具、Dashboard 集成
(19:12)
详细内容
Workflow 的核心概念
Xcode Cloud 的 workflow 由三个维度定义:
- What(做什么):Build、Test、Archive、Analyze 等 Actions
- Where(在什么环境):Xcode 版本、macOS 版本、环境变量
- When(何时触发):Branch Changes、Pull Request Changes、Tag Changes、Schedule
自定义构建脚本
Xcode Cloud 在构建的不同阶段提供钩子脚本,放在项目根目录的 ci_scripts/ 文件夹中:
| 脚本名 | 执行时机 | 用途 |
|---|---|---|
ci_post_clone.sh | 代码克隆完成后 | 安装依赖(如 CocoaPods) |
ci_pre_xcodebuild.sh | Xcode 构建开始前 | 修改构建配置(如替换图标) |
ci_post_xcodebuild.sh | Xcode 构建完成后 | 上传额外产物、发送通知 |
Beta 图标替换脚本示例
(14:38)
#!/bin/sh
# ci_pre_xcodebuild.sh
if [[ "$CI_XCODEBUILD_ACTION" == "archive" && "$CI_WORKFLOW" == "Beta" ]]; then
echo "Replacing app icon with beta icon"
mv BetaAppIcon.appiconset ../App/Assets.xcassets/AppIcon.appiconset
fi
关键点:
CI_XCODEBUILD_ACTION环境变量标识当前执行的动作(archive / build / test 等)CI_WORKFLOW环境变量标识当前 workflow 的名称- 通过条件判断只在 Beta workflow 的 Archive 阶段替换图标
- 脚本放在
ci_scripts/ci_pre_xcodebuild.sh,Xcode Cloud 会自动识别执行
”Not Required To Pass” 测试迁移模式
(23:21)
大型团队迁移测试时的核心痛点:测试在旧 CI 环境中稳定运行,但在新环境中可能因时序、资源等差异失败。如果直接设为 Required,会阻塞正常开发。
Xcode Cloud 允许把测试 Action 的 Requirement 设为 “Not Required To Pass”:
- 测试失败不会导致构建失败
- PR 仍可以合并
- 团队可以观察测试在新环境中的稳定性
运行一段时间后,把稳定通过的测试移入新的 Test Plan,再创建一个 Required 的测试 Action 专门跑这些测试。不稳定的测试逐个修复,逐步迁移到 Required。
Webhook 与 Public API 集成
(26:44)
Xcode Cloud 支持两种外部集成方式:
Webhook:构建完成后向指定 URL 发送 HTTP 请求,包含构建状态、workflow 信息、提交信息等。可以在自己的服务器上接收后创建工单、更新 Dashboard。
Public API:通过 App Store Connect API 查询构建历史、获取构建详情、下载构建产物。适合在内部 Dashboard 或状态页展示构建数据。
工作流复用技巧
(16:16)
Xcode Cloud 支持右键复制 workflow。Release workflow 和 Beta workflow 通常高度相似,可以直接复制后修改:
- 改触发条件(Branch Changes → Tag Changes)
- 改部署准备选项(Internal Testing → TestFlight and App Store)
- 改测试组(QA Team → Executive Stakeholders + Early Adopters)
- 加通知渠道(Slack / Email)
核心启发
1. 为不同分支自动切换应用配置
做什么:根据构建目标(Debug / Beta / Release)自动切换 Bundle ID、应用图标、API endpoint。
为什么值得做:避免手动维护多个 target 或 scheme,减少配置错误。Xcode Cloud 的自定义脚本 + 环境变量让这件事完全自动化。
怎么开始:在 ci_pre_xcodebuild.sh 中根据 CI_WORKFLOW 和 CI_BRANCH 环境变量,用 plutil 修改 Info.plist 中的 API endpoint,用 mv 替换 AppIcon。
2. 构建失败自动创建 Jira/Linear 工单
做什么:Xcode Cloud 构建失败时,自动在项目管理工具中创建修复工单并指派给相关开发者。
为什么值得做:大型团队中构建失败容易被忽略。通过 webhook 接收构建状态,自动创建工单可以确保问题被跟踪和修复。
怎么开始:配置 Xcode Cloud webhook 指向自己的服务器,解析构建失败信息,调用 Jira/Linear API 创建工单。commit author 可以从 webhook payload 的 scmCommit.author 字段获取。
3. 测试稳定性 Dashboard
做什么:用 Xcode Cloud Public API 拉取历史构建数据,生成测试通过率趋势图。
为什么值得做:“Not Required To Pass” 模式下的测试数据可以量化哪些测试不稳定,帮助团队优先修复 flaky test。
怎么开始:用 App Store Connect API 的 /ciBuildRuns 端点获取构建历史,统计每个测试用例的失败率和失败原因,用 Grafana 或自建页面展示。
4. PR 构建时间优化
做什么:根据 PR 修改的文件路径,只跑相关的测试子集。
为什么值得做:大型项目测试套件可能跑几十分钟。通过分析 git diff 中的修改文件,只触发相关模块的测试,可以大幅缩短 PR 反馈时间。
怎么开始:在 PR workflow 的 pre-build 脚本中用 git diff 分析修改文件,结合测试映射表(如 Models/ 目录修改只跑 Model 测试),动态生成 Test Plan 并传入 xcodebuild。
关联 Session
- Author fast and reliable tests for Xcode Cloud — 编写快速可靠的测试,与 Xcode Cloud 配合使用
- Deep dive into Xcode Cloud for teams — 深入了解 Xcode Cloud 的团队协作功能
- Customize your advanced Xcode Cloud workflows — 自定义高级 Xcode Cloud 工作流
评论
GitHub Issues · utterances