安全删除 Xcode DerivedData 与开发者缓存
AskClean Team · Updated 2026-07-18
DerivedData 是 Xcode 存放构建产物和索引的草稿文件夹,会悄悄长到几十 GB。它可以放心删除:退出 Xcode,清空 ~/Library/Developer/Xcode/DerivedData 里的内容,下次构建时 Xcode 会全部重建。本指南讲清这一步,外加模拟器、归档和包缓存。
DerivedData 是什么,为什么会这么大
DerivedData 是 Xcode 存放一切「从源代码派生之物」的地方:中间构建对象、编译产物、模块缓存、供代码补全和跳转定义使用的符号索引,以及构建日志。它默认位于 ~/Library/Developer/Xcode/DerivedData,你打开过的每个项目或工作区各占一个子文件夹。
它膨胀的原因是结构性的:你每打开一个项目,Xcode 就为它建一个 DerivedData 文件夹——包括那些构建过一次就再没碰过的临时克隆——而且从不删除任何一个。每个文件夹又按配置和目标分别存构建产物(Debug 和 Release、模拟器和真机),所以一个中等规模的项目就能占好几个 GB,整个文件夹在日常开发机上长到 20-50 GB 稀松平常。
顾名思义,里面的一切都是「派生」的,天然可以再生。删除 DerivedData 绝不会碰你的源代码、项目设置或任何纳入版本控制的东西。唯一的代价是时间:每个项目的下一次构建是一次完整的干净构建,索引也会在后台重跑几分钟。
删除 DerivedData
有三条路可走,殊途同归。Xcode 的 Clean Build Folder 命令(Product > Clean Build Folder,或 Command-Shift-K)只清当前打开项目的构建产物——修一次诡异的构建问题很有用,但对磁盘空间几乎无感。想真正找回空间,得直接删 DerivedData 文件夹本身。
按项目删是外科手术式的做法:留下每天都在构建的那两三个项目的 DerivedData,把其余的全部清掉。整个删光则是快刀做法,也完全没问题——只是所有项目的完整重建成本要一次付清。
- 先退出 Xcode。Xcode 运行时删 DerivedData 可能把它的索引器搞糊涂,被 Xcode 打开的文件也未必能删干净。
- 找到文件夹:在 Xcode 中打开 Settings > Locations,点按 DerivedData 路径旁的小箭头即可在访达中显示。或者在访达中按 Command-Shift-G,直接输入 ~/Library/Developer/Xcode/DerivedData。
- 把项目子文件夹按大小排序,选中要删的那些(或 Command-A 全选),移到废纸篓。先进废纸篓是更稳妥的习惯——万一反悔,随时可以还原。
- 也可以走终端:rm -rf ~/Library/Developer/Xcode/DerivedData 一条命令全部删除。文件夹特别大时它比访达快,但使用前请先读下面的提示。
- 重新打开 Xcode 并构建。每个项目的首次构建会明显变长,活动栏里的「Indexing」也会跑上一阵——都是一次性成本。
小心 rm -rf:它绕过废纸篓直接永久删除,没有撤销。路径要一字不差地输入,做这件事永远不要加 sudo;如果你对终端不放心,走访达能可逆地完成同样的活儿。
清除旧模拟器运行时
模拟器通常是仅次于 DerivedData 的第二大开发者空间黑洞。你下载过的每一个 iOS、watchOS 或 tvOS 运行时都占 5-8 GB,每台模拟设备还在 ~/Library/Developer/CoreSimulator/Devices 下留着自己的数据文件夹。要是经历过几次 Xcode 升级,你八成还留着几年前就不再适配的 iOS 版本运行时。
见效最快的是内置清理命令:在终端里运行 xcrun simctl delete unavailable。它会删除所有运行时已卸载的模拟设备——旧版 Xcode 留下的孤儿——而你还能用的一律不碰。
至于运行时本身,打开 Xcode 的 Settings > Platforms(旧版 Xcode 里叫 Components)。你会看到每个已安装的模拟器运行时及其大小;选中旧的删掉即可。除非你确实要在旧系统版本上测试,否则每个平台只留最新的运行时。
还可以在 Window > Devices and Simulators 里逐台修剪模拟设备:切到 Simulators 标签页,右键点按任何你从不使用的设备——比如那六台装着旧测试数据的重复 iPhone 型号——选择 Delete。设备里存的数据和 App 会一并清除。
归档、设备支持文件与缓存
每次运行 Product > Archive 分发构建,归档就会在 ~/Library/Developer/Xcode/Archives 里多一份。每个归档包含一份完整的 App 构建加上它的 dSYM 调试符号,动辄 100 MB 到 1 GB。删除之前要清楚代价:里面的 dSYM 正是给那个构建的崩溃报告做符号化的依据。仍在 App Store 或 TestFlight 上线的版本,其归档要留着(或确认 App Store Connect 已有 dSYM),其余的可以删——最稳妥的入口是 Xcode 的 Organizer(Window > Organizer > Archives),可以带着上下文逐个查看和删除。
iOS DeviceSupport 位于 ~/Library/Developer/Xcode/iOS DeviceSupport,存放 Xcode 从你插过的每一台 iPhone 或 iPad 上拷来的调试符号——每个 iOS 版本一个文件夹,通常各占 2-5 GB。你手头设备都不再运行的 iOS 版本,其文件夹纯属白占空间:删掉即可,将来若再连上该版本的设备,Xcode 会自动重新拷贝符号(你会看到一次「Preparing debugger support」)。watchOS 和 tvOS 设备也有对应的同级文件夹。
Xcode 自己的缓存放在 ~/Library/Caches/com.apple.dt.Xcode,模拟器的缓存在 ~/Library/Developer/CoreSimulator/Caches——在 Xcode 和模拟器 App 都没运行时清理这两处是安全的,需要时都会自动重建。
包管理器缓存(SwiftPM、CocoaPods、npm、Homebrew)
包管理器会把下载过的每个依赖都留一份,好让以后安装更快。这是好的工程实践、坏的磁盘卫生:缓存只增不减,在一台跑过几年项目的机器上,不知不觉就攒下 10-20 GB。它们全部可以安全清理——最坏的结果不过是下次安装重新下载。
Swift Package Manager 把下载的包缓存在 ~/Library/Caches/org.swift.swiftpm,各项目解析后的检出还存放在自己的 DerivedData 文件夹里——所以清 DerivedData 时已顺带清掉了这部分。共享缓存可以在访达里删,或对该路径用 rm -rf。
CocoaPods 把下载好的 pod 存在 ~/Library/Caches/CocoaPods。清空它的正规姿势是内置命令:pod cache clean --all。项目里的 Pods 文件夹分毫不动,删掉的只是下载缓存。
npm 的缓存位于 ~/.npm,在重度 JavaScript 机器上能长到好几个 GB。运行 npm cache clean --force 清空它(npm 坚持要加这个参数,因为缓存能自愈、通常无需清理——但删掉依然完全安全)。用 pnpm 的话,运行 pnpm store prune 即可。
Homebrew 囤积着旧下载和过期的软件包版本。brew cleanup 会移除过期版本和陈旧下载;brew cleanup --prune=all 还会清空整个下载缓存。想先看看会删什么,可以先跑一遍 brew cleanup -n 做干跑预览。
让它自动化
上面这些方法都管用,但开发者垃圾是一台跑步机:正常干一周活儿 DerivedData 就回来了,缓存会重新填满,每次 Xcode 更新又搁浅一个运行时。如果你不想每个月把六套手动流程重跑一遍,这正是值得自动化的部分——用一款把推理过程亮出来的工具,而不是闷声批量删除。
AskClean 把开发者文件当作一等类别:一次扫描逐项列出各项目的 Xcode DerivedData、旧模拟器运行时(通过 simctl 读取,每个平台保留最新版)、设备支持文件,以及 npm、SwiftPM、cargo、uv 等包管理器缓存。它还盯着新崛起的空间大户——Hugging Face 和 Ollama 的模型缓存——逐模型列出,默认不勾选。
每一项都附带解释——它是什么、能否重建、删了要付出什么——未经你确认,什么都不会执行。删除进废纸篓,点错了拖回来就撤销了,你的源代码、文稿和照片从不触碰。它做的就是本指南这份清单,只是省下了那一小时的终端功夫。
FAQ
删除 DerivedData 安全吗?
安全——这是 Mac 上最稳妥的大体积删除之一。DerivedData 里只有 Xcode 从你的源代码生成的文件:构建产物、模块缓存、索引和日志。你的代码、项目文件和 git 历史都在别处,绝不受影响。唯一的后果是每个项目的下一次构建是完整重建,索引也会重跑一遍。
多久清一次 DerivedData 合适?
没有固定日程——大到碍事了就清,对多数活跃开发者来说是每一两个月一次。有两个时刻永远值得清:急需磁盘空间时,以及某个项目出现莫名其妙的构建错误或代码补全失灵时——抹掉 DerivedData 是标准的第一招。
删完 DerivedData 之后 Xcode 会变慢吗?
会暂时变慢。每个项目的首次构建是干净构建,可能比增量构建慢好几倍,后台索引也需要几分钟才能让代码补全和搜索完全恢复。第一轮过后,性能和从前一模一样——DerivedData 存的是缓存,不是删了就永久失去的优化。
~/Library/Developer/CoreSimulator 能删吗?
不能闭着眼删——它装着你当前已安装的模拟器及其数据,整个删掉会让它们全部失效,直到重装运行时。请正确地修剪:用 xcrun simctl delete unavailable 清孤儿设备,在 Xcode 的 Settings > Platforms 里移除旧运行时,在 Devices and Simulators 里删掉不用的设备,手动清理时只碰 Caches 子文件夹。
Clean Build Folder 是同一回事吗?
不是。Product > Clean Build Folder(Command-Shift-K)只清当前项目的构建产物,索引、模块缓存和其他项目的文件夹原封不动。它是排查构建问题的工具,不是省磁盘的工具——真想找回空间,得直接删 DerivedData 文件夹本身。
Sources