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 上占了多少,可以下载浣熊管家运行一次深度清理,扫描本身不会删除任何内容。下面的演示窗口使用示例数据,其中的条目、大小和勾选状态仅作示意。
深度清理
清理清单
- 保存工作,退出 Xcode 和模拟器。
- DerivedData 和模拟器缓存可以直接清理。
- 运行时和设备支持文件只保留项目仍要支持的系统版本。
- 删除运行时后,运行一次
xcrun simctl delete unavailable。 - Archives 只在 Organizer 中逐个确认后删除。
常见问题
删除 DerivedData 会影响源码或 Git 吗?
不会。DerivedData 只存放生成的内容,源码、Git 历史、证书和描述文件都在别处。代价是下一次完整构建和索引会慢一些。
为什么清理后没多久又涨回去了?
这是正常现象。只要你还在构建项目、使用模拟器,Xcode 就会重新生成这些数据。与其频繁清空正在使用的缓存,不如定期删掉不再用的系统版本和旧项目的数据。
运行时删错了怎么办?
在 Xcode → Settings → Components 中重新下载对应版本即可,代价只是下载时间。如果整台 Mac 的空间都很紧张,可以先看Mac 储存空间不足时的清理顺序。
相关文章
开发者磁盘清理发布于 2026/10/29
旧项目的 node_modules、target、build 目录怎么批量清理
找出旧项目里可以重新生成的依赖和构建目录,用命令或浣熊管家批量清理,同时避开虚拟环境和被 Git 跟踪的文件。
开发者磁盘清理发布于 2026/10/29
npm、pnpm、Yarn 缓存怎么清理,不影响项目
分清全局缓存和项目里的 node_modules,用官方命令清理 npm、pnpm、Yarn 缓存,并避开几个容易踩的坑。
开发者磁盘清理发布于 2026/10/29
Docker Desktop 在 Mac 上占用太大,怎么回收空间
弄清 Docker Desktop 的虚拟磁盘里装了什么,用官方命令清理构建缓存、镜像和容器,同时保住数据卷里的数据。