返回博客

Xcode 模拟器占用 Mac 大量空间?应该优先清理什么

了解模拟器运行时和模拟器数据的区别、哪些可以安全删除,以及如何在不破坏 iOS 开发环境的前提下回收 Mac 磁盘空间。

已发表 2026年4月1日 作者 Vladimir Chemeris 阅读时间 约 2 分钟阅读 已更新 2026年8月31日
XcodeSimulatorDeveloper Cleanup

如果 Xcode 模拟器正在占用 Mac 大量空间,请在删除任何内容之前先区分模拟器运行时和模拟器设备数据。首先审查什么是不可用的、什么是非活跃的、以及你仍然需要用于测试的内容,因为模拟器清理在将每个 Apple 侧文件夹都当作可丢弃缓存处理时会变得有风险。

这是开发者在学到一条清理规则后就到处套用时犯的错误。DerivedData 是一回事。模拟器运行时和模拟器设备状态是另一回事。

存储是可以回收的。只是后果不那么统一。

核心原则:按层级清理模拟器存储。先移除不可用的设备,仅在确实要重置时才擦除设备数据,并仅在你不再需要该操作系统版本时才删除运行时。

快速回答

  1. 检查实际占用是模拟器运行时、模拟器设备数据,还是两者兼有。
  2. 在删除任何内容之前使用 xcrun simctl list devicesxcrun simctl list runtimes
  3. 当不可用设备出现在不可用部分时,首先用 xcrun simctl delete unavailable 删除它们。
  4. 仅当你想重置模拟器设备的内容和设置时才使用 erase
  5. 仅在你确定不再需要该平台版本用于构建、预览或测试时才删除运行时。
  6. 如果 Apple 侧存储超出了模拟器范围,一起审查 DerivedDataArchivesCoreSimulator,而不是从一个文件夹猜测。
StorageRadar CoreSimulator 清理审查界面,显示已选择的模拟器设备、试运行总计和执行前的确认关卡
当选择、试运行总计和确认步骤保持明确而非隐藏在广泛重置背后时,模拟器清理更安全。

CoreSimulator 是什么

CoreSimulator 是 Apple 管理的文件夹,Xcode 在其中保存构建和测试 iOS、iPadOS、watchOS、tvOS 应用所用的模拟器运行时和已创建的模拟器设备。在大多数 Mac 上它位于 ~/Library/Developer/CoreSimulator,随着你添加运行时、创建设备、在其中积累应用数据而不断变大。

它不是普通缓存。这个文件夹混着两样东西:你可能还依赖的运行时镜像,以及很多情况下可以重置或删除的设备状态。所以”CoreSimulator 占了几十 GB”没有唯一答案。

可以删除 CoreSimulator 文件夹吗

不要整个文件夹一删了之。清空正确的那一层,而不是抹掉整条路径,就能拿回大部分空间。

手动删掉整个 ~/Library/Developer/CoreSimulator,Xcode 就得重建模拟器状态,你还需要的运行时也会一起消失。安全的做法是让 Apple 自己的 simctl 去清理真正可丢弃的部分:

  • xcrun simctl delete unavailable 删除当前 SDK 不再支持的设备;
  • 当问题出在应用状态膨胀时,用 xcrun simctl erase <device> 重置设备的内容和设置;
  • 只有确定不再测试某个系统版本时,才用 xcrun simctl runtime delete 删除该运行时。

CoreSimulator 的空间是一层一层拿回来的,而不是删掉文件夹再指望 Xcode 自己恢复。

Xcode 模拟器存储了什么以及为什么会累积

模拟器存储不是一样东西。它是多个层级一起累积的结果。

从高层级来看,Xcode 模拟器存储通常包括:

  • 不同 iOS 平台版本的运行时镜像;
  • 为不同 iPhone 和 iPad 型号创建的模拟器设备;
  • 这些模拟器内每个设备的应用数据、设置和状态;
  • 在你切换 SDK、设备类型和 Xcode 版本时增长的 Apple 侧开发开销。

这就是为什么开发者经常对 CoreSimulator 感到困惑的原因。很容易看到文件夹大小就假设整个东西只是缓存。实际上,其中一部分更像是一次性的测试状态,而另一部分是你仍然依赖的运行时支持。

增长模式是正常的:

  • 你安装了新的 Xcode 或 SDK;
  • 新的运行时出现;
  • 创建了新的模拟器设备;
  • 应用、测试数据和设置在其中累积;
  • 旧设备在 SDK 更改或 Xcode 升级后变为不可用;
  • 数月没有被审查,因为机器仍有足够的可用空间。

然后某一天模拟器存储成为主要问题,而不再是一个细节。

模拟器运行时 vs 模拟器数据:有什么区别?

这是最重要的区分。

Apple 的 simctl 工具将运行时操作与设备操作分开处理。这本身就告诉你清理模型是分层的:设备与运行时不是同一回事,擦除设备与删除运行时镜像也不是同一回事。

层级代表什么典型清理操作主要权衡
模拟器运行时用于启动特定平台版本的操作系统运行时镜像对你确实不再需要的运行时执行 simctl runtime delete你失去该运行时用于未来模拟器使用,直到重新添加
模拟器设备为特定设备型号创建的模拟器实例simctl delete <device>delete unavailable设备实例消失
模拟器设备内容和设置设备内安装的应用、应用数据、设置和状态simctl erase <device>设备保留,但其内容和设置被重置

这就是为什么像”直接清掉 CoreSimulator”这样笼统的说法是不好的建议。它们将不同的清理后果压缩成一个情绪化的操作。

DerivedData 在哪里适用

DerivedData 是相关的,但不是同一个问题。

DerivedData 通常是生成的构建输出。模拟器存储更复杂。它可以包含你仍然需要的运行时、你不再需要的已创建设备、以及设备内你可能关心也可能不关心的状态。

如果压力主要来自生成的构建输出,正确的指南是 Xcode DerivedData 占用过多空间?应该优先清理什么。如果压力主要来自运行时镜像和模拟器状态,继续使用模拟器工作流。

如何检查模拟器占用了多少空间

第一步是检查,而不是删除。

使用 Apple 自己的工具查看实际存在哪些设备和运行时:

xcrun simctl list devices
xcrun simctl list runtimes

如果你想直接检查磁盘上更广泛的 Apple 侧存储占用,也可以直接比较主要文件夹:

du -sh ~/Library/Developer/CoreSimulator
du -sh ~/Library/Developer/Xcode/DerivedData
du -sh ~/Library/Developer/Xcode/Archives

这很重要,因为最大的 Apple 侧文件夹并不总是你假设的那个。有时 DerivedData 是主要问题。有时 CoreSimulator 悄悄超过了它。

首先要找什么

  • 列在 Unavailable 下的设备;
  • 你不再测试的操作系统版本的运行时;
  • 跨多个运行时世代创建的大量设备;
  • 自多次 Xcode 更新以来未清理过的机器上模拟器密集的状态;
  • 与你当前测试需求不匹配的大型 CoreSimulator 文件夹。

那就是清理从反应式变为理性式的起点。

在 Xcode 中删除模拟器的步骤

如果你要真正删除模拟器而不只是查看,有两条安全路径:Xcode 界面和 simctl 命令行。两者都能清掉旧模拟器,同时不碰你还需要的运行时。

在 Xcode 应用中:

  1. 打开 Xcode,进入 Window → Devices and Simulators
  2. 选择 Simulators 标签页。
  3. 右键点击不再需要的模拟器并选择 Delete,或用 Delete Unavailable Simulators 一次清掉当前 SDK 不再支持的设备。

在命令行中:

# 先列出全部
xcrun simctl list devices

# 删除当前 SDK 标记为 unavailable 的所有设备
xcrun simctl delete unavailable

# 按 UDID 删除某一台设备
xcrun simctl delete <device-UDID>

删除不可用模拟器是最干净的第一步,因为消失的只有 Apple 已标记为不支持的设备。删除某台具体设备只会移除该模拟器实例,运行时镜像仍在原处,项目需要时可以重新创建。

如果目标是腾出空间,先从这里开始,再考虑运行时:删掉的设备很快能重建,删掉的运行时是更重的决定。

在 Mac 上删除模拟器运行时安全吗?

有时可以,但这不是最安全的第一步。

Apple 的 simctl runtime 帮助明确指出运行时镜像是独立管理的对象。删除运行时与清除模拟器内容不同,也与删除不可用设备不同。

这意味着运行时删除最适合以下情况:

  • 你不再需要该 iOS 版本进行测试;
  • 你已经超越了旧的 Xcode 或 SDK 世代;
  • 该运行时足够不常用,空间价值超过了便利性;
  • 你已经先查看了运行时列表并确切知道你要移除什么。

以下情况是不好的选择:

  • 一个活跃项目仍然面向该运行时系列;
  • SwiftUI 预览、QA 复现步骤或回归测试仍然依赖它;
  • 你即将在旧目标上演示或调试问题;
  • 你仅根据大小而非实际测试需求在删除。

更好的第一步:移除明显的无用负担

最安全的模拟器清理通常从不可用设备开始。

Apple 在 simctl delete 中直接文档化了这一点:unavailable 别名删除当前 Xcode SDK 不支持的设备。

xcrun simctl delete unavailable

这不是通用答案,但它是其中一个最干净的首轮操作,因为它针对的是已经被当前 SDK 上下文标记为不支持的设备。

在不破坏开发环境的情况下清理模拟器数据

这是开发者经常用错工具的地方。

如果你的问题是模拟器内过期的应用数据或膨胀的设备状态,你可能根本不需要删除运行时。你可能只需要重置模拟器设备。

Apple 的 simctl erase 帮助将 erase 定义为擦除设备的内容和设置:

xcrun simctl erase <device>

这是一个重置操作,不是运行时移除操作。

erase 适合做什么

  • 清除模拟器内的应用状态;
  • 重置测试环境;
  • 移除膨胀的设备级内容而不移除运行时镜像本身;
  • 保留设备工作流同时丢弃其累积的状态。

erase 不是什么

  • 不是运行时清理命令;
  • 不是 DerivedData 清理命令;
  • 不是审查你实际仍需要哪些设备和运行时的好替代方法。

这个区分就是整个模拟器清理的全部故事:擦除设备、删除设备和删除运行时是三个不同的决定。

CoreSimulator 在磁盘上的位置

排查模拟器占用时,有两条路径值得看。

~/Library/Developer/CoreSimulator/Devices 存放你创建的模拟器设备。每台设备是一个以 UDID 命名的文件夹,其中的 data/ 装着已安装的应用、应用数据和设置。simctl erase 重置的、simctl delete 移除的就是这一层。

系统级的 /Library/Developer/CoreSimulator 承载运行时那一侧。取决于 Xcode 版本,运行时镜像可能以 .simruntime 包的形式放在 Profiles/Runtimes 下,也可能由 Xcode 作为可下载运行时管理,用 xcrun simctl runtime list 查看。在那里删除任何东西都会影响 Mac 上的每个用户账户,所以要当作更重的决定处理。

du -sh ~/Library/Developer/CoreSimulator/Devices
du -sh /Library/Developer/CoreSimulator
xcrun simctl runtime list

如果 Devices 占大头,问题在累积的设备状态和当前 SDK 不再支持的设备。如果系统级文件夹占大头,问题在运行时镜像。

可以把 CoreSimulator 移到外接硬盘吗

内置磁盘偏小、模拟器文件夹超过 40 GB 时,这个问题就会冒出来。Apple 没有提供受支持的迁移设置,于是开发者用符号链接:把 ~/Library/Developer/CoreSimulator 复制到外接卷,核对副本,删除原目录,再把旧路径链接到新位置。

你要接受的代价:

  • 硬盘未挂载时路径消失,Xcode 无法启动模拟器;
  • 在总线供电的 USB 硬盘上,模拟器启动比内置 SSD 慢;
  • Xcode 或 SDK 更新可能在原路径重新创建部分目录结构;
  • 备份和权限在外接卷上的行为不一样。

搬走整个文件夹之前,先量一量能回收多少。删除不可用设备和不再测试的运行时,往往比搬迁腾出更多空间,而且保持在 Apple 支持的配置里。

如何持续管理模拟器存储

实际目标不是”永远不让模拟器增长”。实际目标是”阻止模拟器存储变成不可见的”。

使用这样的审查节奏:

  1. 在重大 Xcode 或 SDK 更改之后列出设备和运行时。
  2. 当不可用设备出现时删除它们。
  3. 当问题是设备状态而非运行时清单时,重置过期的模拟器设备。
  4. 在完全移除某个操作系统版本之前审查运行时使用情况。
  5. 当 Apple 侧存储开始攀升时,一起比较 CoreSimulatorDerivedDataArchives

这让清理决策与实际占用昂贵的层级保持一致。

Apple 侧存储的更好心智模型

  • DerivedData 主要是生成的构建输出。
  • Archives 保留交付物和构建历史。
  • CoreSimulator 混合了运行时支持和模拟器设备状态。
  • 最安全的清理取决于哪个层级大,而不仅仅是哪个文件夹可见。

一旦你按层级思考,模拟器清理就会变得不那么混乱。

为什么保持感知生态系统让开发者清理效果更好

如果你只使用 Finder,一个 20 GB 或 30 GB 的 Apple 侧文件夹看起来像是一个明显的清理目标。实际上不是。

文件浏览器可以告诉你 CoreSimulator 很大。它不能告诉你真正可回收的空间是:

  • 不支持的设备;
  • 可重置的模拟器内容;
  • 你不再需要的运行时;
  • 还是恰好住在附近的另一个 Xcode 配置文件。

这就是为什么模拟器清理属于开发者清理,而非通用文件清理。

如果你的实际问题是”模拟器加上 DerivedData 加上其他 Apple 开发者存储”,那种更全面的感知配置文件工作流比逐个追逐文件夹路径有用得多。

总结

如果 Xcode 模拟器正在占用 Mac 大量空间,不要把 CoreSimulator 当作一个可随意丢弃的缓存桶。

先审查设备和运行时。将删除不可用设备作为干净的第一轮操作,仅当你想重置模拟器内容和设置时使用 erase,并仅在你确实不再需要该操作系统版本时才移除运行时。

这是更安全的清理路径:将运行时镜像与设备状态分开,将模拟器存储与 DerivedData 分开,让 Apple 侧清理与实际测试需求关联,而不是盲目删除文件夹。

关于作者

Vladimir Chemeris

StorageRadar 创始人

Vladimir Chemeris 开发了 StorageRadar——一款注重隐私的 macOS 存储分析工具,专注于审查优先的清理方式、开发者存储管理以及清理前后的可视化对比。

常见问题

为什么 Xcode 模拟器在 Mac 上占用这么多磁盘空间?

模拟器存储增长是因为 Xcode 随时间积累运行时镜像、已创建的模拟器设备、这些模拟器内的应用数据以及其他 Apple 侧的开发状态。跨多个 iOS 版本和设备类型进行测试会使存储占用快速膨胀。

模拟器运行时和模拟器数据有什么区别?

模拟器运行时是 Xcode 用于启动特定平台版本模拟器的操作系统运行时镜像。模拟器数据是已创建模拟器内的设备级状态,例如已安装的应用、应用数据和设置。

删除不可用的模拟器设备安全吗?

通常安全。Apple 的 simctl 工具明确支持删除不可用的设备,即当前 Xcode SDK 不再支持的设备。这通常是最安全的模拟器清理步骤之一。

在 Mac 上删除模拟器运行时安全吗?

有时可以,但仅在你确定不再需要该运行时用于测试、预览或较旧项目目标时。移除运行时比擦除模拟器内容是更大的决定,因为它移除的是运行时镜像本身。

擦除模拟器会删除运行时吗?

不会。Apple 的 simctl 帮助将 erase 描述为清除设备的内容和设置。这会重置模拟器设备,但与删除其背后的运行时镜像是不同的操作。

CoreSimulator 是什么?

CoreSimulator 是位于 ~/Library/Developer/CoreSimulator 的 Apple 管理文件夹,Xcode 在其中保存模拟器运行时和为测试创建的模拟器设备。它随着运行时的添加、设备的创建以及其中积累的应用数据而变大,因此混着你还需要的存储和可以重置或删除的存储。

可以删除 CoreSimulator 文件夹吗?

整个文件夹一起删并不安全,那样会移除你还需要的运行时,并迫使 Xcode 重建模拟器状态。请按层回收空间:xcrun simctl delete unavailable 删除不受支持的设备,xcrun simctl erase 重置设备内容,xcrun simctl runtime delete 只用于你不再测试的系统运行时。

如何在 Xcode 中删除模拟器?

在 Xcode 中打开 Window 再进入 Devices and Simulators,选择 Simulators 标签页,右键删除某个模拟器,或使用 Delete Unavailable Simulators。命令行下,xcrun simctl delete unavailable 会删除当前 SDK 不再支持的设备,xcrun simctl delete <UDID> 删除指定设备并保留其运行时镜像。

CoreSimulator 文件夹在 Mac 的什么位置?

模拟器设备位于 ~/Library/Developer/CoreSimulator/Devices,每个设备文件夹以 UDID 命名,并在 data/ 下保存已安装的应用和设置。运行时镜像位于系统级的 /Library/Developer/CoreSimulator,取决于 Xcode 版本,可能是 Profiles/Runtimes 下的 .simruntime 包,也可能是 xcrun simctl runtime list 显示的可下载运行时。

可以把 Xcode 模拟器移到外接硬盘吗?

Apple 没有提供受支持的设置。开发者用从 ~/Library/Developer/CoreSimulator 到外接卷某个文件夹的符号链接来实现,但此后 Xcode 依赖该硬盘保持挂载,模拟器通过 USB 启动更慢,Xcode 更新还可能在原路径重建部分结构。删除不可用设备和闲置运行时,通常能腾出更多空间,风险也更小。

在清除错误的 Xcode 数据之前先审查模拟器存储。

StorageRadar 将模拟器状态、运行时、DerivedData、归档和其他 Apple 开发者配置文件分开,让你可以检查大小、风险,并在执行之前先预览下一步操作。