怎么安全地删除 Xcode DerivedData,以及 Xcode 还留下了什么

Xcode 在 Mac 上把 DerivedData、Archives、设备支持文件和模拟器放在哪,哪些可以放心删,以及对应的命令。

在 iOS / macOS 开发者的 Mac 上,Xcode 通常是占用磁盘最多的那一个,而它存的东西大部分都能重建。关键是分清哪些是纯缓存,哪些删了你会后悔。

先看看占了多少

du -sh ~/Library/Developer/Xcode/DerivedData \
       ~/Library/Developer/Xcode/Archives \
       ~/Library/Developer/Xcode/iOS\ DeviceSupport \
       ~/Library/Developer/CoreSimulator \
       ~/Library/Caches/com.apple.dt.Xcode 2>/dev/null

哪些能删,代价是什么

位置能删吗代价
DerivedData能每个工程下一次构建都是全量构建,索引也会重跑。
iOS DeviceSupport能下次连接同一系统版本的设备时,Xcode 会重新拷贝符号,要几分钟。
Archives要小心Archives 里有已发布版本的 dSYM,没了就无法符号化那些版本的崩溃报告。还在用户手里的版本请保留。
模拟器设备不可用的可以运行时已经不在的设备删了没有代价。删除还能用的模拟器,会连同里面的 App 和数据一起删掉。
模拟器运行时旧的可以如果以后还需要那个系统版本,要重新下载好几个 GB。

手动操作

先退出 Xcode,避免它一边写你一边删。

# 构建产物与索引
rm -rf ~/Library/Developer/Xcode/DerivedData/*

# 运行时已不存在的模拟器
xcrun simctl delete unavailable

# 查看已安装的运行时,再删除不需要的
xcrun simctl runtime list
xcrun simctl runtime delete <identifier>

rm -rf 不经过废纸篓。路径请看两遍:~/Library 后面多打一个空格,就是很多人丢掉整个 Library 的原因。

Siftaway 怎么处理

Siftaway 把这几项分开列出,各自带体积和代价;默认勾选 DerivedData,Archives 和运行时因为重建代价高而不勾;你确认的东西会移入废纸篓,随时可以放回。