
先区分构建数据、设备符号和发布归档
DerivedData:MacClean 扫描默认路径 ~/Library/Developer/Xcode/DerivedData,按子目录列出项目。删除后,下次构建会生成所需的中间数据;重新构建和索引可能需要额外时间。
设备符号:iOS、watchOS、tvOS 和 visionOS 的 DeviceSupport 项用于对应系统版本的调试。Apple 说明系统符号与系统版本和架构有关。如果仍需要调试旧设备或分析旧版本问题,不应只凭日期清掉符号。
Archives:默认路径 ~/Library/Developer/Xcode/Archives 中的归档可能含发布构建与 dSYM。Apple 说明二进制与其 dSYM 通过构建 UUID 匹配。再次编译不保证得到原发布构建需要的符号,应保留仍在使用的发布归档。
SwiftPM、Xcode、文档和模拟器缓存也有各自的条目。包缓存清理后可能需要重新获取依赖;离线开发或即将演示时,要考虑重建与下载是否可行。
在开发缓存中按项目检查
打开 MacClean →「开发缓存」并扫描,再查看「Xcode 开发」分类。列表按占用排序,可以查看 DerivedData 项目的名称、大小、路径和说明。这里的项目名称从目录名推断,实际路径才是确认目标的依据。
扫描依据工具已知的默认目录。如果你在 Xcode 或构建脚本中自定义了 DerivedData 的位置,自定义路径可能不出现在这份列表中。Apple 的 Xcode 发布说明也采用逐项目清理默认 DerivedData 路径的做法;不要因此认为整个 Developer 文件夹都应删除。
MacClean 的开发缓存页还会扫描其他开发工具和闲置项目依赖。只想处理 Xcode 时,清理前取消其他分类中不准备处理的选项。
- 保存工作,停止构建并退出 Xcode 和 Simulator。
- 扫描「开发缓存」,查看 Xcode 分类和具体路径。
- 先选择不再需要的项目 DerivedData,保留当前需要的设备符号。
- 逐项检查已选汇总,单独审查 Archives,再确认清理。
理解默认勾选,不把默认当成备份
DerivedData、Xcode 缓存和部分可重建项默认选中。对设备符号,MacClean 按最近修改时间默认保留一项;这不是根据你连接的设备判断兼容版本,也不保证其他版本的符号没有用途。
Archives 默认不选中。需要清理旧归档时,先确认发布、导出和崩溃分析是否仍需要它,并把应保留的归档另存到备份。开发缓存里的模拟器缓存条目也不能代表所有模拟器设备和运行时数据。
清理后验证实际开发流程
重新打开需要的项目,完成一次构建和正常的测试流程。如果你使用 Swift 包,确认依赖能重新解析;如果要连接设备调试,确认所需设备和系统版本仍能使用。
第一次构建、索引或依赖下载变慢可能是缓存重建的成本。清理是为了处理确认的磁盘占用,不保证所有构建问题都会因此修复,也不保证持续加快开发工具。
检查被清理项目是否只是缓存,而没有包含手工保存在默认缓存目录里的独有文件。对无法重建的资料,必须先另存或备份。
恢复与真正腾出空间的区别
常规开发缓存清理会把选中项目或目录内容移入废纸篓。有记录时,可以从「清理记录」恢复仍在废纸篓中的条目;恢复时原路径如果已被 Xcode 重建,同名冲突可能导致失败。先退出相关工具并查看失败提示,不要假定撤销一定成功。
废纸篓中的文件仍然占用磁盘。确认项目构建、调试和重要归档都正常后,再决定清空废纸篓。清空是永久删除,清理记录不能恢复已经消失的条目。最后核对 Mac 可用空间与重新扫描结果。
常见问题
删除 DerivedData 会删除项目源码吗?
默认 DerivedData 保存构建派生数据,MacClean 按该路径清理。请先确认实际路径;如果自行把独有文件放进其中,工具不会知道哪些内容无法重建。
Archives 可以像缓存一样重新生成吗?
不能保证。归档可能包含已发布构建和匹配 dSYM,重新编译不保证产生相同 UUID。保留仍需分发或分析崩溃的归档。
为什么清理后第一次构建更慢?
构建工具需要重新生成中间数据、索引或获取依赖。先完成一次实际构建验证,再判断结果。
清理记录能保证撤销吗?
不能保证。文件需仍在废纸篓,原路径需可写且没有冲突;Xcode 已重新生成同名目录时,恢复可能失败。
参考资料
下载 MacClean
下载 MacClean,用「开发缓存」按项目查看 Xcode 占用,先处理确认可以重建的内容。