How to Keep Xcode Cloud Build Artifacts Long-Term: 2026 Archiving Guide
📋 Table of Contents
Do not treat Xcode Cloud as permanent storage: identify the artifacts you need, download them while they are available, organize them by build and source commit, and test that you can reopen them. This is for you if you need release diagnostics, test evidence, or a handoff-ready archive rather than a build that exists only in a cloud history.
- Independent publishers: Preserve a release Archive, matching symbols, and relevant build logs for later crash investigation.
- Developers relying on test evidence: Find and reopen historical test results, screenshots, or build records.
- Small teams: Let another developer locate release materials using the app, workflow, build, and commit information.
Operational rule: A successful Xcode Cloud build is not the same as a completed external archive.
An available build is not a permanent archive
Apple documents a limited access window for Xcode Cloud build artifacts. Its workflow documentation says artifacts can be accessed for up to 30 days after a build completes and recommends archiving artifacts used for releases. Treat 30 days as the outer access window described by Apple, not as a safe retention target: download what matters sooner, then check the current Xcode Cloud workflow guidance.
The distinction is operational:
- Platform availability means you can still retrieve an artifact through Xcode Cloud or the associated API.
- Team archiving means you have copied the selected file to storage you control, recorded its origin, and tested that it opens.
- Recoverability means someone can locate the file and use it for the task it was saved for.
Build records, Archives, symbols, logs, and test result bundles are related, but they are not interchangeable. Keeping a build record without its files may help you identify what ran, but it does not restore the Archive. Saving a dSYM without recording which build it belongs to can make it difficult to use for crash analysis.
| Material | Keep it when you need to… | Record alongside it | Recovery check |
|---|---|---|---|
| Build record and commit reference | Locate the workflow run and understand what source was built | App, workflow, build identifier, version, and source commit | Find the same run using your index |
| iOS or macOS Archive | Retain the release build for inspection or a later handoff | App version, build number, scheme, and associated symbols | Open the Archive in a suitable Xcode environment |
| Debug symbols, such as dSYM files | Symbolicate crashes from the matching release | The Archive or binary identity and build reference | Confirm the symbols match the release binary |
| Build logs | Investigate build, signing, or export failures | Workflow and build-run reference | Open the log and search for the original failure |
| Test result bundle and screenshots | Review test outcomes or preserve evidence | Test plan, build reference, and source commit | Open the result bundle and inspect results and attachments |
The App Store Connect API artifact documentation describes artifact information available through the API. Use it to determine what the selected build exposes; do not assume that a build record itself contains every file your team expects to preserve.
Preserve a release Archive for diagnosis, not just distribution
When a released app crashes, the question is not simply “Do you still have the build?” You need to know whether you have the right Archive, the matching symbols, and enough build context to connect them to the affected release.
Start from the build record. Match its app, version, build identifier, workflow, and source commit to the release you are investigating. Then decide which artifacts serve the investigation:
- Keep the Archive when you need the original packaged build available for inspection or handoff.
- Keep the matching debug information when you need to symbolicate crash reports.
- Keep relevant logs when the cause may involve compilation, signing, or export rather than a runtime crash.
- Keep an exported distribution file separately if your release process requires that file. Do not treat it as a substitute for the Archive or symbols.
Apple explains how to include debugging information in a build in its guide to building an app with debugging information. Apply that guidance to your release process, then preserve the resulting symbols with an explicit link to the corresponding build. A folder named “latest symbols” is not enough if it can be overwritten or cannot be tied to a specific release.
A practical record might include:
App: ExampleApp
Workflow: Release
Build: <build identifier>
Version: <marketing version> (<build number>)
Commit: <source commit>
Artifacts: Archive, dSYM, build log
Retrieved: <date and time>
Verified: <name or team role>
Use the values from your own project; the labels above are an organizational example, not a claim about a particular project’s configuration.
Keep test evidence tied to the run that produced it
Test result bundles and screenshots are useful only if you can explain where they came from. A screenshot without a test name, build reference, or commit may show a failure, but it may not tell a teammate how to reproduce it.
When you need to review a test failure later, preserve the result bundle and any screenshots that explain the failure. Include the workflow and build reference, test plan or relevant test target, and source commit. Keep logs when they help explain setup or execution problems. Avoid collecting every attachment by default: decide which files support a real debugging, audit, or handoff need.
For a result bundle, verify more than its filename. Open it in a compatible Xcode environment and check that the test results and relevant attachments are visible. Apple’s information on Xcode Cloud feedback and result bundles is useful when you need to understand the role of a result package or report a problem with it.
If your team uses a separate issue or release record, store its reference beside the artifact index. That gives the next developer a path from a reported test failure to the build run, source commit, and downloaded evidence.
Retrieve artifacts through the API without treating URLs as storage
The App Store Connect API can help you automate retrieval, but it is a discovery and download mechanism, not a retention policy. The general flow is to locate the relevant workflow and build run, inspect the associated artifact records, then retrieve the selected artifact’s attributes and download information.
Apple documents the API resources for Xcode Cloud workflows and builds and build runs. For an individual artifact, consult the single-artifact retrieval endpoint and the artifact attributes reference. Check the current field names, relationships, and response structure there rather than hard-coding assumptions from an old script.
Keep these boundaries in your automation:
- Query by identity: Use the app, workflow, build run, and commit information to select the intended artifact. Do not download the first result simply because it is available.
- Persist the file, not the download URL: A download link is for retrieval, not a durable reference. If it has expired, query the artifact again and obtain current download information.
- Protect credentials: Keep API signing material outside source control and limit access to the automation that needs it. Follow Apple’s current instructions for generating tokens for API requests.
- Make retries visible: Record whether a file is pending, downloaded, verified, or failed. Retrying a request should not silently overwrite a verified artifact with a partial file.
- Verify the result locally: Check that the file exists and is readable after download. A transfer that returned successfully is not proof that the artifact opens.
For implementation details, use the official single-artifact API reference alongside the workflow and build-run documentation. This keeps the article focused on the retrieval pattern: it is not a substitute for a full API integration guide.
Choose retention by the job the artifact must perform
A small team rarely needs to preserve every artifact from every build forever. Make the retention decision from the work you expect to do later: diagnose a release crash, reproduce a test failure, explain a release handoff, or investigate an everyday build problem. Then choose files that support that job.
| Retention purpose | Keep first | Add only when needed | Fit score |
|---|---|---|---|
| Release crash diagnosis | Matching symbols and build identity | Archive, relevant logs, release distribution file | High when build-to-symbol matching is recorded |
| Test reproduction or review | Test result bundle and build identity | Screenshots, logs, related test-plan details | High when the bundle opens and attachments are present |
| Release handoff | Archive, version, build, and commit references | Symbols, export details, release notes | High when another developer can find and inspect the files |
| Routine build troubleshooting | Build record and relevant log | Full Archive or test evidence if the issue requires it | Conditional; avoid retaining unrelated files |
Scoring method: “High” means the selected materials directly support the stated job and have a recovery check. “Conditional” means you should retain additional files only when the incident or release process requires them. These are operational ratings, not measured performance scores.
Set your team’s retention rules by artifact type and purpose. For example, a release archive may have a different owner and retention trigger from routine failure logs. Decide who owns the policy, where files are stored, and how the team reviews exceptions. Do not invent a capacity target or assume all projects produce similarly sized results; measure your own files if storage planning requires it.
Restore materials before you need them
A folder full of files is not a recovery plan. Use a repeatable check that proves a teammate can connect a file to its build and open it for the intended task.
- [ ] Select a real release, test failure, or build issue that your team expects to investigate later.
- [ ] Record the app, workflow, build identifier, version, and source commit from its build record.
- [ ] Identify the required files for that use case: Archive, symbols, logs, test result bundle, screenshots, or a combination.
- [ ] Download the selected artifacts while they remain available, and record the retrieval status and location.
- [ ] Verify the files arrived completely. A checksum can help detect transfer or storage changes, but it does not prove that a file is usable.
- [ ] Open the Archive or test result bundle in a compatible environment and inspect the parts your recovery task depends on.
- [ ] Confirm that the symbols correspond to the build you are preserving.
- [ ] Ask a teammate who did not perform the download to find the files using the archive index.
- [ ] Log missing files, unreadable items, expired links, and ownership gaps; assign someone to resolve each issue.
The exercise is successful when someone can find the requested material, establish which build produced it, and open the file needed for the task. “The script downloaded something” is not a restore test.
Frequently asked questions
How long can you access Xcode Cloud build artifacts?
Apple documents a limited access window for Xcode Cloud artifacts: builds can be available for up to 30 days after completion. Treat that as a download deadline, not as a retention guarantee for your team. Confirm the current rule in Apple’s workflow documentation, then copy the files you need to storage you control and test that they open.
How can you download Xcode Cloud artifacts with the App Store Connect API?
Use the API to find the relevant workflow and build run, inspect its artifact records, and retrieve the selected artifact’s attributes and download information. Download promptly: a returned URL is not a durable archive reference. Store API credentials securely, record each artifact’s build and commit identifiers, and handle expired links by querying the artifact again.
How should you back up an Xcode Cloud Archive and its symbols?
Keep the release Archive and the matching debug symbols together, and record the app version, build number, source commit, and build-run identifier. Symbols are useful only when they match the binary being investigated. If you need an installable distribution file too, retain and label that separately; an Archive, an IPA, and a dSYM file serve different purposes.
How do you know an archived Xcode Cloud test result can be restored?
Check that the downloaded result bundle is complete, open it in a compatible Xcode environment, and confirm that its test results and any required attachments are visible. Compare the opened bundle with the build record and commit saved in your archive index. A successful download or checksum alone proves file transfer, not that the result is readable or useful.
Use a Mac environment only where your workflow needs one
You can keep an archive on storage your team already manages if that storage meets your access, security, and recovery requirements. That approach avoids maintaining another environment, but can leave you with scattered locations, unclear ownership, or a gap between downloading and validating release materials. A persistent Mac environment may make sense when your workflow needs macOS tools to inspect or organize Xcode artifacts; it does not automatically provide durable storage, backups, or reliable transfers.
Before adding an environment, compare the ongoing work it introduces: you must still decide where artifacts live, protect API credentials, document access, and rehearse recovery. For a team evaluating a Mac-based workflow, the MacDate pricing guide can help you review the available commercial information; verify the current terms against your own needs rather than assuming a particular storage or delivery capability.
If you need a Mac for a defined period to download, organize, or validate release materials, review the available options through MacDate’s Mac access page. Keep your artifact archive and recovery procedure under your team’s control, and choose an additional Mac environment only if it fills a documented gap in that process.