Developer leftovers: Xcode, simulators and package caches
Updated · Dmytro Virych
Xcode, simulators and package caches. Only shown if present. On a Mac that has run Xcode or a package manager, these caches are frequently the largest single part of the grey block.
What counts as developer leftovers
The line this category draws is between a cache, which the tool rebuilds or re-downloads on its next run, and tooling, which you installed on purpose and would uninstall rather than clear. Only caches are leftovers. These are the ones a scan looks for, and each one regenerates:
- Xcode build files —
~/Library/Developer/Xcode/DerivedData. Rebuilt on the next build of each project. - iPhone debug symbols —
~/Library/Developer/Xcode/iOS DeviceSupport. Downloaded again when a device with that iOS version is next connected. - Simulator caches —
~/Library/Developer/CoreSimulator/Caches. Rebuilt when you next run a simulator. - Package caches — CocoaPods (
~/Library/Caches/CocoaPods,~/.cocoapods), npm (~/.npm/_cacache), Gradle (~/.gradle/caches), Homebrew downloads (~/Library/Caches/Homebrew), Dart and Flutter (~/.pub-cache,~/.dartServer) and NuGet (~/.nuget/packages). Each is re-downloaded on the next install or build. - Superseded Android NDKs —
~/Library/Android/sdk/ndk. Android Studio adds a new NDK with each update and never removes the old one. Only versions a newer NDK has replaced are listed, never the newest, and an Android build downloads an old one again if a project asks for it.
Not on the list, on purpose: ~/.rustup and ~/.android are installed toolchains, and re-downloading them is a long deliberate act rather than a slower build. ~/.cache is whatever any program felt like putting in a generic folder, and a category that names the tool for every row cannot name that one.
Why it lands in System Data
All of these live in your Library or in hidden folders at the top of your home folder. Apple's storage bar has a Developer category on some Macs, but it does not cover the package managers, and hidden folders are not shown anywhere in System Settings. The result is a grey block that can be mostly build products from projects you finished years ago.
It is also the category most likely to belong to somebody else: a Mac handed down from a developer, or a work machine from a previous job, carries their caches under the same account.
What MacMemory scans
The category is listed under Developer leftovers with the label You decide, and the app hides it entirely when there is nothing in it: a Mac that has never seen Xcode is not told about build files. Each row names its tool in plain words — Xcode build files, Simulator caches, npm cache — and says what will rebuild it.
One honesty note. Package caches can hold over a million small files, and the app holds its whole scan to about thirty seconds. When this category runs out of time, the rows it did measure are exact, and the row says there is more it did not reach, rather than printing a number it never measured.
How to free up developer leftovers by hand
Each step uses the tool's own way of clearing its cache where one exists, which is safer than deleting the folder: the tool knows what it is holding open.
Delete Xcode's build files. You decide
In Xcode, open Settings, then Locations. Click the arrow beside the Derived Data path to open the folder in Finder, quit Xcode, and move the folder's contents to the Trash. Every project rebuilds from source on its next build.
Location:
~/Library/Developer/Xcode/DerivedDataUndo: In the Trash until you empty it. Xcode rebuilds these on the next build.
Remove simulators you no longer have a runtime for. You decide
Delete simulator devices whose runtime is no longer installed. They cannot be booted and only take space.
xcrun simctl delete unavailableUndo: None needed. A simulator device is recreated in seconds from Xcode's device window.
Remove old simulator runtimes. You decide
In Xcode, open Settings, then Components (Platforms in newer versions). Each installed iOS, watchOS and visionOS runtime is listed with its size. Select one you no longer target and delete it.
Undo: Download the runtime again from the same list. Xcode fetches it from Apple.
Clear debug symbols for old devices. You decide
Each folder here holds the symbols for one iOS version you once debugged on a device. Move the ones for versions you no longer test to the Trash.
Location:
~/Library/Developer/Xcode/iOS DeviceSupportUndo: In the Trash until you empty it. Xcode downloads symbols again from the next connected device.
Let each package manager clear its own cache. You decide
Homebrew, npm, CocoaPods and Gradle each have a cache command that removes what they hold. Run the ones for tools you use; the next install or build downloads what it needs.
brew cleanup && npm cache clean --force && pod cache clean --allUndo: None needed. The next install re-downloads exactly what the project asks for.
The shortcut
MacMemory does the steps above from one screen. It scans for free, lists what it finds with one plain sentence per row and the same two labels — Safe to delete and You decide — and moves what you tick to the Trash. Four exceptions are stated on the row that offers them: Time Machine snapshots, the Trash itself, Docker images, which only Docker can remove, and unused simulators, which only Xcode can erase, are removed outright. Mail, backups, snapshots and the Trash need Full Disk Access to be read at all, and a category it cannot read shows a lock rather than a zero.
Nothing it deletes is beyond what this page describes. What it saves you is the Terminal. What it costs · Questions people ask