SpotlessOverviewFeaturesPricingCompareHelpGuidesSupport
Doolphin › Spotless › Guides › How to delete iOS Simulators and runtimes in Xcode

How to delete iOS Simulators and runtimes in Xcode

Published 2026-11-11

iOS Simulator storage comes from two separate things. Runtimes are the downloaded operating systems (iOS, watchOS, tvOS, visionOS), several GB each, and are usually the bigger part. Devices are the individual simulated iPhones and iPads, each with its own apps and data, from a few MB to many GB. Both are recoverable: runtimes download again from Apple, and an empty device is created again on demand. What you lose is the test data and app installs inside a device, and the time to redownload a runtime.

See what you have

These commands need Xcode or the Command Line Tools with Xcode installed. xcrun simctl is part of Xcode. On a Mac with only the Command Line Tools it prints "unable to find utility simctl", which is what it did on the Mac used to check this page. The paths below were read there. The simctl output shapes come from Apple's documented behaviour and the tool's help.

xcrun simctl list devices
xcrun simctl list runtimes
du -sh ~/Library/Developer/CoreSimulator/Devices
du -sh /Library/Developer/CoreSimulator/*

list devices groups simulators under their runtime, with a UUID and a state of Shutdown or Booted. Anything marked (unavailable, ...) belongs to a runtime that is no longer installed. list runtimes shows what is installed, with a build number such as 23C54.

Where the files are

PathContents
~/Library/Developer/CoreSimulator/Devices/<UUID>One folder per simulator. Apps and their data are in data/. device.plist holds the name.
~/Library/Developer/CoreSimulator/CachesPer-user caches. Safe to remove.
/Library/Developer/CoreSimulator/VolumesMounted runtime disk images. On the Mac checked here it held one folder named iOS_23C54.
/Library/Developer/CoreSimulator/CachesSystem-wide caches. 3.8 GB on that Mac.
/Library/Developer/CoreSimulator/Profiles/RuntimesOlder style runtime bundles (.simruntime).

Where the runtime images are stored has changed between Xcode versions. Xcode 14 and earlier shipped iOS runtimes inside Xcode.app. Xcode 15 moved them to separate downloads in disk-image form. Later versions also use Cryptex and Images folders under the same /Library/Developer/CoreSimulator. Because of that, do not hunt for runtime files by hand. Ask Xcode.

Method 1: remove runtimes in Xcode Settings

  1. Open Xcode > Settings > Platforms. The tab is called Platforms in Xcode 15 and 16. Newer versions have renamed it Components, so look for the list of installed OS versions.
  2. Select a runtime you do not test against.
  3. Click the minus button, then confirm. macOS asks for your password because the runtime is a system-level disk image.

This removes the runtime only. It does not delete simulator devices that used it. Those become unavailable and keep taking space until you remove them (next method).

A runtime you removed comes back through the same pane, as a download of a few GB. You need a network and an Apple ID signed in to Xcode.

Method 2: delete devices with simctl

xcrun simctl delete unavailable

Removes every simulator whose runtime is gone. It does not touch devices with a working runtime, and it is the safest first move.

xcrun simctl shutdown all
xcrun simctl delete <UUID>

Removes one device by UUID, including its installed apps and everything those apps saved. Not recoverable. Shut simulators down first, since a booted device can refuse to delete or leave files behind.

xcrun simctl delete all

Removes every simulator, available or not, with all their data. Xcode creates default devices again for the installed runtimes the next time it needs them, but test accounts, logged-in states and seeded databases are gone. Do not use it to tidy up a Mac where you rely on a configured device.

Recent Xcode versions also have xcrun simctl runtime list and xcrun simctl runtime delete <identifier> for runtimes, the command-line twin of Method 1. Run xcrun simctl runtime delete --help to see which options your version has before using anything beyond a single identifier.

Method 3: reset one device without deleting it

xcrun simctl erase <UUID>

This returns one device to factory state: apps and data removed, the device kept. It is the middle option when a device holds a gigabyte of junk and you want to keep its name and settings. xcrun simctl erase all does it to every device.

Caches

rm -rf ~/Library/Developer/CoreSimulator/Caches

Permanent, and only caches. The simulator rebuilds them on next launch, and the first boot afterwards is slower. Quit Simulator first.

What breaks if you remove the wrong thing

  • Dragging a device folder from Devices to the Trash. The folder goes but the simulator can remain registered, and simctl then lists a broken entry. simctl delete removes both.
  • Deleting inside /Library/Developer/CoreSimulator/Volumes by hand. Those are mounted disk images. Removing or damaging them while mounted can leave a runtime that Xcode lists as installed and cannot launch. Use Settings.
  • Removing the runtime you build for. Xcode does not warn. Your next run fails with a missing-destination error until you download it again.

Check the space came back

Runtime disk images are removed after they unmount, and space can take a moment to show. If df -h /System/Volumes/Data does not move, restart. If you still see it, check for local Time Machine snapshots, which keep deleted files alive. The System Data guide has the commands. For other Xcode folders, see the DerivedData guide.

Where Spotless fits

The Developer page in Spotless lists simulator devices and simulator caches. Devices are marked Review, with the warning that test data inside them is lost. Spotless does not remove runtimes and shows them as managed by Xcode, pointing you to Settings. That is the right place to remove them.

Keep going

More guides

Not connected yet