大多数 Xcode 归档都可以放心删除,但有少数几个的价值远超它们的体积。每个归档都是你导出或上传过的一次构建,其中的 dSYM 保存着与那个二进制文件一一对应的符号。没人再运行的构建,归档直接删。仍装在某处的每个版本,背后的归档都要留着,除非你的崩溃报告服务或 App Store Connect 已经存有它们的符号。
基本原则:凡是还有人在运行的构建,都留着它的归档;其余的在 Xcode 的 Organizer 里删,而不是用终端。
快速回答
- 用
du -sh ~/Library/Developer/Xcode/Archives/* | sort -h | tail量一量这个文件夹。 - 打开 Xcode,依次选择 Window、Organizer、Archives。
- 每个应用保留最新发布的构建,以及用户仍在运行的旧构建。
- 确认你的崩溃报告服务或 App Store Connect 里有你打算删除的那些构建的符号。
- 删除测试导出、被替换掉的上传和已过期的 TestFlight 构建。
- 拿不准的归档移到外置硬盘,而不是删掉。
Xcode 归档里有什么
每次你执行 Product、Archive 或 xcodebuild archive,Xcode 都会写入一个归档。它把归档放在 ~/Library/Developer/Xcode/Archives,每天一个文件夹,每个包以 scheme 名和时间命名,例如 MyApp 21.09.2026, 14.13.xcarchive。
| .xcarchive 内的条目 | 存放内容 |
|---|---|
dSYMs | 应用及其内嵌框架的调试符号 |
Products | 构建好的应用 |
Info.plist | 版本号、构建号和创建日期 |
Signatures | 签名元数据 |
我在 2026 年 10 月 25 日量了自己 Mac 上的这个文件夹,系统是 macOS 27.0.1,Xcode 27.1。它占了 3.9 GB:11 个应用的 35 个归档,全部生成于 8 月 16 日到 10 月 24 日之间。一个典型的归档约 165 MB,最大的 407 MB。在一个 StorageRadar 的归档里,dSYMs 文件夹占 84 MB,应用本身占 39 MB,符号比产品还大。
dSYM 为什么重要
Release 构建的崩溃报告列出的是内存地址,而不是函数名。Xcode 和崩溃报告服务会找到 UUID 与崩溃的二进制文件相匹配的那份 dSYM,用它来翻译这些地址。你可以这样查看某个 dSYM 属于哪个构建:
dwarfdump --uuid ~/Library/Developer/Xcode/Archives/2026-09-21/*.xcarchive/dSYMs/*.dSYM
对同一个提交重新归档,得到的是一个新的二进制文件,在大多数配置下 UUID 也是新的。所以从崩溃报告的角度看,删掉的归档无法重建:旧构建的报告需要旧的 dSYM。
有两个地方可能存着第二份副本:
- App Store Connect。 如果你在分发时选择了上传应用符号的选项,Apple 会对你在 Xcode 的 Organizer 里看到的崩溃报告进行符号化。
- 你的崩溃报告服务。 Sentry、Firebase Crashlytics 这类服务在项目配置好之后,会在构建时上传 dSYM,并保存在它们那边。
如果某个构建两者都不符合,它的归档就是这些符号仅存的一份。
哪些归档可以删
可以不假思索地删:
- 为了测试某样东西而做的本地导出或 Ad Hoc 导出的归档;
- 上传之后又被同一版本的更新构建替换掉的构建;
- 超过 90 天的 TestFlight 构建,因为 TestFlight 过了这个期限就会让构建过期。
要留着:
- App Store 上当前在线的那个构建的归档;如果你的用户更新得慢,再加上前一两个;
- 在 App Store 之外分发的构建的归档,因为你可能需要对完全相同的那个构建再次导出或公证;
- 符号没有第二份副本的任何归档,只要它的崩溃报告还在陆续到来。
如何删除归档
在 Xcode 里。 打开 Window、Organizer,选择 Archives。在左侧选一个应用,选中一个或多个归档,然后在右键菜单里删除。Organizer 读取的就是归档文件夹,所以这样做会把这些包从磁盘上删掉。
在访达里。 运行 open ~/Library/Developer/Xcode/Archives,把整个日期文件夹移入废纸篓。移走的内容不会再出现在 Organizer 的列表里。
移到外置硬盘。 把旧的日期文件夹拷到外置磁盘,再从 Mac 上删掉。Xcode 不需要内置磁盘上有归档也能照常工作;哪天旧构建又来了崩溃报告,再拷一个回来就行。
你也可以在 Xcode 的 Settings、Locations 里把归档文件夹指向别的位置。
Archives 与 DerivedData
这两个文件夹在 ~/Library/Developer/Xcode 里挨着,行为却正好相反。DerivedData 是构建产物,Xcode 下次构建时会重新生成,删掉它的代价只是一次更慢的构建。Archives 是你已发布构建的记录,没有任何东西会重新生成它们。DerivedData 放心清,Archives 逐个审查。
总结
对没人运行的构建,删除 Xcode 归档是安全的;对还有人在用的构建,代价就高了。先量一量文件夹,打开 Organizer,留住每个在线版本背后的归档,删除旧构建之前先查清它们的符号存在哪里。拿不准的时候,一块外置硬盘的成本,远低于一份看不懂的崩溃报告。
常见问题
Xcode 归档可以删除吗?
已经没人运行的构建,它们的归档可以删:测试导出、被替换掉的上传、已过期的 TestFlight 构建。凡是仍装在某处的构建,都要留着它的归档,因为里面的 dSYM 能把这个构建的崩溃报告还原成可读的调用栈。
删除 Xcode 归档会让我的应用从 App Store 下架吗?
不会。App Store Connect 保留着你上传的构建。归档只是这个构建及其调试符号在你本地的副本。
删掉的归档还能重新生成吗?
你可以对同一个提交再归档一次,但在大多数配置下,新的二进制文件会得到新的 UUID。旧的崩溃报告需要带旧 UUID 的那份 dSYM,所以除非这份 dSYM 在别处还有,比如 App Store Connect 或你的崩溃报告服务,否则这些报告会一直无法符号化。
Xcode 把归档存在 Mac 的什么位置?
在 ~/Library/Developer/Xcode/Archives 里,每天一个文件夹,名字形如 2026-10-24。在 Xcode 的 Settings、Locations 里可以看到这个路径。每个归档都是一个 .xcarchive 包,里面有应用、它的 dSYM 和一个 Info.plist。
Xcode 归档会占用多少空间?
取决于应用。在我的 Mac 上,一个典型的归档约 165 MB,最大的 407 MB。十周内攒下的 35 个归档加起来有 3.9 GB,因为每次上传都会留下一个。