Apple 将 Xcode Cloud 构建完成状态分为 5 类:成功、失败、错误、取消和跳过。 这意味着,看到非成功结果时,先查报告里的最终状态与失败动作,再读对应日志、复现同一提交;只有需要交互式 Xcode 操作或本地 macOS 对照时,才考虑远程 Mac。(developer.apple.com)
谁适合看: 应用运营或产品负责人,可据此区分代码、配置和工作流问题。
维护 iOS 项目的协作者,可按失败提交检查依赖、scheme 与权限。
负责 macOS 环境的团队负责人,可判断是否需要独立 Mac 做对照验证。
Xcode Cloud 构建失败,先按最终状态分流
“失败”“错误”“取消”“跳过”不是同一类问题。Apple 对状态的定义可帮助我们避免把自动取消、内部执行错误都当成代码缺陷。(developer.apple.com)
| 报告状态 | 先怎么理解 | 首要检查方向 |
|---|---|---|
| Failed(失败) | 工作流中的构建或测试等动作未通过;测试被设为必须通过时,测试失败也可能导致该状态 | 展开报告中的失败动作,找具体错误与失败阶段 |
| Errored(错误) | 执行过程中发生服务内部错误 | 记录构建和动作信息,查看日志;若没有项目侧错误线索,保留报告用于反馈 |
| Canceled(取消) | 可能是手动取消,也可能由工作流的自动取消设置触发 | 对照触发时间、工作流设置与操作记录 |
| Skipped(跳过) | 工作流未执行该次构建,例如自动取消设置下短时间内推送多次更改 | 检查工作流触发条件和连续提交情况 |
| Succeeded(成功) | 构建已成功完成 | 若预期的测试或归档未执行,核对该工作流配置了哪些动作 |
看到邮件通知中的非成功状态,不要立即重跑或改代码。先记下状态、构建对应的提交、工作流名称和动作名称。对于“取消”或“跳过”,先查触发规则;只有报告指向失败动作或执行错误时,才沿着该动作继续排查。
构建被取消或跳过,是否需要修复代码? 不一定。若状态与自动取消设置或触发条件吻合,应先核实工作流行为,而不是把它当作编译错误处理。
从构建报告进入具体日志
Xcode Cloud 构建日志可以从 Xcode 的 Report navigator 或 App Store Connect 的 Xcode Cloud 页面查看。Apple 文档指引的路径是:在报告中选择构建,展开失败动作,再打开 Logs;也可以在 App Store Connect 选择对应应用、进入 Xcode Cloud 的 Builds,找到工作流和构建后展开动作查看日志。(developer.apple.com)
查看时按下面的顺序记录线索:
- 找到失败构建,记下提交标识和工作流名称。
- 展开报告中标记失败的动作,确认是构建、测试、分析还是归档阶段。
- 打开该动作的 Logs,从与失败阶段相关的第一条错误开始阅读。
- 把日志中的错误信息、失败动作和提交标识放在一起,再判断是编译问题、脚本问题、依赖解析问题还是访问问题。
- 如需交给协作者排查,分享脱敏后的报告截图或日志片段,并遮盖令牌、私有地址和其他敏感信息。
只看邮件摘要容易漏掉动作级别的信息。Xcode Cloud 报告还可提供构建产物;Apple 说明构建完成后的信息和产物可访问 30 天,需要留档的报告、日志或结果包应及时下载保存。(developer.apple.com)
提醒:不要把整份含凭证或内部仓库地址的日志贴到公开讨论区。分享前先检查访问令牌、私有依赖地址和团队信息。
Xcode Cloud 构建日志在哪里看? 在 Xcode 的 Report navigator 选中构建并展开失败动作,或在 App Store Connect 的 Xcode Cloud → Builds 中选择构建,再展开动作打开 Logs。优先查看失败动作的详细日志,而不是只凭邮件通知推断原因。
本地复现必须对齐失败提交与失败动作
本地编译通过,并不能证明云端故障已消失。如果本地检查的是最新分支,但失败构建运行的是另一个提交,比较结果就没有可比性。Apple 建议在构建报告中切换到失败构建对应的提交,并在本地执行失败的动作。(developer.apple.com)
怎么复现某次失败构建? 打开该构建的报告,查看对应提交,再通过报告中的 Switch To 流程切换到失败提交,或检出该提交;随后在 Xcode 中执行与失败动作相同的操作。不要只打开项目后随意运行一次 Build,就认为已经复现了测试或归档失败。
我们建议按这个顺序操作:
- 在报告里确认失败构建使用的提交,避免检出当前分支最新内容。
- 在本地确认工作区处于该提交对应的项目状态;若有未提交改动,先记录或隔离,避免污染对照。
- 找到失败的动作,并在 Xcode 中执行对应的构建、测试或归档操作。
- 对比本地结果与云端日志:本地也失败,优先查代码或项目配置;本地通过,继续核对工作流环境、触发条件和云端可访问资源。
- 修正后重新运行相同工作流,检查新的报告和相同动作是否通过。
若本地与云端结果不同,把差异当作线索,不要立刻断言是云端服务故障。提交状态、工作流所选的 macOS 与 Xcode 环境、依赖下载条件和脚本行为都可能影响复现结果。
依赖、环境和项目权限分开核查
Xcode Cloud 工作流包含临时构建环境、仓库检出、依赖解析、脚本和具体动作;工作流还能选择可用的 macOS 与 Xcode 版本。Apple 提醒,可用环境可能调整,因此要以当前工作流界面和官方文档为准,不把过去使用的版本视为永久可用承诺。(developer.apple.com)
| 日志或现象 | 核对项目 | 处理方向 |
|---|---|---|
| 找不到包或依赖解析失败 | 依赖声明、锁定文件是否提交;私有依赖仓库是否已授权;构建环境能否访问所需资源 | 把依赖可用性与编译错误分开调查;按项目实际依赖配置访问权限 |
| 找不到 scheme 或执行了错误目标 | 项目共享的 scheme、工作流选定的产品、平台和动作 | 确认云端能识别所需 scheme,并且工作流选择的目标与预期一致 |
| 仓库克隆或授权失败 | 仓库授权、团队角色、私有仓库或子模块访问 | 检查 Xcode Cloud 对代码仓库及相关依赖仓库的访问权限 |
| 缺少 capability 或签名相关设置报错 | App ID 所需能力、项目的 Signing & Capabilities 配置及团队权限 | 对照当前项目和账号配置修正;不要把它归为单纯换机器问题 |
| 仅在某个动作或脚本失败 | 失败动作、工作流脚本及其前置条件 | 先确认失败发生在哪个动作,再核对脚本需要的工具和输入 |
依赖问题尤其容易被误判成“云端没有装好工具”。Xcode Cloud 对公开可访问的 Swift Package 和 Git submodule 有相应支持,但私有依赖需要确保授权与访问路径可用。自托管仓库还需要满足连接要求;Apple 的源代码管理说明列出持续 HTTPS 访问与仓库授权等检查点。(developer.apple.com)
scheme 和 capability 也应分开检查。仓库权限解决的是“云端能否取到代码”,共享 scheme 解决的是“工作流能否找到正确项目目标”,App ID 能力与签名配置则属于项目或账号设置。租用另一台 Mac 不会自动补齐这些权限或配置。
Xcode Cloud 找不到依赖或仓库权限不足时怎么办? 先确认失败发生在仓库检出、依赖解析还是编译动作,再检查相应仓库的访问授权、依赖声明与锁定文件是否提交。不要用一个未经验证的通用命令覆盖不同依赖管理方式;私有资源的授权也不能靠换 Mac 替代。
用可勾选清单判断是否需要本地 Mac 对照
以下清单用于判断问题是否需要本地 macOS 环境,并不是用 Mac 取代云端排查:
- [ ] 已记录失败状态、提交、工作流和失败动作。
- [ ] 已在 Xcode 或 App Store Connect 打开该动作的详细日志。
- [ ] 已按失败提交复现,而不是在当前分支上做不对应的测试。
- [ ] 已核对工作流选择的 macOS、Xcode、scheme 与动作。
- [ ] 已分别检查依赖可用性、仓库访问和项目能力配置。
- [ ] 已修正问题,并重新运行相同工作流复核结果。
什么时候值得用本地 Mac 排查? 当需要交互式打开 Xcode、检查项目状态、验证本地工具链,或对照真实 macOS 环境时,本地 Mac 才能补充云端日志无法直接给出的观察。若问题是仓库授权、云端服务内部错误或 App ID 权限,仅有另一台 Mac 通常不能直接解决。
远程 Mac 可作为可评估的交互式 macOS 工作环境,用来检出同一提交、打开项目并复现对应动作;它不能代替 Xcode Cloud 的构建报告,也不能代替权限修复或 Apple 平台处理。若团队正在评估远程环境,可以先查看 DebugMac 的使用指南,并了解 硅谷部署环境信息。实际是否适用,应以能否访问项目、完成失败动作并安全交付日志或文件为准。
云端构建把临时环境、仓库授权和工作流动作放在一起执行,出错时排查范围较广;纯本地方案则需要团队自备并维护 Mac,跨地域协作时还要处理访问和文件交接。若已确认问题需要交互式 Xcode 或 macOS 对照,而团队又不想为一次排查采购和长期维护设备,可以评估 DebugMac 的远程 Mac 环境,并用自己的失败提交验证访问、复现和文件交付条件。这只是本地对照方案,不是修复 Xcode Cloud 云端故障的保证,也不保证构建、签名或审核必然成功。
用 DebugMac 独享 Mac 复现构建问题
把同一提交放到独享物理节点上对照运行,帮助判断失败是否与本地环境或构建配置有关。
