返回博客

一个 9.8 GB 的 Xcode 模拟器里装了什么:应用只占 350 MB

我测量了十个 iOS 模拟器的 data 文件夹。应用容器占 0.07 到 0.34 GB,其余是锁定屏幕海报快照、日志、Siri 资源和符号缓存。

已发表 2026年10月26日 作者 Vladimir Chemeris 阅读时间 约 2 分钟阅读
XcodeSimulatorDeveloper Cleanup

我的 QA 模拟器占了 9.8 GB,原因却不在我的应用。它的应用容器只占 0.34 GB。其余都是 iOS 填满的:锁定屏幕海报快照的缓存、系统日志、下载的 Siri 和语言资源,以及一个符号缓存。我量了 Mac 上的十个模拟器,每一个里应用所占的份额都很小。

基本原则:擦除模拟器之前先量一量,然后用 xcrun simctl 擦除或删除它。不要手动删除它 data 文件夹里的文件夹。

快速回答

  1. 找出占空间大的模拟器:du -sh ~/Library/Developer/CoreSimulator/Devices/* | sort -h | tail。
  2. 用 xcrun simctl list devices 把每个 UDID 对应到名称。
  3. 看看其中一个的内部:du -h -d 4 ~/Library/Developer/CoreSimulator/Devices/<UDID>/data | sort -h | tail -20。
  4. 如果不再需要它的状态,就先关机再清空:xcrun simctl shutdown <UDID>,然后 xcrun simctl erase <UDID>。
  5. 从来不用的模拟器,用 xcrun simctl delete <UDID> 移除。

一个模拟器的 9.8 GB 去了哪里

在我的第一次测量中,一个 QA 模拟器占了 Devices 文件夹的一半。有位读者问里面装的是什么,于是我打开了它的 data 文件夹。这台设备是 iOS 27.0 上的 iPhone 18 Pro 模拟器,测量时处于启动状态。

QA 模拟器 9.81 GB 的 data 文件夹条形图:PRBPosterExtensionDataStore 2.88 GB,var/db/diagnostics 2.07 GB,private/var/MobileAsset 2.03 GB,coresymbolicationd 1.13 GB,var/db/uuidtext 0.49 GB,其他所有内容 0.87 GB,包含全部应用的 Containers 0.34 GB
QA 模拟器的 data 文件夹。所有应用容器加在一起,是最短的那一条。
data 内的文件夹大小
Library/Application Support/PRBPosterExtensionDataStore2.88 GB
var/db/diagnostics2.07 GB
private/var/MobileAsset2.03 GB
Library/Caches/com.apple.coresymbolicationd1.13 GB
var/db/uuidtext0.49 GB
Containers,所有应用容器0.34 GB
整个 data 文件夹9.81 GB

Containers 里放着已安装的应用、它们的数据容器、应用组和扩展数据。我的应用和它的测试写入的所有内容,都在这 0.34 GB 里。

十个模拟器并排对比

我的 Mac 上有 53 个模拟器。其中 43 个各占约 20 MB,也就是一台从没运行过应用的设备的大小。剩下的十个是我在用的。大小单位为 GB。

十个模拟器 data 文件夹的堆叠条形图,从 0.63 到 9.81 GB。每台设备上应用容器占 0.07 到 0.34 GB。海报存储只在两台已启动的 iOS 27.0 设备上很大。其余的大部分是系统日志和 MobileAsset。
十个模拟器,分为应用容器、海报存储、系统日志(diagnostics 加 uuidtext)、MobileAsset 和其他所有内容。圆点标出的是已启动的设备。
模拟器iOS状态data海报存储diagnosticsMobileAssetContainers
QA 设备,iPhone 18 Pro27.0已启动9.812.882.072.030.34
iPad Pro 13-inch (M5)27.0已启动4.591.650.211.700.16
iPhone 1618.6已关机3.140.031.220.790.24
iPhone SE (3rd generation)26.5已启动2.620.040.361.000.31
iPhone 11 Pro26.5已关机2.360.000.151.210.12
iPhone 16,自用测试构建18.6已关机2.030.030.360.900.11
iPhone 16 Pro Max18.6已启动1.580.050.050.900.15
iPhone 16 Pro Max27.0已关机1.530.170.020.170.16
iPad Pro 11-inch (M4)18.6已关机1.470.030.090.780.07
iPhone SE (3rd generation),第二个应用18.6已关机0.630.030.010.210.08

有三个规律很明显:

  • Containers 从未超过 0.34 GB。 跟系统数据一比,我测试的那些应用只是个零头。
  • 每个模拟器上都有 MobileAsset。 它从 0.17 到 2.03 GB 不等。
  • 海报存储只在两台已启动的 iOS 27.0 设备上变得很大。 在 iOS 18.6 和 26.5 上,它一直低于 0.05 GB。只凭两台设备还不足以把原因归到 iOS 27.0 头上,但差距很大。

每个文件夹里装着什么

PRBPosterExtensionDataStore:锁定屏幕海报快照

这个文件夹名和 GalleryCache、SnapshotCache.cachedb 一样,是 iOS 27.0 模拟器运行时中私有框架 PosterBoard.framework 里的字符串。这个运行时还自带一个系统应用 PosterBoard.app,标识符为 com.apple.PosterBoard。文件夹里的子文件夹带着 Apple 海报扩展的 ID:WeatherPoster、EmojiPoster、PhotosPosterProvider、KaleidoscopePoster 等。Apple 关于创建自定义锁定屏幕的指南,把天气、天文和照片列在锁定屏幕墙纸之中。

在我的 QA 设备上,这个文件夹里有 6,776 个文件。其中 2,911 个是 .atx 快照文件,每个约 1 MB,名为 Composite.atx、Background.atx、Foreground.atx 和 Floating.atx,加起来 2.9 GB。在那台 iPad 上,全部 939 个快照文件的修改日期都是测量当天,所以设备在运行时会写入这个缓存。我不知道是什么让它变大,Apple 也没有为它提供文档。

var/db/diagnostics 和 var/db/uuidtext:系统日志

这两个文件夹存放的是统一日志系统的数据。man log 把日志存储描述为一个系统日志数据库,就像 /var/db/diagnostics 里的那个,旁边还有一个类似 /var/db/uuidtext 的 uuidtext 目录。每个模拟器都在自己的 data 文件夹里保留一份。在我的设备上,它从 0.01 到 2.07 GB 不等,QA 设备上另有 0.49 GB 的 uuidtext。

private/var/MobileAsset:iOS 下载的资源

在 QA 设备上,AssetsV2 里的资源集以 Siri 和语言功能命名:

资源集大小
com_apple_MobileAsset_UAF_Siri_Understanding805 MB
com_apple_MobileAsset_UAF_LinguisticData409 MB
com_apple_MobileAsset_UAF_Siri_TextToSpeech289 MB
com_apple_MobileAsset_UAF_SearchQueryUnderstanding106 MB
com_apple_MobileAsset_TTSAXResourceModelAssets96 MB

这些是模拟器自己下载的。Apple 开发者论坛上有位开发者报告,在 iOS 26.5 上同一个文件夹增长了几十 GB,下载者是 nsurlsessiond。这个帖子没有人回答。

com.apple.coresymbolicationd:符号缓存

coresymbolicationd 的 man page 把它称作针对系统库的“管理调试符号缓存的守护进程”(daemon to manage debug symbols cache)。它在 QA 设备上占了 1.13 GB,在其他设备上几乎为零。

模拟器太大时我怎么做

我不会打开这些文件夹去删文件。Apple 没有为它们提供文档,我也说不清删掉一半的海报存储或日志存储会对模拟器造成什么影响。受支持的工具都作用于整台设备:

  • xcrun simctl erase <UDID> 清空内容和设置,保留设备。先把设备关机。
  • xcrun simctl delete <UDID> 移除设备。
  • xcrun simctl delete unavailable 移除当前 Xcode SDK 不再支持的设备。

擦除会丢掉已安装的应用、它们的数据以及上面提到的每个系统文件夹,所以你得重新安装应用、重新登录。为了某个 bug 或某项测试仍需要其状态的设备,要留着。设备再次运行后,海报存储、日志和资源都可能重新长回来,所以擦除换来的是空间,并不能解决增长问题。

StorageRadar Developer caches 界面:Safe to clean 下的 Xcode DerivedData(41.8 GB,下次构建时会重新生成),以及 Review before cleaning 下的 CoreSimulator Data(34.6 GB)
在 StorageRadar 的 Dev Cleanup 中,CoreSimulator Data 位于 Review before cleaning 下,和 DerivedData 分开,后者下次构建时会重新生成。截图来自更早的一次扫描,所以大小与本文不同。

我是怎么测量的

我在 2026 年 10 月 26 日做了测量,用的是一台搭载 M4 的 Mac mini,系统是 macOS 27.0.1,Xcode 27.1。所有命令都只读取数据:

xcrun simctl list devices --json
du -sk ~/Library/Developer/CoreSimulator/Devices/<UDID>/data
du -k -d 4 ~/Library/Developer/CoreSimulator/Devices/<UDID>/data | sort -rn | head -20
find ~/Library/Developer/CoreSimulator/Devices/<UDID>/data/Library/Application\ Support/PRBPosterExtensionDataStore -name '*.atx' | wc -l

大小来自 du,除以两次 1024,和 du -h 输出的是同样的二进制单位。每一行里的文件夹互不重叠,只是 Containers 包含了它的子文件夹。已启动的模拟器会持续写入,所以它们的数字每小时都在变。

总结

一个很大的模拟器,装的通常是 iOS 的数据,而不是你的应用。在我的 Mac 上,每台设备的应用容器占 0.07 到 0.34 GB,而海报快照、日志、下载的资源和符号缓存最多占了 9.5 GB。先量一量 data 文件夹,留住你需要其状态的设备,其余的用 simctl 擦除或删除。

关于作者

Vladimir Chemeris

StorageRadar 创始人

Vladimir Chemeris 开发 StorageRadar,一款注重隐私的 macOS 存储分析应用,强调先审查后清理、开发者存储和前后对比。

常见问题

我的应用很小,为什么 iOS 模拟器这么大?

你的应用只占其中一小部分。在我的 QA 模拟器上,9.8 GB 里应用容器只占 0.34 GB。其余都是 iOS 自己的数据:锁定屏幕海报快照的缓存、系统日志、下载的 Siri 和语言资源,以及一个符号缓存。

iOS 模拟器里的 PRBPosterExtensionDataStore 是什么?

它是每个模拟器 data 文件夹里的一个文件夹,属于 PosterBoard,也就是 iOS 中负责锁定屏幕海报的组件。这个名字是 iOS 27.0 运行时私有框架 PosterBoard.framework 里的一个字符串。在我的 Mac 上,它在其中一个模拟器上占了 2.9 GB,几乎全是 .atx 快照文件。

可以手动删除模拟器 data 文件夹里的文件夹吗?

我不这么做。Apple 没有为这些文件夹提供文档,所以谁也说不清删掉会弄坏什么。要清空模拟器的内容和设置,用 xcrun simctl erase;要移除设备,用 xcrun simctl delete。

擦除模拟器会删掉它的 iOS 运行时吗?

不会。擦除会清空设备的 data 文件夹,保留设备和它的运行时。运行时是单独的磁盘映像,要用 xcrun simctl runtime delete 移除。

哪个文件夹属于哪个模拟器?

~/Library/Developer/CoreSimulator/Devices 里的文件夹以 UDID 命名。运行 xcrun simctl list devices,就能把每个 UDID 对应到设备名称、运行时和状态。

来源和参考文献

把每个模拟器和其余的开发者存储放在一起看。

StorageRadar 的 Disk Map 可以深入每个模拟器文件夹。Dev Cleanup 把 CoreSimulator 列在 Review before cleaning 下,并在移除任何内容之前先运行 Dry Run。