Simulators · free up space
How to delete old iOS simulator runtimes
Each runtime is a complete copy of iOS — several gigabytes — and Xcode keeps every version you have ever installed. xcrun simctl runtime list shows them; delete is by identifier.
Runtimes and devices are two different things
A runtime is the operating system itself: one copy of iOS 17.5, another of 18.2, another of 26.0. A device is a simulated iPhone that runs on top of one. Devices are small. Runtimes are not, and deleting simulated iPhones frees almost nothing while the runtimes stay.
On the Mac this app was built on: 8.49 GB of runtimes against 6.08 GB of devices.
Listing what you have
xcrun simctl runtime list
xcrun simctl list devicesThe runtime list names each one with an identifier. Anything marked unusable or unsupported is a straightforward delete — Xcode cannot run it.
Deleting them
# one runtime, by the identifier from the list
xcrun simctl runtime delete <identifier>
# every runtime Xcode can no longer use
xcrun simctl runtime delete unusable
# simulated devices that have lost their runtime
xcrun simctl delete unavailableWhat it costs
- Testing against that iOS version, until you download it again from Xcode's Platforms settings.
- A download of several gigabytes if you do need it back, which is the whole cost — nothing is lost permanently.
- Nothing else. App data inside a simulated device goes with the device, not with the runtime.
Keep the runtime your app's deployment target needs. If you support iOS 15, an iOS 15 simulator is the only way to test it, and re-downloading old runtimes is slower than keeping them.
Where the app comes in
RefreshYourMac reads runtimes and devices through simctl rather than guessing at folders, lists them with their real sizes, and shuts down a running simulator before removing anything that belongs to it. It also finds DerivedData, archives and device support in the same scan.