iOS Build Server Low Disk? 2026 Xcode 27: Clean or Expand

This guide helps independent developers and small teams handle a low-disk iOS build server without destroying signing assets or release evidence. It separates DerivedData, Simulator components, dependency caches, archives, and diagnostic files, then shows when cleanup is safer than expansion or a second remote Mac.

iOS Build Server Low Disk? 2026 Xcode 27: Clean or Expand

Table of Contents

A remote Archive suddenly fails with a disk-space error even though the source code and developer account are fine.

Fastest fix: do not wipe the server. First separate reproducible build data, Simulator components, dependency caches, and release evidence; clean only the safe layer, then expand or add another Mac if the same pressure returns.

Who this guide is for

This guide is for an independent developer with one remote Mac and repeated storage alerts during iOS builds. It gives you a safe cleanup order instead of a blind deletion script.

It also helps teams that must retain Xcode 27, several Simulator runtimes, historical Archives, or automated publishing jobs. You can use the scenario decisions below to choose between single-machine governance, storage expansion, and a separate build host.

Start with the storage layer, not the delete command

An iOS build server low on disk is not automatically an expansion problem. Xcode can create DerivedData, build outputs, test results, archives, and other intermediate files during different workflows. The build system determines how these products are generated and reused, so inspect the actual host before choosing a cleanup target. See Apple’s Xcode Build System documentation for the relationship between build actions and products.

The first inspection should answer five questions:

Use measurement commands before removal. For example:

df -h
du -sh ~/Library/Developer/Xcode/* 2>/dev/null
du -sh ~/Library/Developer/CoreSimulator/* 2>/dev/null

These commands show filesystem and top-level category usage. They do not prove that a directory is safe to delete. For a project-specific build location, inspect the path configured by the scheme or build settings rather than assuming every project uses the same location. Apple documents derivedDataPath usage in its xcodebuild documentation.

This week’s recommended action: record the active jobs, storage categories, Xcode version, and recovery copies before removing anything.

A useful distinction is:

Storage object Typical role Cleanup decision Required validation
DerivedData Reproducible project build data Remove only when no related job is active Clean build, test, or Archive
Temporary build output Intermediate files for a current workflow Remove after the job ends and logs are preserved Repeat the affected action
Simulator runtime OS image used by Simulator Keep if a supported test target needs it Run the required simulator test
Simulator device data Created device state and app data Remove only unused devices or disposable state Recreate or rerun the test
Package cache Downloaded or resolved dependencies Remove by project and source, not globally Resolve dependencies and perform a cold build
xcarchive Release package with signing and symbols Preserve until recovery and debugging needs are covered Confirm a verified copy or successful replacement Archive
IPA Exported install package Preserve when needed for delivery or audit Confirm App Store Connect or release records
dSYM Crash symbolication data Preserve with the matching release Verify the symbol copy and release mapping
xcresult Test and diagnostic result bundle Preserve while investigating failures Open or parse the result before deletion
Signing assets Certificates, profiles, and related credentials Never treat as disposable cache Confirm secure backup and access path

The table is a decision tool, not permission to remove every row marked as cleanable. Ownership, job state, and recovery evidence decide the action.

Archive-only servers have a wider cleanup margin

A server used only for Release Archive jobs has different storage priorities from a Mac used for daily development. If the machine does not run SwiftUI Previews, interactive debugging, or a broad UI test matrix, it may not need to retain every piece of local development state. That does not mean you should delete the complete developer directory.

For an Archive-only workflow, inspect these layers separately:

DerivedData can usually be regenerated, but regeneration has an operational cost. The next build may need to resolve packages, compile everything from a cold state, and recreate indexes. If the server is already close to full, that cold rebuild can fail again before producing an Archive.

Before removing it, confirm that no process is using the path:

ps aux | grep -E 'xcodebuild|Xcode|swift|clang' | grep -v grep

This is only a process check. Your CI queue, remote console, or job system remains the authoritative source for whether a release task is active.

If the job is stopped, remove a narrowly scoped DerivedData path rather than the entire user directory. The -derivedDataPath build setting can make this ownership explicit for future jobs. Apple’s Build Settings Reference explains how build settings influence output locations and behavior.

Do not clean a server while an Archive, export, upload, or test process is running. A partial output can look disposable while another step still depends on it.

After cleanup, do not rely on a successful command exit alone. Run the same scheme with the same signing context, create a new Archive, and confirm that the resulting evidence is usable. If the replacement Archive fails, stop further cleanup and restore the previous state or move the job to a verified host.

Simulator storage needs a test-matrix decision

Simulator storage is often misdiagnosed because several different objects appear under the same broad area. A Simulator runtime is an operating-system image. A created simulated device contains device state and application data. Test results and screenshots are evidence produced by a test run. These objects have different retention reasons.

A remote Mac that performs only Archive and upload jobs may not need a complete Simulator fleet. A team running UI tests across selected operating-system versions does. The correct question is not “Can I delete Simulator files?” but “Which supported test combinations must this host execute?”

Keep a runtime when:

Consider removing a runtime only after the test matrix has been reviewed and the component is no longer required. Apple documents how additional Xcode components are managed in its component installation guide.

Created devices and application data can be more disposable than runtimes, but only when they are not being used to reproduce a failure. Preserve test results and screenshots while an investigation is open. Apple’s testing and result interpretation documentation describes why test-result bundles are part of the diagnostic record.

A Simulator also cannot replace physical-device validation. Apple explicitly distinguishes simulated and physical devices in its device testing documentation. Removing a runtime to recover space does not change that boundary; it only changes which automated checks the server can perform.

Multiple projects require cache ownership

A multi-project server is where “delete all caches” becomes dangerous. One App may use Swift Package Manager, another may use CocoaPods, and a third may depend on a private package source. Different Xcode versions may also be intentional because released Apps do not all move to a new toolchain at once.

Create a simple ownership map before cleanup:

For Swift Package Manager, record the project’s declared dependencies and lockfile before removing downloaded data. For CocoaPods or private dependencies, confirm that the source is reachable and credentials are available. A cache is only safely disposable when the dependency can be restored and the restored version is controlled.

Use this recovery chain after a dependency cleanup:

If the cold build fails, the cleanup did not merely reclaim space; it exposed a reproducibility problem. Restore the previous cache if it is available, fix dependency access, and delay further deletion. Do not remove another project’s cache to solve the first project’s failure.

Release files need an evidence policy

The most costly cleanup mistake is treating every output as a cache. An xcarchive can be required for re-export, later distribution, or crash investigation. An IPA may be the exact package submitted for a release. A dSYM is needed to symbolicate crashes when it matches the shipped binary. An xcresult bundle can contain the evidence needed to understand a failed test.

Before deleting a release object, answer these questions:

Apple explains the role of debugging information in its debug-symbol documentation. Apple also provides guidance for Archive export and app-size-related distribution work. These references do not define your retention policy; they help you identify why a release artifact may matter after the build has finished.

A minimal recovery acceptance test should prove at least one of these paths:

Signing assets require separate treatment. Certificates, provisioning profiles, private keys, and Keychain entries are not build cache. Never solve a disk alert by deleting the Keychain or every installed profile. That can turn a storage issue into a signing outage.

Choose cleanup, expansion, or a second Mac

Use the following decision conditions after the first inspection:

If the additional environment is temporary, compare the available VPSMAC remote Mac configurations by the workload you need rather than by nominal hardware alone. A second host is useful when it gives you a reversible place to test Xcode 27, rebuild dependencies, or handle a release surge without modifying the only production server.

For teams comparing locations, the VPSMAC M4 node options can be reviewed alongside network access, credential policy, test requirements, and the time window in which the environment is needed. Storage alone does not solve a signing, bandwidth, or recovery problem.

Final recommendation for a remote build setup

A self-managed iOS build server gives you control, but it also leaves you responsible for cache ownership, Simulator component drift, Archive retention, signing recovery, and storage alerts. A single Mac becomes especially risky when development, UI testing, and automated publishing compete for the same disk.

For a low-frequency single-App workflow, disciplined cleanup is usually the first move. For multiple projects or repeated full-disk failures, expansion is more defensible. For a short release peak or a separate Xcode 27 validation track, adding an independent remote Mac is easier to reverse than aggressively cleaning the only production host.

If you need a temporary build environment, a second release lane, or a safe place to validate the toolchain before changing production, renting a Mac through VPSMAC can be more practical than buying hardware for a short-lived demand spike. You can keep the existing server intact, test the recovery path separately, and retire the additional environment when the workload returns to normal.

FAQ

How should I clean an Xcode 27 build machine when its disk is full?

First stop and verify that no Build, Test, Archive, export, or upload job is running. Then measure storage by project and category. Remove only reproducible DerivedData, obsolete temporary outputs, and dependency caches after recording the active toolchain. Preserve signing assets and release evidence. Rebuild, Archive, and validate the result before declaring the machine recovered.

Which files can be deleted from an iOS build server?

Reproducible DerivedData and selected dependency caches are usually the safest candidates, but the decision depends on ownership and job state. Do not treat Simulator runtimes, device data, xcarchive files, dSYM files, xcresult bundles, IPA files, or signing assets as generic cache. Archive or copy anything needed for crash analysis, re-export, audit, or recovery before removal.

Can DerivedData be cleaned regularly on a remote Mac?

Yes, if the cleanup is scoped by project and runs only outside active build windows. DerivedData is generated by the Xcode build process, so deleting it normally creates a cold rebuild rather than deleting source code. Record the path, exclude active jobs, preserve evidence needed for diagnosis, and require a successful test or Archive before returning the machine to service.

How long should Simulator runtimes and Archives stay on the server?

There is no universal retention period. Keep Simulator runtimes required by the current test matrix, and remove unused components only after confirming that no supported job needs them. Retain Archives according to your release, crash-debugging, and re-export requirements. If another verified copy exists, an old Archive may be removable; without that copy, it remains recovery evidence.

When should an iOS build machine be expanded?

Expand when measured cleanup no longer restores a stable working margin, multiple Xcode versions and test targets are legitimate requirements, or full-disk incidents keep interrupting releases. Add a separate remote Mac when the pressure is temporary, tied to a release peak, or caused by competing build and test workloads. Avoid changing the only production machine during an active release.