Levo 指南 · 开发者:Apple
Xcode 为什么这么大? What’s safe to delete

Xcode 这个 App 只是其中一部分。真正占地方的是 ~/Library/Developer:构建数据、模拟器、下载的运行时,以及你连接过的每台设备的调试符号。几乎所有这些都会重新生成,所以可以清理。两个例外是归档,以及你仍在使用的模拟器里的数据。
| 内容 | 位置 | 能安全删除吗? |
|---|---|---|
| Xcode.app | /Applications/Xcode.app | 旧版本可以。保留你在用的那个 |
| 构建数据 | ~/Library/Developer/Xcode/DerivedData | 可以,下次构建时会重新生成 |
| 模拟器 | ~/Library/Developer/CoreSimulator/Devices | 可以,但里面的 App 数据也会一并消失 |
| 模拟器运行时 | /Library/Developer/CoreSimulator(磁盘映像) | 可以,需要时重新下载 |
| 设备支持文件 | ~/Library/Developer/Xcode/iOS DeviceSupport | 可以,连接设备时会再次复制 |
| 归档 | ~/Library/Developer/Xcode/Archives | 仅当该构建已发布且符号文件保存在别处时才可以 |
| 缓存 | ~/Library/Caches/com.apple.dt.Xcode | 可以 |
| SwiftUI 预览 | ~/Library/Developer/Xcode/UserData/Previews | 可以 |
| 命令行工具 | /Library/Developer/CommandLineTools | 仅当你装有完整的 Xcode 且不需要单独使用它们时才可以 |
自己动手清理
先统计各文件夹的大小,把时间花在大的那些上:
du -sh ~/Library/Developer/Xcode/* ~/Library/Developer/CoreSimulator /Library/Developer/CoreSimulator 2>/dev/null
- 退出 Xcode,然后删除
DerivedData中的内容。参见如何删除 DerivedData。 - 用
xcrun simctl或在 Xcode › Settings › Components 中,移除你不用的模拟器和运行时。参见如何删除旧模拟器。 - 打开
iOS DeviceSupport,删除你的设备已不再运行的 iOS 版本所对应的文件夹。参见DeviceSupport 是什么。 - 使用SwiftPM 和 CocoaPods 缓存中的命令清理包缓存。
- 打开 Xcode › Window › Organizer › Archives,看看里面有什么。归档是你发送到 App Store Connect 的那个构建的唯一副本,里面的 dSYM 则用来符号化它的崩溃报告。只有在别处也有这些符号文件时,才删除旧的归档。
/Applications 中的旧版 Xcode 每个约 12 到 15 GB。请在访达中删除它们,而不是把 Developer 文件夹拖走。
各项恢复的代价
最便宜的是 DerivedData:每个项目只会多一次较慢的构建。模拟器运行时需要下载几 GB 并花几分钟,所以只保留你的 App 支持的 iOS 版本。设备支持文件的代价是下次连接 iPhone 时稍等一会儿。
归档则不同。里面的 dSYM 文件能把旧版本的原始崩溃报告变成可读的行。如果你在发布时就把 dSYM 上传到了崩溃分析工具,归档就只是个可以删除的大 zip 文件。如果没有,就保留每个仍在使用的版本的归档。
Xcode 自身的更新也是一个不起眼的原因。每个新版本装在旧版本旁边,都会增加 12 到 15 GB,Xcode 的测试版还会叠加上去。在访达中删除旧副本,倒空废纸篓,空间立刻就回来了。如果 Mac 快满了,先做这件事,因为磁盘满了会让 Xcode 的索引和构建以奇怪的方式失败。
Levo 怎么做
Levo 把 Xcode 构建数据、设备支持文件、模拟器和包缓存分别列成带大小的单独行,让你看出上面哪一项是你的那 80 GB。当项目很旧或已经不存在时,构建数据和缓存会优先被勾选。旧版 Xcode 和归档会列出来,但绝不会替你勾选。
Levo 使用 Xcode 自带的 simctl 移除模拟器,并且在 Xcode、xcodebuild 或已启动的模拟器运行期间,会跳过构建数据。参见面向 iOS 和 Mac 开发者的 Levo。
常见问题
为什么 Xcode 占用了 100 GB?
因为它把东西存在了 App 之外:每个项目的构建数据、模拟器及其运行时、你连接过的每台设备的调试符号,以及归档。App 本身约 15 GB。
我能删除 Xcode 的 Library/Developer 文件夹吗?
不能整个删。清理其中的 DerivedData、CoreSimulator 设备和 DeviceSupport,但保留 Archives 和 UserData 文件夹,除非你不介意丢失 UserData 里保存的键盘快捷键和主题。
删除 DerivedData 会破坏我的项目吗?
不会。你的源码和项目设置都不在里面。下次构建会慢一些,因为 Xcode 要重新构建并重建索引。
模拟器运行时可以放心删除吗?
可以。它们是下载来的,项目需要时 Xcode 会再次获取。删除一个模拟器设备会清除其中的 App 数据。