WTMemory 指南

Xcode 太占空间?删除 DerivedData、DeviceSupport 和旧模拟器

2026年10月13日更新

Xcode DerivedData 位于 ~/Library/Developer/Xcode/DerivedData,可以放心删除:里面只有 Xcode 下次构建时会重新生成的构建产物、索引和日志。退出 Xcode,删掉这个文件夹,代价只是下次构建和索引会慢一些。iOS DeviceSupport 和模拟器缓存同样可以删;Archives 才是要保留的文件夹。

WTMemory 是一款查看功能免费的 macOS 菜单栏 App,可以在你做决定之前先显示这些文件夹及其大小。文末有详细介绍;本文的所有操作只用终端和访达也能完成。

Xcode 在 Mac 上把空间用在了哪里?

几乎所有内容都在 ~/Library/Developer 下。删除任何东西之前,先测量一下:

du -sh ~/Library/Developer/Xcode/* ~/Library/Developer/CoreSimulator/* 2>/dev/null | sort -h

新版 Xcode 安装的模拟器运行时由系统管理,存放在个人文件夹之外,所以上面的命令不会统计它们。用 xcrun simctl runtime list 查看。

位置内容可以删除吗?
Xcode/DerivedData构建产物、索引、模块缓存、日志可以。下次构建变慢并重新索引。
Xcode/iOS DeviceSupport(以及 watchOS、tvOS、visionOS)从已连接设备拷贝的符号文件,每个系统版本一个文件夹可以。连接该版本的设备时会重新拷贝。
CoreSimulator/Caches模拟器缓存可以。需要时会重新创建。
CoreSimulator/Devices每个模拟器及其中安装的应用和数据请用 simctl,不要用 rm。模拟器里的应用数据会丢失。
模拟器运行时iOS、watchOS、tvOS、visionOS 模拟器系统镜像如果不再在该系统上测试,可以删。可以重新下载。
Xcode/Archives你归档的构建版本及 dSYM通常不要删。符号化崩溃报告需要它们。
~/Library/Caches/com.apple.dt.XcodeXcode 应用缓存可以,需先退出 Xcode。

怎么删除 Xcode DerivedData?

先退出 Xcode。在 Xcode 运行时删除这个文件夹,可能让索引器和构建系统陷入混乱状态。

rm -rf ~/Library/Developer/Xcode/DerivedData

rm -rf 是永久删除。如果你想留条后路,可以用 open ~/Library/Developer/Xcode/DerivedData 在访达中打开该文件夹,把里面的内容拖到废纸篓。也可以从 Xcode 进入:设置 > Locations 会显示 DerivedData 路径,旁边的箭头可以直接打开它。

只想清理单个项目,就只删它对应的文件夹。每个文件夹以项目名加一串哈希命名,例如 MyApp-abcdefghij。索引过期、莫名其妙的构建错误,以及 Clean 之后依然存在的 “No such module” 错误,这一招是经典解法。

你要付出的代价:每个项目的下一次构建都是完整构建,解析到 DerivedData 中的 Swift 包要重新拉取,在索引完成前代码补全和跳转到定义会比较慢。源代码不会有任何变化。

Product > Clean Build Folder(Shift-Command-K)不是一回事。它只删除当前项目的构建产物,该项目的索引、其他项目的文件夹以及共享的模块缓存都会保留。

iOS DeviceSupport 可以删除吗?

可以。当你连接 iPhone 或 iPad 进行调试时,Xcode 会把该 iOS 版本的符号文件拷贝到 Mac 上,以便在该设备上调试应用并符号化崩溃日志。你调试过的每个 iOS 版本都会有自己的文件夹,每个可能有好几 GB。按大小列出:

du -sh ~/Library/Developer/Xcode/iOS\ DeviceSupport/* | sort -h

删除测试设备已不再运行的 iOS 版本对应的文件夹。如果你再次连接已删除版本的设备,Xcode 会重新拷贝符号文件,开始调试前需要等几分钟。watchOS DeviceSupport、tvOS DeviceSupport 等同级文件夹也是同样道理。

怎么删除旧的模拟器?

关闭正在运行的模拟器,然后删除运行时已不再安装的设备:

xcrun simctl shutdown all
xcrun simctl delete unavailable

delete unavailable 只删除当前 Xcode SDK 无法运行的模拟器,所以是安全的第一步。要查看其余的,运行 xcrun simctl list devices,再用 xcrun simctl delete <UDID> 按 UDID 逐个删除。xcrun simctl erase all 会把所有模拟器恢复出厂状态但不删除它们,已安装的应用及其数据会被清掉。

运行时通常是最大的一项。列出它们:

xcrun simctl runtime list

然后按标识符删除,或者先预览按时间清理会删掉哪些:

xcrun simctl runtime delete <identifier>
xcrun simctl runtime delete --notUsedSinceDays 90 --dry-run

确认列表无误后去掉 --dry-run。在 Xcode 中,也可以通过 设置 > Components(Xcode 15 中叫 Platforms)完成同样的操作。SwiftUI 预览有自己的一套模拟器;xcrun simctl --set previews delete all 会清空它,Xcode 会重新创建所需的部分。

应该删除 Xcode Archives 吗?

通常不应该。~/Library/Developer/Xcode/Archives 中的每个归档都包含应用构建和它的 dSYM 文件。要把该构建的崩溃报告还原成可读的调用栈,或者重新导出、重新上传该构建,都需要这些 dSYM。只有当这个版本已经不在任何你关心的地方安装,或者你已把它的 dSYM 存到别处(例如崩溃上报服务)时,才删除对应的归档。请在 Window > Organizer > Archives 中管理,这样可以先看清每个归档的版本和日期。

Swift Package Manager 和旧版 Xcode 呢?

为什么 Xcode 的占用会显示为“系统数据”?

macOS 储存空间设置会把开发缓存、模拟器运行时和其他资源库数据归入笼统的类别,通常是“开发者”或“系统数据”,所以这个数字很少能和某个文件夹对上。像上面那样用 du 测量,才能准确知道空间去了哪里。该类别的其余内容请参阅 “系统数据”指南。

在菜单栏里查看 Xcode 缓存

WTMemory 会扫描受支持的位置,包括 Xcode DerivedData、iOS DeviceSupport 和模拟器缓存,并为每一项显示说明和估算大小。做决定之前,你可以在访达中显示任意项目。查看功能免费。

升级 Pro 后,你可以选中单个项目,在确认窗口中阅读删除后果,然后由 WTMemory 将它们移到废纸篓。不会自动选中任何内容,也不会永久删除任何内容:清倒废纸篓由你自己来做。Archives 不在清理范围内,所以你的 dSYM 不会被动。请先退出 Xcode 和模拟器,因为运行中的工具可能还打开着缓存文件。WTMemory 支持 macOS 12 及以上版本,兼容 Apple 芯片和 Intel 机型;Pro 一次性 $9 USD,最多三台 Mac,提供七天试用。

下载 WTMemory

常见问题

删除 Xcode DerivedData 安全吗?

安全。DerivedData 里只有 Xcode 会重新生成的构建产物、索引、模块缓存和日志。请先退出 Xcode。代价是第一次构建变慢,每个项目都要重新索引。

iOS DeviceSupport 可以删除吗?

可以。每个文件夹存放的是从运行对应 iOS 版本的设备上拷贝来的符号文件。如果你再次连接该版本的设备,Xcode 会重新拷贝,需要几分钟。

应该删除 Xcode Archives 吗?

通常不应该。Archives 中有 dSYM 文件,符号化已发布版本的崩溃报告需要用到它们。只有当该版本已不再使用,或者它的 dSYM 另有存放时,才删除对应的归档。

怎么删除旧的 iOS 模拟器?

运行 xcrun simctl delete unavailable,删除运行时已不再安装的模拟器。整个运行时可以用 xcrun simctl runtime delete 删除,或在 Xcode 设置的 Components 面板中删除。

Product > Clean Build Folder 能释放同样多的空间吗?

不能。Clean Build Folder 只删除当前项目的构建产物。该项目的索引、其他项目的文件夹以及 DerivedData 中共享的模块缓存都会保留。

相关指南

WTMemory 完整使用指南与许可证帮助