Where apps hide your files
Every simulated iPhone, iPad and Watch keeps its own copy of an iOS file system inside your Library folder, and each app gets a random UUID folder. This post shows the path, a one-line way to find your app's folder, and what is safe to clear.
Per-device data (the simulated phone's file system, your apps' documents, photos added to the simulator):
~/Library/Developer/CoreSimulator/Devices/
Simulator runtimes (the iOS, watchOS and other system images you download in Xcode) are stored outside your home folder:
/Library/Developer/CoreSimulator/
With recent Xcode versions, each runtime is a disk image that the system keeps in what simctl calls a secure storage area and mounts under /Library/Developer/CoreSimulator/Volumes/, one volume per runtime build. Older Xcode versions kept runtimes as .simruntime bundles in /Library/Developer/CoreSimulator/Profiles/Runtimes/. To see what you have, whichever layout applies:
xcrun simctl runtime list
Open the device folder from Finder with Go > Go to Folder (⇧⌘G), or from Terminal:
open ~/Library/Developer/CoreSimulator/Devices
Inside Devices there is one folder per simulated device, named by UUID, and inside an app's container you will find another UUID. Do not hunt through them by hand. Ask the simulator:
xcrun simctl get_app_container booted com.example.MyApp data
Replace com.example.MyApp with your bundle identifier. booted means the simulator that is running now; you can pass a device UUID instead. Change the last word to app for the installed bundle (that is also the default if you leave it off), groups for the app group containers, or a group identifier for one of them. To jump straight to it in Finder, wrap the command in open:
open "$(xcrun simctl get_app_container booted com.example.MyApp data)"
To list devices and their UUIDs, run xcrun simctl list devices. Each device folder also has a device.plist at the top that records its name and runtime.
Path under Devices/<UUID>/data/ | What it holds |
|---|---|
Containers/Data/Application/<UUID>/ | One app's sandbox: Documents, Library, tmp |
Containers/Bundle/Application/<UUID>/ | The installed .app bundle |
Containers/Shared/AppGroup/ | App group containers |
Media/ | The simulated photo library (DCIM, PhotoData) and Downloads |
Library/ | Simulated system preferences and caches |
Each application container also has a hidden .com.apple.mobile_container_manager.metadata.plist, which records which bundle identifier the random UUID belongs to. That is the file to look at if you need to map a UUID back to an app without simctl. The leading dot hides it in Finder; press ⇧⌘. to show hidden files.
For your own app, the cleanest route out is to write the file where you need it from code, or to share it from the simulator with the share sheet. To copy something out by hand, open the data container with the command above and copy from Finder. To put photos, videos or contacts into a device, use:
xcrun simctl addmedia booted ~/Desktop/photo.jpg
Nothing here is a backup format. A device's data disappears when the device is erased or deleted, including by simctl delete unavailable after an Xcode update drops its runtime, so keep anything you need elsewhere.
Two things grow: the device folders and the runtimes.
du -sh ~/Library/Developer/CoreSimulator/Devices.xcrun simctl runtime list prints the total at the end. Avoid du on /Library/Developer/CoreSimulator, because it also counts the mounted runtime volumes and overstates the figure.Safe ways to reclaim space, all through Apple's own tools rather than Finder:
xcrun simctl runtime delete <identifier> does the same; add --dry-run first to see what it would remove.xcrun simctl delete unavailable.xcrun simctl erase <UUID>. Use all instead of a UUID to erase every device.Do not delete the Devices folder itself or device_set.plist inside it by hand. The simulator service keeps an index of devices, and a half-deleted set produces confusing errors. If you want to start fresh, erase through simctl.
Logs for the simulator service are in ~/Library/Logs/CoreSimulator/, and are small.
The whole tree is under ~/Library, which Finder hides by default and Spotlight leaves out of its results. Container folders are random UUIDs, so even once you are in there, you cannot tell which is which by name. That is why simctl get_app_container is the practical way in.
If you remember a file name from your app (a database, a JSON export, a screenshot), you can skip the UUID hunt. Everywhere searches file names across the Mac, including the CoreSimulator tree under ~/Library, so typing the name, or a fragment like .sqlite, shows it in every device that has a copy. Reveal the match with ⌘↵ to land in the right container. A file your app wrote moments ago may only show up after the next scan, so for brand-new files the simctl command above is quicker. It matches names only, not the text inside the files.
In ~/Library/Developer/CoreSimulator/Devices/<device UUID>/data/Containers/Data/Application/<app UUID>/. Run xcrun simctl get_app_container booted <bundle id> data to print the exact folder.
Not by hand. Use xcrun simctl delete unavailable to remove unsupported devices, xcrun simctl erase to reset them, and Xcode's Components settings or xcrun simctl runtime delete to remove runtimes.
Mostly the simulator runtimes, which are disk images of several gigabytes each, plus per-device data in your Library folder. xcrun simctl runtime list shows the runtimes and their total size.
Open the folder printed by xcrun simctl get_app_container booted <bundle id> data, then browse Documents and Library.
Everywhere keeps track of every file on your Mac — including the folders Spotlight hides and drives you have unplugged. Free for a day, then $19 once.
Version 2.20.3 · macOS 13+ · 4.7 MB · notarised