怎么安全地删除 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 和运行时因为重建代价高而不勾;你确认的东西会移入废纸篓,随时可以放回。