开发者存储空间指南

Xcode 占光了我的空间

在一台正在使用的 Mac 上有二十到六十 GB,分散在六个文件夹里,而 Xcode 从不会主动清理其中任何一个。下面逐一说明:它是什么,以及你能不能删。

14 天免费试用,无需银行卡。 之后一次性 15 美元,可用于 3 台电脑。

Bytesweep 按大小列出 Xcode 的 DerivedData 和设备支持文件夹

先量一量

一条命令就能告诉你总量在 Xcode 各文件夹之间是怎么分的,你也就知道该先动哪一个:

du -sh ~/Library/Developer/Xcode/* ~/Library/Developer/CoreSimulator 2>/dev/null | sort -h

六个文件夹

DerivedData —— 通常最大 · 可安全删除

构建中间文件、索引和模块缓存,每个项目一个文件夹,会一直保留,包括你早就删掉的项目。

~/Library/Developer/Xcode/DerivedData

删除它的代价只是一次较慢的重新构建,仅此而已。它也是 Xcode 行为异常时的标准解法,所以每个 iOS 开发者都能背出这个路径。

iOS DeviceSupport —— 较大 · 可安全删除

从你连接过的每一台真机复制来的符号缓存,每个 iOS 版本一个文件夹。每个好几 GB,而且会为你早已不再拥有的手机不断累积。

~/Library/Developer/Xcode/iOS DeviceSupport

下次你插上运行那个 iOS 版本的设备时,Xcode 会重新复制这些内容 —— 第一次连接会慢一些,此外没有别的代价。

CoreSimulator 设备 —— 较大 · 基本安全

每个模拟设备都有自己的文件系统,而且从不会被回收。请使用 Xcode 自己的命令,而不是直接删文件夹,以保持它的数据库一致:

xcrun simctl delete unavailable

更进一步, xcrun simctl delete all 会移除所有模拟器设备。模拟器运行环境本身则在 Xcode → 设置 → 组件

归档 —— 不大但无可替代 · 请保留

你发布过的每一个构建,连同它的 dSYM 调试符号。

~/Library/Developer/Xcode/Archives

这一项请别动。 没有已发布构建的 dSYM,你就无法为正在使用该版本的用户的崩溃报告做符号化 —— 堆栈信息将永远停留在十六进制地址上。如果这里非清不可,请保留所有仍在流通版本的归档。

而且下一个 iOS 版本发布后还会再来一次

DerivedData 在你构建的那天就回来了,DeviceSupport 会随着你插上的每台设备增长,这更像是一件杂务而不是修复。Bytesweep 一次就能找出全部六个文件夹,把归档标记为待审阅而不是直接清理,并且任何清理都能在七天内撤销 —— 这在你清错了项目的那一天格外重要。

Swift Package Manager 缓存 —— 可安全删除

克隆下来的依赖仓库,会按需重新获取。

~/Library/Caches/org.swift.swiftpm

旧的模拟器运行环境和旧版本 Xcode —— 谨慎处理下可安全删除

一个旧的 Xcode.app 本身就有 15 GB,它的运行环境还要再占几个 GB。保留你老项目仍然需要的那个版本;其余的通过访达删除,然后在「设置 → 组件」中移除它们关联的运行环境。

两个能把它压下去的习惯

按项目删除 DerivedData,而不是整个删光

每个子文件夹都以项目命名。清空整个文件夹会迫使你当前在做的所有项目重新构建;而清掉去年做完的项目对应的那些,则一点代价都没有。

每次 iOS 发布后检查 DeviceSupport

你连接的每台设备、每个 iOS 版本都会让它多出一个文件夹,所以它全年都在悄悄变大。每年九月花两分钟,就能避免它变成 30 GB。

一次找出全部六个

Bytesweep 会按名称识别每个 Xcode 文件夹,显示它的大小,并把归档标为值得审阅而非可安全清理。你清理的一切都会进入还原点,因此七天内撤销只需一次点击。

相关内容: Docker disk space · 完整的 Mac 清单

问题

删除 DerivedData 安全吗?

安全。它完全是从你的源码派生出来的,名字就是这个意思。唯一的代价是每个受影响项目的下一次构建是完整构建。

删除 DeviceSupport 会影响在手机上调试吗?

不会。下次你连接运行那个 iOS 版本的设备时,Xcode 会重新复制符号。此后的第一次连接会多花几分钟。

我可以删除 Xcode 归档吗?

可以,但先想清楚。归档里存着你已发布构建的 dSYM 文件,没有它们,这些版本的崩溃报告就无法符号化。仍在用户手里的版本请保留;旧的测试版可以放心删除。

为什么 Xcode.app 本身这么大?

大约 15 GB,因为它内置了苹果支持的每个平台的工具链、SDK 和模拟器运行环境。你可以在「Xcode → 设置 → 组件」中移除不用的模拟器运行环境,但应用包本身就是那么大。

Xcode 会自动清理这些吗?

不会。这些文件夹都没有大小上限,也没有过期时间。这正是本页存在的原因。