Log Entry

在Xcode Cloud中提交并分发代码

改完代码,手动 Archive,等待签名,上传到 App Store Connect,再通知测试人员去 TestFlight 下载

写在前面

“嘿嘿嘿~亲爱的开发者,你也不希望你的代码由于审核导致没通过吧嘿嘿嘿~”

在Xcode写好的本地工程如何进行测试?

如何让别人体验的你写的美丽(丑陋)应用(bug)?

怎么通过apple严格的审核,成功外部测试?

今天我们来讲解一下如何使用Xcode Cloud来进行分发测试,以及一些Xcode Cloud的最佳实践

什么是Xcode Cloud

Xcode Cloud 本质上是一套运行在 Apple 云端基础设施上的 CI/CD 服务。它与 Xcode、TestFlight 和 App Store Connect 无缝集成,核心能力包括:

  • 自动构建:监听 Git 仓库变更,自动触发构建任务;
  • 自动测试:在云端真实的 Apple 硬件/模拟器上运行单元测试和 UI 测试;
  • 自动分发:构建成功后,自动将产物推送至 TestFlight 或 App Store;
  • 通知反馈:通过邮件或 Slack 即时通知构建结果

他不需要你自建 Mac 服务器,无需维护证书环境,Apple 全权托管

当然最大的好处还是这是苹果官方的上传渠道,对苹果的一些服务结合更加紧密无缝

前置准备

在你开始使用Xcode Cloud前,你应该满足以下条件:

  • 已安装 Xcode 15.0 或更高版本;
  • 拥有更高,更强,更棒的 Apple Developer Program 会员资格;
  • 项目代码托管在受支持的 Git 仓库中(GitHub、GitLab、Bitbucket 或 Apple 自家的 Source Control);
  • 项目已在 App Store Connect 中创建对应的 App 记录

这里给出官方要求文档,更详细的版本可以查阅官方文档来确认信息

Apple 官方要求文档

创建工作流

如果你已经有一个完整的项目,并且符合上述条件,想使用Xcode Cloud,第一步应该是创建一个工作流

在Xcode菜单栏找到Integrate选项(根据版本不同,工作流的创建也可能不在这里)

CleanShot_2026-04-14_at_18.21.122x.png

在Integrate的选项下,找到Create Workflow(创建工作流)

CleanShot_2026-04-14_at_18.22.442x.png

点击创建工作流,你应该可以看到如下页面:

CleanShot_2026-04-14_at_18.23.442x.png

点击你想要加入的app,然后next即可

CleanShot_2026-04-14_at_18.33.352x.png

这里我们可以看到四个部分:

配置 General 信息

工作流编辑界面的第一部分是 General,这里可以:

  • 为工作流起一个有意义的名字,例如 CI - PR Check 或 Release - TestFlight;
  • 填写描述,说明这个工作流的用途;
  • 设置编辑权限,防止团队成员误操作。

命名规范很重要,尤其是当一个项目有多个工作流时,清晰的命名能大幅降低维护成本。

当然如果你是轻量级开发(没有代码洁癖)的情况下,保持默认的default也是可以的

选择构建环境(Environment)

Environment 部分允许你指定工作流使用的 Xcode 版本和 macOS 版本。Xcode Cloud 提供了多个版本选项,包括稳定版和 Beta 版,这对于需要同时验证多个系统版本兼容性的团队非常有价值。

这里还有一个重要选项:Clean 构建。勾选后,每次构建前都会清除派生数据(Derived Data),确保构建环境干净。对于提交到 TestFlight 外部测试的构建,建议始终开启 Clean,以避免缓存导致的隐性问题。

此外,你还可以在这里配置环境变量。如果你的构建脚本需要读取 API Key、Bundle ID 等敏感信息,可以将其设为 Secret 变量,Xcode Cloud 会对其加密存储,日志中不会明文显示

设置启动条件(Start Conditions)

Start Conditions 决定了工作流何时被触发。默认配置是"任意分支的任意文件变更即触发",这对大多数项目来说过于宽泛,建议根据实际需求调整。

常用的触发策略包括:

  • 特定分支推送:只在 main、release/* 等分支有提交时触发,适合发布流水线;
  • Pull Request 变更:每当有 PR 创建或更新时触发,适合代码审查前的自动验证;
  • Git Tag 变更:在打 Tag 时触发,适合版本发布节点;
  • 定时触发:设定固定时间(如每天凌晨)自动运行,适合夜间回归测试;
  • 手动触发:完全由开发者手动启动,适合临时需求。

值得一提的是,大多数触发器都支持 Auto Cancel Builds 选项,即当同一触发条件短时间内多次触发时,自动取消旧的构建,只保留最新一次。这个功能默认开启,能有效节省计算时间配额

你知道吗:
Xcode Cloud实际上是按照使用时间来收费的
在你作为普通Apple Developer Program 会员的时候,你拥有每个月 25h的使用额度
如果你不编译不运行直接提交git,让Xcode cloud编译,你的额度会很快消失
这种情况下,你如果还想使用Xcode Cloud,你就必须再给苹果交钱咯!!!

添加工作流动作(Actions)

动作(Actions)是工作流的核心,定义了工作流具体要执行什么任务。默认情况下只有一个 Build 动作,你可以根据需要继续添加:

Build 是基础动作,用于编译指定的 App Scheme。如果 Scheme 配置有问题,Xcode Cloud 会在此阶段给出警告。

Test 动作会在云端运行你的单元测试和 UI 测试。你可以指定在哪些模拟器设备上运行测试,并设置 Requirement——即该测试是否必须通过,工作流才能继续执行。这是保障代码质量的关键一环。

Analyze 动作会运行 Clang 静态分析器,检查潜在的内存泄漏、逻辑错误等问题。

Archive 动作会对 App 进行归档并签名,是分发到 TestFlight 或 App Store 的前提

配置后续动作(Post-Actions)

后续动作在所有构建动作完成后执行,主要包括:

  • 分发到 TestFlight:可以指定发布给内部测试人员或外部测试组;
  • 提交到 App Store:直接推送至 App Store 审核队列;
  • 通知(Notify):通过邮件或 Slack 发送构建结果通知,可以精细配置通知规则——仅在失败时通知、仅在从失败恢复时通知,或全部通知

查看构建结果

如果你成功构建,apple会给你发送邮件一封,展示你的构建情况

如果你失败了,apple同样也会邮件一封,告诉你构建出现的问题

此外,你也可以在App Store Connect 中,进入你的 App 详情页,点击顶部的 Xcode Cloud 标签,可以查看构建列表、手动触发工作流、管理 TestFlight 分发等

Xcode也提供了查看构建现状的功能,在导航栏的最后一部分

CleanShot_2026-04-14_at_18.41.102x.png

点击之后,就可以看到构建情况了

一些实用建议

CleanShot_2026-04-14_at_18.41.222x.png

在实际使用中,有几点经验值得分享。

首先,不要只建一个工作流,推荐至少区分"PR 验证流"和"发布流"——前者轻量快速,只做构建和测试;后者完整执行 Archive 和 TestFlight 分发

其次,合理利用分支策略,将发布流绑定到受保护的分支(如 main),避免意外触发

第三,善用环境变量管理多环境配置(开发、测试、生产),比在代码里硬编码要干净得多

参考文献:

  1. 开始使用 Xcode Cloud - Apple Developer
  2. Xcode Cloud 使用指南 - kilig.blog
  3. Xcode Cloud 持续集成实战指南 - OSChina
  4. XCode Cloud 的 CICD - Medium
  5. 深入了解适用于团队的 Xcode Cloud - WWDC22 - Apple Developer
  6. Writing Custom Build Scripts - Apple Developer Documentation
  7. Requirements for Using Xcode Cloud - Apple Developer Documentation