iOS 27 模拟器磁盘不足:2026 清理还是扩容?

截至 2026 年 8 月 21 日,Apple 官方系统要求页面列出的最新测试工具链是 Xcode 27 beta 4,支持 iOS 27 Simulator,并要求 macOS Tahoe 26.4 或更高版本。查看 Apple 的版本与系统要求

结论先说:遇到 iOS 27 模拟器磁盘不足,不要先删整个 Developer 目录。先在 Xcode Components 和磁盘目录中确认空间到底被 Simulator Runtime、模拟设备数据、DerivedData、Archives 还是依赖缓存占用;只删除不在测试矩阵内、且可以重新下载或重新生成的内容。若多版本测试和持续构建仍会反复耗尽空间,就应该扩容或迁移到容量更合适的远程 Mac,而不是重复激进清理。

最后更新于 2026 年 8 月 21 日,版本状态核实自 Apple Xcode 系统要求、Xcode 27 Beta Release Notes 与 Xcode Components 管理文档。

01 谁需要这份磁盘维护方案

如果你只维护一款 iOS App,希望在本地保留最小模拟器环境,这篇文章可以帮你避免误删后重新下载整套工具链。

如果你需要同时验证多个 iOS 版本,不能随意删除 Runtime,重点看测试矩阵和回归成本。

如果你把远程 Mac 用作持续构建或模拟器测试主机,还需要额外管理归档、日志、依赖缓存和重启后的数据持久性。

02 iOS 27 模拟器磁盘不足的占用边界

“模拟器占满磁盘”通常不是单一目录造成的。Xcode、Simulator 和构建系统会分别保存不同类型的数据,处理方式也不同。

占用类型 主要作用 是否可直接删除 删除后的影响
Simulator Runtime 提供某个 iOS 版本的模拟系统 可以,但应从 Xcode Components 删除 该版本的所有模拟设备都无法启动,需要重新下载
模拟设备数据 保存某个 iPhone 或 iPad 模拟设备的应用、设置和测试数据 通常可以 只影响被删除设备的数据,不等于卸载 Runtime
DerivedData 保存项目编译中间产物、索引和部分构建结果 通常可以 下次构建需要重新编译,首次构建可能更慢
Archives 保存可验证、导出或上传的归档 谨慎删除 失去旧版本回溯、重新上传和问题复现材料
依赖缓存 保存 Swift Package、工具或项目依赖下载结果 视项目而定 可能触发重新下载,离线构建可能失败
签名材料 证书、Provisioning Profile、密钥链相关内容 不要当缓存删除 可能导致签名、导出或上传失败

Apple 将 Simulator Runtime 定义为模拟器启动时加载的操作系统包,同一个 Runtime 可以被多个不同设备类型的模拟器共用。因此,删除一个模拟设备,不会达到卸载完整 Runtime 的效果;反过来,删除 Runtime 会同时影响依赖该系统版本的多个模拟设备。查看 Simulator Runtime 与设备管理说明

先判断失败发生在哪个阶段

  • 下载阶段失败:优先检查可用空间、网络临时文件和当前 Xcode 版本是否支持该组件。
  • 构建阶段失败:重点查看 DerivedData、编译缓存、依赖缓存和项目输出目录。
  • 模拟器启动阶段失败:重点检查目标 Runtime、设备数据、活动 Xcode 路径和模拟器状态。
  • Archive 阶段失败:不要只删除模拟器数据,因为正式归档应使用真实设备或构建专用设备目标,不是普通 Simulator 运行目标。Apple 关于 Archive 条件的说明

先打开“系统设置 → 通用 → 存储空间”,观察“开发者”或开发工具相关项目是否明显增长。然后在 Xcode 中进入“Xcode → 设置 → Components”,查看每个已安装组件可以回收的空间。Apple 的 Components 页面会列出已安装组件以及移除后可恢复的存储空间。查看 Components 的官方操作

03 单 App 开发者的最小环境

只维护一款 App 时,最容易犯的错误是保留所有历史 Runtime,以为以后可能用到。更稳妥的做法是先记录项目实际支持的最低版本、当前主测版本和 iOS 27 适配目标,再决定保留哪些组件。

建议先建立一份简单清单:

  • ✅ 保留当前项目实际使用的 iOS 27 Simulator Runtime。
  • ✅ 保留仍在支持范围内、且近期会回归测试的最低版本 Runtime。
  • ✅ 保留最近发布版本需要复查的 Archives。
  • ✅ 保留项目锁定的依赖版本和可自动恢复的依赖来源。
  • ❌ 不要因为目录名称带有 Developer 就整目录删除。
  • ❌ 不要把签名证书、Provisioning Profile 或钥匙串内容当作缓存处理。
  • ❌ 不要为了释放空间直接关闭 SIP,或删除受保护的系统目录。

Runtime 的安全清理

优先从 Xcode Components 删除不用的 Simulator Runtime。Apple 官方支持在“Xcode → 设置 → Components”中选择组件并点击删除,也支持添加此前发布的 Runtime。

如果你安装了正式版和 Beta 版 Xcode,清理前先确认两个环境是否共用同一套组件。不要把下面三件事混为一谈:

  1. xcode-select 切换命令行工具所使用的 Xcode。
  2. /Applications/ 删除旧的 Xcode App。
  3. 从 Components 中删除 Simulator Runtime 或平台支持。

可以先执行:

xcode-select --print-path

这个命令只用于确认当前命令行工具指向哪个 Developer 目录,不会删除任何数据。若需要临时让某条命令使用 Beta Xcode,可以使用占位路径:

DEVELOPER_DIR="/Applications/Xcode-beta.app" xcodebuild -version

如果要永久切换活动 Xcode,则需要管理员权限:

sudo xcode-select --switch "/Applications/Xcode-beta.app"

xcode-select --print-path 用于查看活动 Developer 目录,--switch 用于切换默认 Xcode;它们与模拟器数据删除不是同一类操作。查看 xcode-select 官方说明

04 多版本兼容测试者的保留矩阵

如果你的 App 需要同时验证最低支持版本、主要用户版本和 iOS 27 适配,不能只按“哪个 Runtime 最大就删哪个”来操作。删除前先把测试需求拆成三类:

测试目标 应保留的内容 可以优先清理的内容 判断依据
日常开发 当前主测 Runtime、少量常用设备 不使用的模拟设备、旧 DerivedData 是否能完成日常运行和调试
版本兼容 最低支持版本、主要用户版本、iOS 27 Runtime 不在回归矩阵内的设备数据 下一轮回归是否仍需要该版本
发布前验证 发布目标对应环境、最近归档、签名材料 过期构建缓存、无复现价值的旧设备 是否需要重新验证或回溯历史版本

删除单个模拟设备适合处理“设备太多、测试数据膨胀”的情况。进入“Window → Devices and Simulators”,选择不再使用的设备并删除即可。这个操作通常不会卸载对应 Runtime。

卸载完整 Runtime 适合处理“某个系统版本已退出测试矩阵”的情况。它释放的空间更直接,但该版本下所有模拟设备都会失去可启动基础。Apple 也说明,Runtime 与具体设备型号是分开的:一个 Runtime 可服务多个模拟器设备类型。

05 Xcode DerivedData、Archives 与依赖缓存

DerivedData 清理边界

清理 DerivedData 一般不会删除项目源码,也不会自动删除签名证书。它主要影响编译中间产物、索引和项目生成结果。下次打开项目或执行构建时,Xcode 需要重新生成这些内容。

你可以先在 Xcode 的设置中查看项目使用的 DerivedData 位置,再按项目或时间范围处理。不要在构建任务正在运行时删除,也不要把整个用户目录作为清理目标。

对于单个项目,可以采用“先关闭 Xcode → 记录当前路径 → 备份必要日志 → 删除对应项目目录 → 重新打开并构建”的顺序。项目名和用户目录使用占位符时,可按下面形式确认路径:

du -sh ~/Library/Developer/Xcode/DerivedData/<项目名>-*

这条命令只查看目录大小。确认目标后再进行删除,避免误删其他项目的编译结果。

Archives 不要按缓存处理

Archive 是可以用于验证、导出和上传的构建归档。Apple 文档说明,Xcode 会把归档保存到 Archives organizer,方便之后再次分发或检查。查看 Archive 与分发流程

建议按用途分层:

归档类型 建议保留方式 清理前确认
当前 App Store 版本 至少保留发布对应归档 是否仍需重新上传或复现问题
最近 TestFlight 版本 保留最近一批有测试价值的归档 团队是否仍在使用对应构建号
过期调试归档 可删除或导出到外部存储 是否还有崩溃复现或审核追踪需求
未完成签名的临时归档 优先确认是否能重新构建 是否包含无法恢复的构建环境

如果你依赖归档排查线上崩溃,不要为了短期空间直接全部删除。先导出必要的符号文件和构建记录,再处理确定没有回溯价值的版本。

依赖缓存的恢复风险

Swift Package、二进制依赖和项目脚本缓存可能不属于 Simulator Runtime,但持续构建时同样会增长。清理前确认:

  • 依赖是否能从远程仓库重新下载。
  • 构建主机是否允许访问依赖源。
  • 是否存在锁定版本和私有依赖。
  • 无网络时是否仍需要完成紧急构建。
  • 清理后是否会让多个项目同时重新下载,造成构建队列堆积。

如果你把 Mac 作为 iOS 打包服务器 使用,缓存清理应安排在构建窗口之外,并保留一次完整依赖恢复记录。

06 双 Xcode 环境与 Beta 组件

Xcode 27 Beta 面向 iOS 27 等新 SDK 和测试环境。Apple 的 Release Notes 说明,Xcode 27 Beta 包含 iOS 27 SDK,并要求 macOS Tahoe 26.4 或更高版本;Beta 的组件界面和已知问题仍可能变化。查看 Xcode 27 Beta Release Notes

如果你同时安装正式版和 Beta 版,建议保留以下边界:

  • 生产发布使用固定的正式版 Xcode。
  • iOS 27 适配和新 API 验证使用 Xcode 27。
  • 通过 xcode-select --print-path 检查自动化任务当前指向。
  • 在脚本中使用 DEVELOPER_DIR,避免无人值守任务误用 Beta。
  • 删除 Beta 环境前,确认下一轮测试是否可以重新下载 Runtime。
  • 不要因为切换了 Xcode,就认为旧 Runtime 或旧 Archives 会自动消失。

对于 Beta 版本,论坛中的孤立 Runtime、权限异常或异常占用只能作为用户报告,不能直接推导为所有 Mac 都存在的问题。

07 远程 Mac 的持续构建维护

远程 Mac 磁盘经常被模拟器占满时,问题通常不是“远程”二字本身,而是缺少水位和恢复策略。无人值守构建至少要记录以下状态:

维护对象 需要记录的状态 触发动作
可用空间 当前剩余空间和连续下降趋势 低于团队设定阈值时暂停非必要构建
Runtime 已安装版本与测试矩阵对应关系 删除不再测试的版本,保留主测版本
模拟设备 设备名称、系统版本和测试数据用途 删除孤立设备,保留自动化脚本使用的设备
Archives 最近发布版本和回滚需要的归档 导出必要材料后轮换旧归档
日志 构建日志、模拟器日志和失败记录 按日期轮换,保留失败复现所需部分
依赖缓存 缓存来源、锁定版本和恢复方式 先验证可重建,再删除缓存

在迁移或扩容前,先验证三件事:

  1. 重启后 Runtime、模拟器设备和项目文件是否仍然存在。
  2. 你的账户是否有安装组件、切换 Xcode 和运行构建所需权限。
  3. 删除组件后,能否通过 Xcode Components 或 xcodebuild 重新安装。

如果你正在维护远程环境,建议先阅读 远程 Mac 的容量与租期选择,用真实项目测试一次完整构建、模拟器启动和 Archive,再决定是否长期迁移。你也可以先用短周期方案验证磁盘增长速度,而不是凭一次清理结果估算长期容量。

08 清理、扩容还是迁移:决策表

你的实际情况 优先方案 不建议的做法 验收标准
只有旧设备数据和一次性 DerivedData 膨胀 清理 删除全部 Runtime 项目可重新构建,模拟器可启动
需要保留多个 iOS 版本,但缓存反复增长 定期轮换缓存并保留测试矩阵 每次构建后暴力删除所有目录 回归版本仍完整,构建可自动恢复
iOS 27 Runtime、旧版本 Runtime 和 Archives 必须共存 扩容 反复卸载核心 Runtime 多版本测试和发布归档可同时完成
远程主机重启后环境丢失或权限不足 迁移 继续堆叠临时修复命令 重启、重装、构建和上传流程可重复
需要物理 iPhone、专用外设或本地 USB 调试 本地 Mac 或混合方案 完全依赖远程模拟器 真实设备测试链路不被阻断

清理完成后,不要只看 Finder 里多出了多少空间。至少执行一次真实项目验收:

  • ✅ 依赖可以按锁定版本恢复。
  • ✅ Xcode 能打开项目或工作区。
  • ✅ iOS 27 Simulator Runtime 能启动目标设备。
  • ✅ 项目可以完成一次干净构建。
  • ✅ 必要的 Archive 可以生成并出现在 Organizer。
  • ✅ 签名材料仍然可用,不能只验证 Debug 构建。
  • ✅ 重启 Mac 后再次运行构建任务。
  • ✅ 观察一段时间后,空间没有因缓存或日志立即回升到危险水位。

模拟器并不能完全替代真实设备。Apple 明确提醒,Simulator 运行在 Mac 上,不能复制所有真实硬件性能和硬件特性;涉及相机、推送、传感器、性能和系统行为时,仍应安排真实设备验证。查看 Apple 关于模拟器限制的说明

09 当前 Mac 与远程 Mac 的取舍

如果你当前的 Mac 只是偶尔做 iOS 27 适配,清理一次可恢复缓存通常比迁移更简单。但如果本地磁盘长期同时承载多个 Runtime、Archives、依赖缓存和日常文件,反复清理会带来三个真实问题:构建被迫重新编译,旧版本回归环境被误删,发布前还要重新下载组件。

把模拟器和持续构建放到容量更合适的远程 Mac,可以把开发机与构建环境分开,减少本地磁盘被工具链持续侵占的情况。不过,远程方案也不适合所有人:需要物理接口、本地真实设备调试,或长期稳定运行高负载任务的人,仍应优先评估自购 Mac 或混合架构。

如果你的目标是临时验证 iOS 27 兼容性、短期保留多版本 Runtime,或先确认项目每天会增长多少缓存,可以查看 CALMVPS 的远程 Mac 方案,先用真实项目完成一次构建和重启验收。这样得到的结论,比清理后短暂增加的可用空间更接近你的长期运维需求。