Xcode Cloud 构建产物怎么长期保存?2026 归档指南

Xcode Cloud 构建产物怎么长期保存?2026 归档指南

症状:正式版本要查崩溃,或测试结果要回看时,Xcode Cloud 里的旧构建材料已经找不到。
最快解法:不要把 Xcode Cloud 当作永久归档库;先确定要留什么,在可访问窗口内下载,按构建和提交信息归档,再打开文件验证可读、可恢复。

这篇适合需要保存正式版本 Archive、符号信息或发布日志的独立开发者;也适合需要找回测试结果、截图和构建记录的开发者。
如果你负责小团队交接,这套方法能帮助成员按工作流、构建标识和源码提交定位材料。

正式版本诊断:Archive 与符号信息各有用途

正式版本发布后出现崩溃,只有 IPA 或 App Store Connect 中的版本记录,未必足以支持后续诊断。你需要按问题类型保留互相补充的材料:

  • Archive(归档):留存对应发布构建的 Xcode Archive,便于之后核对或处理这次构建。Apple 建议保留每个分发版本的 Xcode Archive;缺少 Archive,可能无法从崩溃报告诊断问题。Apple 的调试信息构建说明也明确提醒保留它。
  • 符号信息:用于把崩溃报告中的地址对应到可识别的符号。不要把符号文件当成 Archive 的替代品;保存时应标明它对应的应用版本和构建。
  • 构建日志:用于回看当时的构建步骤、警告和错误;它不能代替可执行产物,也不一定能重建完整构建环境。

Apple 文档说明,Xcode Cloud 构建信息和产物从构建完成起可访问 30 天。这指的是平台上的访问窗口,不代表团队已经完成外部归档;正式发布用的材料应在窗口内下载并核验。Xcode Cloud 工作流文档列出了访问期限和构建产物类型。

排查时先从构建记录确认版本、构建号、提交信息和工作流,再决定保存哪些文件。如果崩溃报告是主要诊断入口,优先确保 Archive 与相应符号信息能相互对应;需要回查构建过程时,再加上相关日志。

测试复现:结果包与截图要有来源

测试结果包和自动化测试截图,适合用于确认某次测试做了什么、结果如何;日志则帮助解释测试执行过程中的异常。三类材料各自解决不同问题,别只留下一个压缩包,却没有记录它来自哪个构建。

Apple 将测试结果包列为 Xcode Cloud 构建产物,并说明其中可以包含自动化 UI 测试创建的截图。Xcode Cloud 产物信息文档将产物描述为构建操作输出,例如 Archive、测试结果包或构建日志。

归档测试材料时,把工作流名称、构建标识、源码提交和下载文件放在同一条记录里。这样你以后找到结果包时,能判断它属于哪一次运行,而不是误把相似提交的测试结果当成目标版本证据。若要保留失败现场,按具体问题选择相关动作的日志、测试结果包和截图;不必把每次构建的全部文件都永久保存。

团队交接:按构建与提交组织材料

交接时最常见的隐性成本,不是文件找不到,而是找到后无法判断它是否属于目标发布。版本号可能重复用于不同分支,文件名也可能被下载工具改写;因此,归档目录不能只靠“日期加压缩包”来说明来源。

可以按应用、工作流、构建标识和源码提交组织目录,或把这些信息存入同一份归档清单。每次保存时至少记录:

  • 应用与平台,以及工作流名称。
  • 构建标识、版本号和源码提交。
  • 每个下载文件的类型、文件名和保存位置。
  • 下载与验收状态;若有缺项,记下缺失材料和跟进责任人。

这不是要求所有团队采用同一套目录结构,而是确保另一个成员能从记录回到构建,再从构建定位文件。App Store Connect API 提供读取 Xcode Cloud 产品、工作流、构建、产物、问题和测试结果的资源;API 工作流与构建说明介绍了这些可读取的数据范围。

按用途取舍:永久留存不等于全量下载

留存范围应由之后要做的事决定。正式发布诊断侧重 Archive 和相应符号信息;测试复现侧重结果包、截图和关联提交;日常故障排查则可能只需保留特定构建动作的日志或结果。

文件大小和存储成本取决于项目产物,不能用没有项目数据支撑的固定容量或金额来代替评估。你可以先抽查近期构建,记录实际文件类型与体积,再按发布诊断、测试复现和日常排查制定保留规则。对暂时没有明确用途的重复材料,可以设置内部清理策略,而不是默认永久保存所有文件。

Apple 的构建问题排查文档说明,可以从失败动作下载构建日志及其他产物,例如结果包。这支持按故障场景选择材料,而不必把每次运行的所有输出都视为同等重要。

API 自动下载:查询记录后再取产物

自动化下载的基本流程是:先定位构建记录,再查询相关构建动作和产物信息,最后读取文件信息并下载。不要把它误当成从零搭建 CI 的教程;关键是确认每个构建的材料有没有完整落地,并能追溯回对应记录。

App Store Connect API 的构建记录资源包含构建状态、构建号、开始与完成日期及执行动作;产物资源则描述 Xcode Cloud 生成的文件和下载信息。可从 Apple 的Build Runs 资源说明与单个产物读取接口核对当前端点和字段。

这里有两个容易漏掉的边界:

  • API 返回的 downloadUrl 是产物下载地址,不是你自己的永久归档地址。下载失败时,应根据当前 API 文档重新取得文件信息和地址,而不是无限重试旧链接。
  • API 请求使用 JWT 认证。把私钥作为敏感凭据管理,限制可访问的自动化环境,并设置清晰的失败、重试和状态记录规则。Apple 的令牌文档说明了 API 请求的 JWT 认证方式;产物属性文档则定义了下载地址字段。

下载流程至少要区分“已请求”“已下载”和“已验证”。网络请求成功不代表压缩包完整;文件存在也不代表能打开。记录失败原因和最后成功步骤,才有条件在下一次运行中补齐缺失材料。

恢复验收:确认副本可以实际使用

将文件复制到外部存储,只完成了保存动作;如果没有打开过归档副本,也没有核对记录,团队仍不知道恢复是否有效。把验收放在每次归档之后,而不是等到崩溃调查或人员交接时才发现问题。

  • [ ] 按工作流、构建标识和源码提交,确认归档记录能定位到目标构建。
  • [ ] 核对目标 Archive、符号信息、日志或测试结果是否已下载;逐项标注不适用和缺失。
  • [ ] 在归档副本上打开关键产物,确认内容可读,测试结果与截图能对应到预期运行。
  • [ ] 将实际检查结果写回记录,包括失败项、缺失原因和后续责任人。
  • [ ] 由另一位成员按这份记录独立找回一次材料;找不到或打不开,就不要标记为恢复通过。

对于测试结果包,Apple 的结果包与 Xcode Cloud 反馈说明区分了结果包、命令文本日志和特殊诊断日志等材料。你可以据此判断故障复盘要保留哪些证据,而不是把名称相近的文件当作同一种材料。

常见问题:期限、API 与恢复边界

期限内没下载,就能靠 App Store Connect 版本记录恢复 Archive 吗?
不能据此假设 Archive 一定可恢复。构建记录与可下载产物不是一回事;应分别确认记录是否仍可见、目标产物是否还能取得,并优先完成外部下载和验收。

保存了 dSYM,就不需要留 Archive 了吗?
不能一概而论。符号信息和 Archive 用途不同;如果这次是正式分发版本,Apple 建议保留 Archive。归档清单应区分文件类型并核对它们属于同一构建。

自动下载失败后,应该一直重试同一个链接吗?
不建议。下载地址应作为取得文件的临时入口处理;先记录错误,再按当前 App Store Connect API 文档重新读取产物信息。是否能重试、如何获取新地址,以当时的接口行为为准。

Mac 环境的作用:整理与检查,不替代归档

远程 Mac 可以作为下载、整理或打开关键产物进行验收的环境之一,但它本身不等于备份策略。你仍需决定文件保存到哪里、如何管理 API 私钥、谁能访问归档,以及如何验证恢复。

如果你想比较自购设备与按需使用远程 Mac 的思路,可以先看Mac mini 价格与购买决策指南,再结合自己的工作频率、存储方案和维护责任判断。MacDate 提供按周、按月或按季租用托管真实 Mac 的方式,可通过 VNC、SSH 或网页控制台访问;是否适合你的归档流程,仍要先用一次实际下载和恢复检查验收。

若你当前的流程需要一个 Mac 环境来整理或复核 Xcode Cloud 下载的材料,可以从 MacDate 的远程 Mac 方案了解服务信息,再按团队已有的外部存储和工作流决定是否需要额外环境。租用不能替代独立备份,也不适合要求固定本地物理接口或长期持续满载、且更适合自购设备的场景。