开发者磁盘清理

Xcode 占用几十 GB:DerivedData、模拟器、设备支持文件怎么清

看清 Xcode 的空间花在哪里,DerivedData、模拟器、运行时和设备支持文件哪些能删、怎么删,哪些必须保留。

发布于 2026/10/29作者 浣熊管家团队

做 iOS 或 macOS 开发一段时间后,你可能会发现系统设置“储存空间”里的“系统数据”或“开发者”一项越来越大。占地方的通常不是 Xcode 应用本身,而是它在使用中持续生成的数据:每个项目的构建缓存、每个系统版本的模拟器运行时、每台调试过的真机对应的设备支持文件。这些内容分散在几个目录里,有的删了只是让下次构建慢一点,有的删了就找不回来。下面先帮你看清每一块是什么,再给出手动清理的方法,最后说明浣熊管家能替你做哪些。

先看空间花在哪里

Xcode 的数据大多在 ~/Library/Developer 下,模拟器运行时则放在系统级目录中。先用两条只读命令看看各占多少:

# 列出 Xcode 和模拟器目录下各子目录的大小,从小到大排序
du -h -d 1 ~/Library/Developer/Xcode ~/Library/Developer/CoreSimulator 2>/dev/null | sort -h
# 列出已安装的模拟器运行时及其占用
xcrun simctl runtime list

常见的大户如下,路径都相对于 ~/Library/Developer:

位置内容删除后
Xcode/DerivedData各项目的构建产物、索引和日志下次构建和索引变慢,会自动重建
Xcode/iOS DeviceSupport真机调试用的系统符号,每个系统版本一份再连接该版本的设备时重新准备
CoreSimulator/Devices每台模拟器,以及装在里面的 App 和数据模拟器中的数据随之删除
CoreSimulator/Caches模拟器生成的共享缓存首次启动模拟器变慢
Xcode/Archives发布用的归档和调试符号(dSYM)无法再导出该版本,也无法符号化它的崩溃日志

模拟器运行时不在这个目录里,单个往往就有数 GB,用上面的 xcrun simctl runtime list 查看。

哪些能删,哪些要先想想

  • 可以直接删:DerivedData、CoreSimulator/Caches,以及旧的设备日志和文档索引。它们都由 Xcode 自动生成,删了只是下次要重新生成。
  • 按需删除:模拟器运行时、设备支持文件和模拟器设备。判断标准是你还要不要在那个系统版本上运行或调试。项目最低支持 iOS 17,就留一个 iOS 17 的运行时;早已不用的测试机,对应的设备支持文件可以删掉。
  • 不要当缓存删:Archives 里是你提交或分发过的构建,以及符号化崩溃日志所需的 dSYM。项目目录、证书和描述文件更不在清理范围内。

手动清理

动手前先退出 Xcode 和模拟器,避免文件在删除过程中被重新写入。下面的 rm -rf 会直接删除,不经过废纸篓。

DerivedData

先在 Xcode → Settings → Locations 确认 Derived Data 用的是默认位置;如果设成了自定义目录,把下面的路径换成你的目录。

# 查看每个项目的构建缓存大小
du -h -d 1 ~/Library/Developer/Xcode/DerivedData | sort -h
# 删除全部构建缓存,源码、证书和归档不受影响
rm -rf ~/Library/Developer/Xcode/DerivedData

只想处理某个项目,就删除对应的“项目名-一串字符”文件夹。如果只是为了解决构建异常,可以先试 Product → Clean Build Folder,影响范围更小。

模拟器设备和 SwiftUI 预览

# 列出所有模拟器及其 UDID
xcrun simctl list devices
# 删除对应运行时已不存在的模拟器
xcrun simctl delete unavailable
# 删除指定的模拟器,连同其中的 App 和数据
xcrun simctl delete <UDID>
# 清空 SwiftUI 预览专用的模拟器,下次预览时会重新创建
xcrun simctl --set previews delete all

delete unavailable 只处理已经失去运行时的设备,最适合在删除运行时之后执行。你也可以在 Window → Devices and Simulators 中右键删除单台模拟器。

模拟器运行时

最直观的方法是打开 Xcode → Settings → Components,点不再需要的版本旁边的信息按钮,再点 Delete,详见 Apple 的组件管理说明。命令行也可以:

xcrun simctl runtime list
# 用列表中显示的标识符删除指定运行时
xcrun simctl runtime delete <标识符>

删除后,这个系统版本的模拟器无法再启动,需要时在同一页面重新下载即可。

设备支持文件

每当你用一台运行新系统版本的真机调试,Xcode 就会在 iOS DeviceSupport(watchOS、tvOS、visionOS 也各有一个目录)中保存一份该版本的符号,单个就可能有几 GB。

du -h -d 1 "$HOME/Library/Developer/Xcode/iOS DeviceSupport" | sort -h

找出早已不用的系统版本,删除对应的文件夹即可。以后再连接这个版本的设备,Xcode 会重新准备,第一次调试要多等一会儿。

归档

归档请在 Window → Organizer 的 Archives 中逐个管理。确认某个版本不需要再分发、也不需要分析它的崩溃日志后,再删除。

用浣熊管家清理 Xcode 数据

在深度清理中运行 标准扫描 后,Xcode 相关内容集中在 Xcode 数据 类别中:

  • Xcode 构建缓存:默认位置的整个 DerivedData。
  • Xcode 模拟器缓存:CoreSimulator 的缓存和临时文件,模拟器设备、运行时和应用数据都会保留。
  • Xcode 文档与设备日志:超过 14 天的文档索引,以及 iOS、watchOS 设备日志。
  • Xcode 设备支持文件:按系统版本逐个列出,可以只勾选不再需要的版本。
  • Xcode 模拟器运行时:通过 Xcode 自带的 simctl 删除,只列出系统标记为可删除的运行时,同样可以逐个勾选。

这一类条目都不会被 智能推荐 预先勾选,需要你展开查看路径和大小后自己选择。它们都要求先退出 Xcode,部分还要求退出模拟器;在 确认清理 中可以通过 关闭运行中的应用(可选) 让浣熊管家代为关闭,请先保存工作。

与 iOS 开发相关的还有几项,分布在其他类别:应用缓存 中的 CoreDevice 设备缓存,系统缓存 中的 旧的 iPhone 和 iPad 固件下载(超过 7 天的固件包),以及 用户缓存文件 中的 Swift Package Manager 缓存 和 CocoaPods 下载缓存。项目里的 Pods、.build 目录,见旧项目构建目录的批量清理。

说明

浣熊管家不会删除 Archives、模拟器设备和 SwiftUI 预览数据,也不会处理自定义位置的 DerivedData,这几项请按上一节手动处理。清理会直接删除文件,不进入废纸篓,结果记录在操作历史中。

想知道这些目录在你的 Mac 上占了多少,可以下载浣熊管家运行一次深度清理,扫描本身不会删除任何内容。下面的演示窗口使用示例数据,其中的条目、大小和勾选状态仅作示意。

深度清理

Macintosh HD32.76 GB 可用
发现 33 项可清理内容估算可清理79.3 GB
系统缓存
已选 / 发现可清理554 MB/ 554 MB全选
旧的诊断日志低风险系统和应用留下的旧诊断报告 313 MB
长期未使用的系统缓存低风险当前用户超过 7 天未更新的系统缓存 241 MB
旧临时文件低风险系统和应用使用时留下的临时文件 394 KB
已选择项目21 项预计释放空间41.5 GB
选择方式
交互演示 · 所有数据均为模拟数据

清理清单

  1. 保存工作,退出 Xcode 和模拟器。
  2. DerivedData 和模拟器缓存可以直接清理。
  3. 运行时和设备支持文件只保留项目仍要支持的系统版本。
  4. 删除运行时后,运行一次 xcrun simctl delete unavailable。
  5. Archives 只在 Organizer 中逐个确认后删除。

常见问题

删除 DerivedData 会影响源码或 Git 吗?

不会。DerivedData 只存放生成的内容,源码、Git 历史、证书和描述文件都在别处。代价是下一次完整构建和索引会慢一些。

为什么清理后没多久又涨回去了?

这是正常现象。只要你还在构建项目、使用模拟器,Xcode 就会重新生成这些数据。与其频繁清空正在使用的缓存,不如定期删掉不再用的系统版本和旧项目的数据。

运行时删错了怎么办?

在 Xcode → Settings → Components 中重新下载对应版本即可,代价只是下载时间。如果整台 Mac 的空间都很紧张,可以先看Mac 储存空间不足时的清理顺序。

相关文章