Blog / For developers

How to delete old iOS simulators without breaking Xcode

Every Xcode update leaves another 8 GB copy of iOS behind. Which ones you can remove, the command that does it, and how to check the space came back.

My Mac froze and restarted on its own on September 29, with the disk 97% full. About 64 GB of that disk was eight copies of iOS: simulator runtimes Xcode had downloaded over time and never removed.

TLDRSafe to remove, then check

List your runtimes with xcrun simctl runtime list -v, and delete the ones you don’t use with xcrun simctl runtime delete. Then check that the space really came back. On my Mac, five of the six runtimes I deleted, 41.6 GB, stayed on disk, and Xcode doesn’t list them anymore. I haven’t found a safe way to get that back yet.

Why simulators take so much space

Each simulator runtime is a full copy of iOS that the Simulator app runs your apps on. Mine were 7.5 to 8.2 GB each. Xcode adds a new one with most updates, and it doesn’t remove the old ones.

They don’t live in your home folder or in Xcode’s folder. The images sit in /System/Library/AssetsV2/com_apple_MobileAsset_iOSSimulatorRuntime, a system folder you’d have no reason to open.

Eight had piled up on my Mac. Only two had been used in the past month.

Runtime Size Last used What I did
iOS 18.0 7.8 GB September 4, 2026 Deleted
iOS 18.1 8.0 GB July 11, 2025 Deleted
iOS 18.2 8.1 GB Not listed Deleted
iOS 18.4 8.2 GB Not listed Deleted
iOS 18.5 8.2 GB Not listed Deleted
iOS 26.1 7.8 GB Not listed Deleted
iOS 26.5 7.9 GB September 3, 2026 Kept
iOS 27.0 7.5 GB Not listed Kept, matches Xcode 27

The eight runtimes on my Mac on September 29, 2026, from simctl. “Not listed” means simctl showed no last-used date.

If you measure any of this with du, add -x. My first du -sh /Library/Developer/CoreSimulator said 186 GB, because du walked into runtime disk images macOS had mounted inside that folder and counted what was in them. With -x, which keeps du on one file system, the same folder was 3 GB.

See what you have

Open Terminal and run this. It lists every runtime with its version, ID, size, and the last time a simulator used it.

$ xcrun simctl runtime list -v

Each runtime gets a block like the two below, which I’ve cut down to the lines that matter here. The long string after the dash is the runtime ID you’ll need to delete it.

iOS 18.0 (22A3351) - 34EF0938-835F-40C8-B2E7-8A536E6EE207
    Last Used At: 2026-09-04 04:50:27 +0000
    Size: 7.8G
iOS 18.2 (22C150) - A423DDE3-C93D-48DF-A9B7-D080200AB7DA
    Size: 8.1G

The last line of the list is a total, Total Disk Images followed by a count and a size. Keep that line in mind for the check at the end.

Which ones to keep

Keep the runtime that matches your Xcode version, plus any iOS version your app still supports. Runtimes with no “Last Used At” line are the first ones to look at.

Delete the ones you don’t need

Before you run this

Quit Xcode and the Simulator app first, so nothing is using a runtime while it’s removed.

  1. Copy the ID of a runtime you want to remove from the list.
  2. Run the delete command with that ID.
$ xcrun simctl runtime delete 34EF0938-835F-40C8-B2E7-8A536E6EE207

That ID is my iOS 18.0 runtime, so yours will be different. The runtime switches to Deleting and drops off the list a few minutes later. Repeat for each one you want gone.

You can also have simctl pick runtimes by age. Run it with --dry-run first, which prints what it would delete and deletes nothing:

$ xcrun simctl runtime delete --notUsedSinceDays 90 --dry-run

Read the dry run closely. On my Mac, iOS 27.0, the runtime that matches Xcode, had no last-used date, so check that the dry run doesn’t list the runtime you need. When the list looks right, run the same command without --dry-run.

The help text also lists --keep-asset, which keeps the downloaded image when the runtime is deleted. Without it, the delete should remove the image too. Remember that for the check below.

Clean up old devices

Each runtime comes with simulator devices, an iPhone or iPad on that iOS version. Once a runtime is gone, its devices are marked unavailable. This removes all of them at once:

$ xcrun simctl delete unavailable

Devices live in ~/Library/Developer/CoreSimulator/Devices. Mine is 9.5 GB, and 67 of those devices belong to runtimes I deleted.

Get one back later

Deleting a runtime doesn’t lock you out of that iOS version. Open Xcode, go to Settings, then Components, and download it again. On a slow connection it takes a while.

Check that the space came back

After the deletes, simctl listed two runtimes. Xcode’s Components settings agreed, with only iOS 27.0 and the iOS 26.5 Simulator left.

By every tool’s count, six runtimes were gone.

Then I measured the folder where the images live:

$ du -shx /System/Library/AssetsV2/com_apple_MobileAsset_iOSSimulatorRuntime
 57G	/System/Library/AssetsV2/com_apple_MobileAsset_iOSSimulatorRuntime

And compared it with simctl’s own total:

$ xcrun simctl runtime list
== Disk Images ==
-- iOS --
iOS 27.0 (24A434) - 9AC2BBF1-6EAC-4F75-962C-50A29F64A30E (Ready)
iOS 26.5 (23F77) - 2038C521-9C29-4D5D-AB6D-BCC78E940A5B (Ready)

Total Disk Images: 2 (15.4G)

Two runtimes at 15.4 GB, in a folder of 57 GB. The difference was five of the six runtimes I had deleted, still on disk:

Deleted runtime Still on disk
iOS 18.0 8.0 GB
iOS 18.1 8.2 GB
iOS 18.2 8.4 GB
iOS 18.4 8.5 GB
iOS 18.5 8.5 GB
iOS 26.1 Gone

Measured with du -x in the AssetsV2 folder on September 29, 2026, after the deletes. 41.6 GB in total.

Neither Xcode nor simctl lists them anymore. Each one’s Info.plist says NeverCollected, so macOS won’t clean them up on its own either. And I didn’t pass --keep-asset.

Run the same two commands on your Mac, and compare the folder with the iOS runtimes in simctl’s list. If the two are close, your deletes worked. If the folder is much bigger, you have leftovers too.

What not to do about leftovers

Leave the protected folder alone

The AssetsV2 folder carries the restricted flag from System Integrity Protection, so even sudo rm can’t remove it. Turning SIP off to get around that trades a security feature for disk space. I’m not doing it, and I wouldn’t suggest it.

I don’t have a safe, supported way to get those 41.6 GB back yet. When I find one and test it, I’ll update this post.

The idea behind Diskling

Diskling is the Mac app I’m building because of the day my Mac froze. The idea: it names who owns each big folder, says whether it’s safe to remove, and runs the owner’s own command, like simctl, after you’ve seen it.

It’s also being built to measure again after a cleanup and tell you what didn’t come back. It isn’t out yet.

Get early access

What I got back

I kept iOS 27.0, which matches Xcode 27, and iOS 26.5, and deleted the other six. simctl had listed those six at 48.1 GB.

Only iOS 26.1, at 7.8 GB, actually left the disk. The other five are still there, and no tool lists them.

So run the check after any cleanup. It’s two commands, and it’s the only way I found to know whether a delete gave anything back.

Know someone with a full Mac? Send them this.
Shameem Reza

I’m building Diskling in public, a Mac app that explains why your disk is full and gets the space back safely.