Xcode disk hogs

How to Delete Unavailable Simulators in Xcode and Recover GBs (2026)

If your Mac's storage graph shows a suspicious lump labeled "System Data" or "Developer Data," a likely culprit is a graveyard of orphaned iOS, iPadOS, and watchOS simulators left behind by Xcode updates. Each simulator bundle can be 1 to 4 GB, and a few Xcode version cycles can quietly eat 20 GB or more. This guide shows you exactly how to delete unavailable simulators in Xcode, explains why they accumulate, and gives you a repeatable maintenance habit to keep that space from creeping back.

Why Unavailable Simulators Pile Up

Every Xcode major version ships a new set of simulator runtimes. When you upgrade Xcode, the old runtimes are often left on disk but marked "unavailable" because the new Xcode version no longer manages them. The simulators themselves (the individual device records) remain in ~/Library/Developer/CoreSimulator/Devices/ pointing at runtimes that no longer exist. Xcode and simctl treat these as orphans: they show up in the Simulator app with a yellow warning or simply do not boot, and they are invisible to the Finder's normal storage accounting.

The simulator runtimes themselves live in a separate location:

  • Xcode 14 and earlier: ~/Library/Developer/CoreSimulator/Profiles/Runtimes/
  • Xcode 15 and later (including Xcode 16): /Library/Developer/CoreSimulator/Cryptex/Runtimes/ (system-level, requires sudo to inspect)

The device records stay in ~/Library/Developer/CoreSimulator/Devices/ regardless of Xcode version. Each UUID-named folder there can be 200 MB to 2 GB on its own, depending on what apps you installed into it during development.

Step 1: See What You Actually Have

Before deleting anything, get a count of unavailable simulators so you know what the cleanup is worth.

Open Terminal and run:

xcrun simctl list devices unavailable

This prints every simulator device that no longer has a valid runtime. A long list here is normal if you have upgraded through several Xcode versions. Each entry shows the device name, its UUID, and the label (unavailable).

To see a rough disk footprint before you commit to deleting, you can check the Devices folder size:

du -sh ~/Library/Developer/CoreSimulator/Devices/

Then compare after the cleanup to see exactly how much you recovered.

Step 2: Delete Unavailable Simulators with xcrun simctl

The fastest, safest way to remove unavailable simulators is the built-in simctl command. It removes only the orphaned device records and leaves your current, bootable simulators untouched.

xcrun simctl delete unavailable

That is the entire command. It runs silently and exits when done. Re-run xcrun simctl list devices unavailable afterward and you should see an empty list.

To confirm disk recovery:

du -sh ~/Library/Developer/CoreSimulator/Devices/

Compare the before and after numbers. A developer who has gone through three or four Xcode versions often recovers 5 to 15 GB from device records alone.

Step 3: Remove Old Simulator Runtimes (the Bigger Win)

Deleting orphaned device records is the quick fix, but the real storage savings usually come from removing old simulator runtimes. These are the disk images that power each OS version and they are the heaviest items in the whole Xcode storage picture.

Using Xcode's Platform List (Xcode 15 and 16)

In Xcode 15 and 16, runtime management moved into Xcode itself.

  1. Open Xcode.
  2. Go to Xcode > Settings (or press Command,).
  3. Click the Platforms tab.
  4. You will see all downloaded simulator runtimes with their sizes. Runtimes you no longer need show a download icon or no checkmark for the current Xcode. Select one and click the minus button or right-click and choose Delete.

Removing a single iOS runtime from here typically saves 4 to 8 GB.

Using simctl to List and Delete Runtimes via Terminal

If you prefer the command line or need to script this in CI, simctl also manages runtimes directly in Xcode 15+.

List all runtimes:

xcrun simctl runtime list

Delete a specific runtime by its identifier (copy the full identifier from the list output):

xcrun simctl runtime delete <identifier>

For example:

xcrun simctl runtime delete com.apple.CoreSimulator.SimRuntime.iOS-16-4

You will be prompted for your password because runtimes in Xcode 15+ live in a system-level location that requires elevated access.

Step 4: Clean Up the Xcode Derived Data and Archives

While you are in cleanup mode, two other Xcode folders are worth checking. They do not contain simulators but they commonly hold gigabytes of build artifacts.

  • Derived Data: ~/Library/Developer/Xcode/DerivedData/: safe to delete entirely. Xcode rebuilds it on the next build. Often 5 to 30 GB.
  • Archives: ~/Library/Developer/Xcode/Archives/: contains every .xcarchive you have built for distribution. Only delete versions you no longer need for re-signing or dSYM lookups.

To remove all derived data from the Terminal:

rm -rf ~/Library/Developer/Xcode/DerivedData/

How Much Space Can You Expect to Recover?

Results vary based on how many Xcode versions you have installed and how actively you develop, but here are realistic ranges:

  • Orphaned simulator devices only (simctl delete unavailable): 2 to 15 GB
  • Removing two or three old simulator runtimes: 10 to 25 GB
  • Clearing Derived Data: 5 to 30 GB
  • Total potential recovery on a well-used dev Mac: 20 to 60 GB

The exact numbers depend on your project history. The du commands above let you measure before and after so you are not guessing.

Keeping Simulator Clutter Under Control Going Forward

A few habits prevent the graveyard from rebuilding itself.

  • After every Xcode major version upgrade, run xcrun simctl delete unavailable as part of your post-install checklist.
  • In the Xcode Platforms tab, remove runtimes for iOS versions you no longer need to test against. If your app targets iOS 17 and up, you do not need the iOS 15 runtime.
  • On CI machines, add xcrun simctl delete unavailable to your post-build or post-pipeline scripts so the workers stay lean.
  • Check ~/Library/Developer/CoreSimulator/Devices/ periodically with du -sh to catch growth early.

What If You Want to See Sizes Before You Delete?

The terminal approach above requires you to cross-reference folder names with UUID strings, which is tedious. If you want to see each simulator device or runtime with its actual disk size before deciding what to remove, Crumb lists unavailable simulators alongside their sizes so you can review and remove them in a single click rather than piecing the picture together from du output and UUID lookups. Either path gets you to the same result; the right choice is whichever one you will actually use.

Whether you go the Terminal route or use a visual tool, the important thing is to make simulator cleanup a regular habit. A single xcrun simctl delete unavailable after each Xcode upgrade costs thirty seconds and can save you a trip to "Storage Almost Full" territory.

Reclaim your disk in one click

Crumb audits your whole Mac, tells you what's safe to delete, and frees the space in seconds — private, local, and Apple-notarized.

Download Crumb for macOS

Frequently asked questions

Is it safe to run xcrun simctl delete unavailable?
Yes. The command only removes simulator device records that no longer have a valid runtime attached. It does not touch your active, bootable simulators, your Xcode installation, or any source code. You can re-create specific simulator devices at any time from Xcode's Simulator menu or with simctl create.
How do I remove old Xcode simulator runtimes, not just the device records?
In Xcode 15 and 16, open Xcode then go to Settings and click the Platforms tab. Each downloaded runtime is listed with its size and a delete option. From the command line, run xcrun simctl runtime list to see identifiers, then xcrun simctl runtime delete followed by the identifier to remove a specific runtime. You will need to enter your password because runtimes live in a system-level location.
Why do unavailable simulators appear after an Xcode update?
When Xcode is updated, it installs new simulator runtimes but does not automatically remove the old ones or the device records tied to them. The old devices remain on disk but are flagged unavailable because their runtime is either missing or no longer compatible with the new Xcode version. This is a known accumulation pattern for anyone who upgrades Xcode regularly.
Can I delete the CoreSimulator Devices folder manually in Finder?
You can, but it is not recommended because it removes all simulators including active ones, and Xcode can behave unexpectedly until the folder is rebuilt. The xcrun simctl delete unavailable command is more precise: it removes only the orphaned entries and leaves your current devices intact.
Do simulator files count toward iCloud Drive or Time Machine backups?
Time Machine backs up the CoreSimulator Devices folder by default, which can slow backups significantly. You can exclude ~/Library/Developer from Time Machine in System Settings under General, Time Machine, Options. iCloud Drive does not sync the Developer folder, so simulator files stay local.