# Xcode DerivedData、旧模拟器和 iOS DeviceSupport 可以放心删除吗？

> ~/Library/Developer 中每个 Xcode 文件夹存放什么、哪些会被重建、为什么 Archives 要谨慎，以及删除模拟器的 simctl 命令。

- URL: https://moreroom.app/zh-Hans/learn/xcode-deriveddata-simulators-devicesupport
- Published: 2026-10-17
- Updated: 2026-10-17
- Publisher: MoreRoom (Yando Pte. Ltd.) — https://moreroom.app

## TL;DR

- DerivedData 可以放心删除：下次构建时 Xcode 会重新生成，代价只是一次较慢的构建和重新索引。
- iOS DeviceSupport 文件夹可以放心删除；下次连接运行该系统版本的设备时，Xcode 会重新拷贝符号文件。
- 不要随手删除 Xcode Archives。它们包含 dSYM 文件，Xcode 需要用它们来符号化已发布版本的崩溃报告。
- 请用 xcrun simctl delete unavailable 删除模拟器，用 xcrun simctl runtime delete 删除运行时，而不是手动删除文件夹。
- 每个模拟器运行时通常有 7–10 GB，移除不再测试的 iOS 版本，往往是单项收益最大的一步。

大多数情况下，可以。**DerivedData、iOS DeviceSupport、测试设备克隆、预览模拟器和 Xcode 缓存都可以放心删除**：Xcode 在需要时会重新创建它们。**模拟器和模拟器运行时**同样可以移除，但请使用 Apple 的 `simctl` 工具，而不是在访达中操作。唯一需要谨慎对待的是 **Archives**，因为其中保存着你已发布 App 的调试符号。

在用于 iOS 开发的 Mac 上，这些文件夹加起来常常达到几十 GB。下面逐一说明它们是什么，以及最稳妥的移除方法。

## Xcode 把数据存在哪里

几乎所有内容都位于个人文件夹下的 `~/Library/Developer` 中。模拟器运行时是例外：它们是由 macOS 管理的系统磁盘映像。

| 文件夹 | 路径 | 可以删除吗？ | 会再出现吗？ |
|---|---|---|---|
| DerivedData | `~/Library/Developer/Xcode/DerivedData` | 可以 | 会，下次构建时 |
| Archives | `~/Library/Developer/Xcode/Archives` | 请先检查 | 不会 |
| iOS DeviceSupport | `~/Library/Developer/Xcode/iOS DeviceSupport` | 可以 | 会，连接设备时 |
| 模拟器设备 | `~/Library/Developer/CoreSimulator/Devices` | 使用 `simctl` | 在 Xcode 中重新创建 |
| 模拟器运行时 | `/Library/Developer/CoreSimulator/Volumes` | 使用 `simctl` | 重新下载 |
| 测试设备克隆 | `~/Library/Developer/XCTestDevices` | 可以 | 会，并行测试时 |
| SwiftUI 预览 | `~/Library/Developer/Xcode/UserData/Previews` | 可以 | 会，运行预览时 |
| 模拟器缓存 | `~/Library/Developer/CoreSimulator/Caches` | 可以 | 会 |
| Xcode 缓存 | `~/Library/Caches/com.apple.dt.Xcode` | 可以 | 会 |

旁边的 `watchOS DeviceSupport`、`tvOS DeviceSupport`、`visionOS DeviceSupport` 和 `macOS DeviceSupport` 文件夹，道理与 DeviceSupport 相同。

![~/Library/Developer 下 Xcode 各储存文件夹的示意图，标有“可安全移除”和“请先检查”](https://moreroom.app/learn/img/xcode-deriveddata-simulators-devicesupport-map.svg)

## DerivedData：可以放心删，Xcode 会重建

[DerivedData](https://moreroom.app/glossary#derived-data) 保存中间构建产物、源代码索引、构建日志和模块缓存，每个项目一个子文件夹。删除它永远不会碰到你的代码。代价是时间：每个项目的下一次构建都要从头开始，Xcode 还要重新索引，代码补全才能完全恢复。

先退出 Xcode，再把其中的内容移到废纸篓：

```sh
open ~/Library/Developer/Xcode/DerivedData
```

如果只想清理某一个项目，只删除它对应的子文件夹即可（名称为项目名加一串随机后缀）。Xcode 中的 **Product › Clean Build Folder** 会移除构建产物，但通常保留索引，因此释放的空间更少。你可以在 **Xcode › Settings › Locations** 中查看或更改这个位置。

## Archives：保留已发布的版本

每个 `.xcarchive` 都是你用 **Product › Archive** 创建的已签名构建，其中包含 App 的 dSYM 文件。Xcode 借助它们[为崩溃报告添加符号名称](https://developer.apple.com/documentation/xcode/adding-identifiable-symbol-names-to-a-crash-report)：如果没有对应的 dSYM，该版本的崩溃报告只会显示内存地址，而不是函数名。第三方崩溃报告工具也需要这些文件。

所以，请逐个检查归档，而不是清空整个文件夹。在 **Window › Organizer › Archives** 中，删除已经没有用户运行的版本，例如旧的内部测试版。对于仍在 App Store 或 TestFlight 上的版本，请保留归档，或先把 `.xcarchive` 包拷贝到外置驱动器，再从 Mac 上移除。

## iOS DeviceSupport：可以放心删，需要时会再次拷贝

当你连接 iPhone、iPad、Apple Watch、Apple TV 或 Vision Pro 进行开发时，Xcode 会拷贝这台设备的系统符号，以便在 Mac 上调试和符号化。较新的 Xcode 会以设备型号、系统版本和构建号为每个文件夹命名，例如 `iPhone15,5 27.0.1 (24A446)`，单个文件夹往往就有好几 GB。

你调试的每台设备每做一次 iOS 更新，就会多出一个新文件夹，而 Xcode 不会删除旧的。不再运行的系统版本对应的文件夹，可以放心移到废纸篓。如果删掉了仍需要的文件夹，下次连接这台设备时 Xcode 会再次拷贝，大约需要几分钟。

## 模拟器：设备和运行时是两回事

模拟器**运行时**是某个系统版本（例如 iOS 27.1）的完整系统映像，通常有 7–10 GB。模拟器**设备**则是一份小小的配置加上它自己的数据：已安装的 App、照片和设置。多个设备可以共用一个运行时，因此删除设备释放的是它的数据，删除运行时释放的才是那个大映像。

![示意图：一个模拟器运行时被多个模拟器设备共用，以及分别用哪条 simctl 命令移除它们](https://moreroom.app/learn/img/xcode-deriveddata-simulators-devicesupport-simulators.svg)

### 移除模拟器设备

列出设备，并移除那些已无法与当前安装的运行时配合使用的设备：

```sh
xcrun simctl list devices
xcrun simctl delete unavailable
```

`delete unavailable` 会移除当前 Xcode 已不再支持的设备，它们通常是旧运行时留下来的。要移除某一个设备，请从列表中复制它的 UDID：`xcrun simctl delete <UDID>`。你也可以在 **Window › Devices and Simulators** 中完成这一操作。除非你确实想移除所有模拟器及其数据，否则不要使用 `xcrun simctl delete all`。删除设备是永久性的；不过你随时可以在 Xcode 中新建一个。

### 移除模拟器运行时

```sh
xcrun simctl runtime list
xcrun simctl runtime delete <identifier>
```

`runtime list` 会显示每个已安装映像的版本、标识符和状态，以及总大小。`runtime delete` 接受标识符（每行中的 UUID），然后卸载并移除该映像。从 Xcode 27 起，`delete` 还支持用 `--dry-run` 预览，以及 `--notUsedSinceDays <days>`、`--unusable` 和 `--outdated` 选项。较早的 Xcode 支持的选项更少，请运行 `xcrun simctl runtime` 查看你的版本支持哪些。

在 Xcode 中，也可以通过 **Xcode › Settings › Components**（在 Xcode 15 中叫 **Platforms**）完成同样的操作：选中某个运行时，然后删除。Apple 关于[下载和安装其他 Xcode 组件](https://developer.apple.com/documentation/xcode/downloading-and-installing-additional-xcode-components)的文档说明了如何把它找回来，包括在“终端”中运行 `xcodebuild -downloadPlatform iOS`。

不要手动删除 `/Library/Developer/CoreSimulator/Volumes` 或 `/System/Library/AssetsV2` 中的运行时文件。较新的 Xcode 把运行时作为系统管理的资源来存储，直接删除文件可能导致运行时仍处于已登记状态，却无法使用。

### 测试克隆、预览和模拟器缓存

- **XCTestDevices**：Xcode 为并行测试创建的克隆。没有测试在运行时，可以放心移到废纸篓。
- **SwiftUI 预览**：Xcode 在一组专用模拟器中运行预览。`xcrun simctl --set previews delete all` 会移除它们；下次运行预览时 Xcode 会重新创建。
- **CoreSimulator 缓存和日志**：关闭“模拟器”App 后，`~/Library/Developer/CoreSimulator/Caches` 和 `~/Library/Logs/CoreSimulator` 可以放心清空。

## 旧版 Xcode、工具链和下载文件

`/Applications` 中的每个 Xcode 都是一个大型 App，为旧项目保留的测试版或旧版很快就会累积起来。删除之前，先确认命令行工具使用的是哪个 Xcode：

```sh
xcode-select -p
```

保留这个路径指向的那份，以及 CI 任务或旧项目仍然需要的版本。另外看看 `~/Downloads` 中有没有 `.xip` 文件：Xcode 安装完成后，这个压缩包就不再需要了。从 swift.org 下载的其他 Swift 工具链位于 `~/Library/Developer/Toolchains`，请保留项目实际选用的那些。

`~/Library/Caches/com.apple.dt.Xcode` 是 Xcode 自己的缓存，会按需重建。如果你用了很多年 Xcode，可能还会在 `~/Library/Developer/Shared/Documentation/DocSets` 中找到很早期的 Xcode 下载的离线文档集；当前版本已经不再使用它们。

## 推荐的清理顺序

1. 退出 Xcode 和模拟器。
2. 删除 DerivedData、XCTestDevices 和预览模拟器。这一步没有风险。
3. 运行 `xcrun simctl delete unavailable`。
4. 移除不再面向的系统版本对应的 DeviceSupport 文件夹和模拟器运行时。
5. 最后再慎重检查 Archives 和旧版 Xcode。

完成后清倒废纸篓，空间才会真正回来。这些文件夹在 macOS 27 Golden Gate、26 Tahoe、15 Sequoia 和 14 Sonoma 上都一样；可用的 `simctl` 选项取决于你的 Xcode 版本。

## MoreRoom 能帮你做什么

MoreRoom 免费版会扫描 `~/Library/Developer`，识别上述每个文件夹，标注“可安全移除”或“请先检查”，并说明它是否会再次出现。DerivedData、DeviceSupport、测试克隆和缓存可以逐项移到废纸篓，并且可以撤销。对于模拟器设备和运行时，MoreRoom 会运行 Apple 自己的 `xcrun simctl delete` 和 `xcrun simctl runtime delete`；这些命令是永久性的，并会明确标注。Archives 会被标记为建议保留。

MoreRoom Pro 还提供“收集器”（一次清理多个项目）、目标模式（根据你需要的空间挑选最安全的组合）以及针对不活跃项目的项目休眠。从 MoreRoom 直接把归档转移到外置驱动器的功能即将推出；目前请自行拷贝。

## FAQ

### 删除 DerivedData 会破坏我的 Xcode 项目吗？

不会。DerivedData 只包含 Xcode 生成的构建产物、索引和日志。你的源代码和项目设置都保存在项目文件夹中。Xcode 重新生成这些数据期间，下一次构建和索引会花更长时间。

### 删除 Xcode Archives 安全吗？

只适用于已经没人运行的版本。每个归档都包含 dSYM 文件，可以把崩溃报告中的地址转换成函数名。凡是仍在用户手中的版本，都请保留归档，或先拷贝到其他驱动器。

### 为什么 iOS DeviceSupport 删了又会出现？

你每连接一台设备进行开发，Xcode 都会从中拷贝调试符号，每种设备型号和系统版本各一份。如果删掉了仍在使用的设备对应的文件夹，下次连接这台设备时，Xcode 会再次拷贝。

### 可以直接删除 CoreSimulator 文件夹吗？

最好不要。模拟器设备和运行时都登记在 CoreSimulator 服务中，而运行时是挂载的系统磁盘映像。请使用 xcrun simctl delete 和 xcrun simctl runtime delete，或 Xcode 的设置，这样登记信息才能保持一致。

### 删除的模拟器运行时怎样找回来？

在 Xcode › Settings › Components 中重新下载，或在“终端”中运行 xcodebuild -downloadPlatform iOS。之后可以在 Window › Devices and Simulators 中重新创建模拟器设备。
