深入探索 Xcode Cloud 工作流
Explore Xcode Cloud workflows
2021年6月8日
一句话判断
Workflow 是 Xcode Cloud 的核心编排单元——搞清楚触发条件、环境和操作的组合方式,才算真正会用这个 CI 系统。
这场 Session 讲了什么
在「Meet Xcode Cloud」介绍了基本概念之后,这个 Session 深入到 workflow 的配置细节。一个 workflow 由三部分组成:触发条件(什么时候跑)、环境(在什么设备/系统上跑)、操作(具体跑什么)。
触发条件可以是分支 push、pull request、tag 创建或者定时触发。你可以用通配符或正则匹配分支名——比如只在 release/* 分支上触发 App Store 构建,在所有 PR 上只跑测试。环境配置包括 Xcode 版本、macOS 版本、以及测试的目标设备矩阵(iPhone 12、iPad Pro、Apple TV 等等)。操作则分为三种:Build(编译)、Test(运行测试)、Archive(归档并分发到 TestFlight 或 App Store)。
Session 特别强调了「Start Condition」的概念——一个 workflow 的触发可以是多个条件的组合。比如你可以设置「当 PR 针对主分支时触发」而不是「当主分支有 push 时触发」,这种细粒度控制在大型团队中非常有用。
值得深挖的点
设备矩阵的策略选择。 你可以在一个 workflow 中指定多个测试设备,Xcode Cloud 会在每台设备上并行执行测试。但要注意计费方式——如果你选了 5 台设备,一个耗时 10 分钟的测试会消耗 50 个并发分钟。合理的做法是:PR 上只跑 1-2 台当前主力设备做快速验证,release 分支上跑完整的设备矩阵。另外,watchOS 和 Apple TV 的测试执行速度通常比 iOS 慢,在选择矩阵时要考虑这个因素。
Archive 操作的签名和分发自动化。 当你的 workflow 包含 Archive 操作时,Xcode Cloud 会自动处理代码签名——你只需要在 App Store Connect 中上传一次分发证书。构建完成后可以选择自动分发到 TestFlight(Internal Testing 或 External Testing)或直接提交 App Store Review。对于内测版本,你甚至可以设置自动分发,让每个成功的构建立刻可下载,省去手动分发的步骤。
代码片段
#!/bin/bash
# ci_scripts/ci_post_clone.sh
# 根据分支名决定构建行为
set -euo pipefail
echo "当前分支: $CI_COMMIT_BRANCH"
echo "Xcode 版本: $CI_XCODE_VERSION"
# release 分支执行额外的发布前检查
if [[ "$CI_COMMIT_BRANCH" == release/* ]]; then
echo "检测到 release 分支,执行严格检查"
# 运行完整测试套件
# 检查版本号格式
fi
// Xcode Cloud workflow 配置示例(在 App Store Connect 中操作)
//
// Workflow: "PR 验证"
// 触发条件: Pull Request -> 任何分支
// 操作: Build + Test
// 设备: iPhone 13 (iOS 15), iPad Pro (iPadOS 15)
// scheme: MyApp
//
// Workflow: "Release 构建"
// 触发条件: Push -> release/* 分支
// 操作: Build + Test + Archive
// 设备: 完整设备矩阵
// 分发: TestFlight Internal Testing
#!/bin/bash
# ci_scripts/ci_post_xcodebuild.sh
# 构建成功后收集产物
set -euo pipefail
# Xcode Cloud 的构建产物路径
ARCHIVE_PATH="$CI_ARCHIVE_PATH"
DSYM_PATH="$CI_DERIVED_DATA_PATH/Build/Products/"
echo "归档路径: $ARCHIVE_PATH"
echo "dSYM 路径: $DSYM_PATH"
# 可以在这里上传符号文件到第三方崩溃监控服务
最佳实践
- 为不同场景创建独立 workflow:PR 验证(快速反馈)、Nightly Build(完整测试)、Release 构建(归档分发)。不要试图用一个 workflow 覆盖所有场景
- 利用 Xcode Cloud 的 webhook 通知,把构建结果推送到 Slack 或 Teams,让团队及时感知 CI 状态
CI_XCODE_VERSION环境变量可以帮助你确认云端使用的 Xcode 版本,如果和本地不一致可能导致构建失败
还有什么值得关注
- Xcode Cloud 支持环境变量配置,可以在 workflow 设置中添加 API Key 等敏感信息(加密存储)
- 构建日志可以在 Xcode 中实时查看,也可以在 App Store Connect 的网页上回看
- 同一个 App 可以有最多 24 个 workflow,覆盖不同团队和发布流程的需求