Where simulator data lives
Simulators store two kinds of bulk: device data (apps, photos, settings per simulated iPhone) and runtime disk images (the iOS version itself). Both sit under ~/Library/Developer/CoreSimulator/.
du -sh ~/Library/Developer/CoreSimulator/* | sort -hr
On an active iOS developer's Mac, Devices alone is often 5–40 GB; downloaded runtimes add another 4–8 GB each. Total simulator footprint commonly reaches 20–60 GB.
Not simulator data: DerivedData, DeviceSupport and archives live elsewhere and are covered in our Xcode DerivedData & caches guide. This article focuses only on CoreSimulator.
What you're cleaning (ranked by risk)
| Category | What it is | Typical size | Risk |
|---|---|---|---|
| Unavailable simulators | Devices whose runtime was removed by an Xcode upgrade | 1–15 GB | SAFE |
| Superseded runtimes | Older iOS versions you no longer target | 4–8 GB each | WARNING |
| Devices on old runtimes | Simulators still tied to a superseded iOS version | 0.5–3 GB each | WARNING |
| Booted simulators | Currently running — skip until shut down | — | DANGER |
Step 1: delete unavailable simulators
After every major Xcode upgrade, simulators tied to the old runtime become unavailable — they appear greyed out in Xcode and can never boot. They're dead weight:
xcrun simctl delete unavailable
This is the highest-confidence cleanup on this page. Zero downside: if the runtime is gone, the device was already useless. DevCleaner runs this same command for its "Unavailable Simulators" category.
To see what's left and how much each device weighs:
xcrun simctl list devices
du -sh ~/Library/Developer/CoreSimulator/Devices/* | sort -hr | head -20
Step 2: remove superseded runtimes
macOS downloads iOS runtimes as disk images. If you're on Xcode 16 with iOS 18 installed, the iOS 16 and 17 runtime images are probably still sitting there.
xcrun simctl runtime list
Each row shows the runtime version and its UUID. Delete a superseded one:
xcrun simctl runtime delete <runtime-uuid>
Xcode re-downloads a runtime if you ever open a project that needs it — a few minutes over the network, once per version. Keep the runtime that matches your minimum deployment target and the latest; delete the rest.
Delete devices on that runtime first. If simulators still reference an old runtime, remove them individually before deleting the runtime image: xcrun simctl delete <device-udid>. Don't delete a booted simulator — shut it down in Xcode or Simulator.app first.
Step 3: prune individual devices you don't need
Sometimes you created five iPhone 15 simulators for different branches and only need one. List devices with their UDIDs:
xcrun simctl list devices available
Delete a specific device (apps, photos, caches — everything in its data folder):
xcrun simctl delete <device-udid>
To wipe a device's content but keep the device itself (useful before a clean test run):
xcrun simctl erase <device-udid>
Never delete CoreSimulator with rm
Tempting when du shows 40 GB and you want it gone now. Don't. rm -rf ~/Library/Developer/CoreSimulator/Devices/… leaves Xcode's device registry pointing at folders that no longer exist — broken simulators, cryptic build failures, and a reinstall dance.
simctl updates both the database and the filesystem together. That's the only supported path.
See every simulator sized before you delete
DevCleaner lists unavailable simulators, superseded runtimes and individual devices on old iOS versions as separate rows — each sized, rated Safe or Warning, and removed through simctl (never rm). Unavailable devices are pre-selected; runtime and device deletions stay opt-in. Part of a full Xcode scan alongside DerivedData, DeviceSupport and archives.
FAQ
- How often should I run
simctl delete unavailable? - After every Xcode major upgrade — that's when runtimes get replaced and old devices go stale. Monthly is fine if you upgrade betas frequently.
- Does erasing a simulator free as much space as deleting it?
- Usually not quite — the device shell remains.
eraseclears apps and data;deleteremoves the whole device directory. Delete devices you won't use again; erase ones you'll keep. - Can I remove simulators from Xcode's GUI?
- Yes — Window → Devices and Simulators → Simulators, right-click → Delete. For bulk unavailable cleanup, the Terminal command is faster.
- What about watchOS and tvOS simulators?
- Same commands, same paths.
simctl listshows all platforms; unavailable ones are removed by the samedelete unavailablesweep.