Xcode 26.6 iOS Simulator 下载失败:2026 远程 Mac 修复

先看 3 个证据点:项目能否编译、simctl 能否列出运行时、模拟设备能否启动。 如果 SDK 已存在但运行时清单为空,不要先重装 Xcode;先核对活动 Xcode、首次初始化、下载链路和 CoreSimulator 状态,再使用官方导出与导入路径恢复。经过多次清理仍无法在干净环境复现时,应更换节点,而不是继续删除系统目录。

这篇内容适合 3 类人:

  • 升级 Xcode 26.6 后,无法下载或启动 iOS Simulator 的开发者。
  • 需要批量准备远程 Mac 测试节点、避免每台机器重复下载运行时的 DevOps 工程师。
  • 流水线可以编译,但无法执行 Simulator 测试的移动测试与发布工程师。

截至 2026 年 9 月 5 日,官方资料已提供 Xcode 设置界面、xcodebuild 下载、导出和导入 Simulator runtime 的支持路径。论坛中关于 Xcode 26.6 卡在 Preparing 的内容,目前只能作为个案现象线索,不能直接视为已确认的普遍故障。(developer.apple.com)

01 先把 SDK、运行时和设备状态拆开

Xcode 显示 iphonesimulator SDK,只能证明编译工具链找到了对应 SDK;它不等于 iOS Simulator runtime 已经安装。Simulator runtime 是设备启动时加载的操作系统包,设备列表、SDK 和 runtime 是不同层级。(developer.apple.com)

先在远程 Mac 上执行以下检查。命令中的路径和项目名称都使用你的实际值:

xcode-select -p
xcodebuild -version
xcodebuild -showsdks
xcrun simctl list runtimes
xcrun simctl list devices

按结果分流:

  • 项目能编译,xcodebuild -showsdks 能看到 Simulator SDK,但 simctl list runtimes 显示为空:优先判断为 runtime 未安装或导入未完成,不要修改项目配置。
  • runtime 能列出,但所有设备都是 Shutdown 且启动失败:进入 CoreSimulator、运行时状态或设备数据排查。
  • 设备可以启动,但真实项目测试失败:故障已经越过下载层,继续检查测试目标、签名、依赖、架构和 CI 环境。
  • xcodebuildxcrun 本身报错,或命令版本与图形界面不一致:先处理活动 Xcode 和首次初始化。

这一步的停止条件很重要:如果 SDK 与 runtime 的证据冲突,暂时不要删除 ~/Library/Developer、系统运行时目录或整个 CoreSimulator 数据库。你还没有证明问题发生在数据损坏层。

02 工具链错位会制造“下载失败”假象

多版本 Xcode 共存时,图形界面打开的应用,可能不是终端当前使用的 Developer Directory。尤其是在远程 Mac 上通过 SSH、VNC 和网页控制台交替操作时,用户容易在不同会话里调用不同版本的 xcodebuild

在图形界面中确认你实际打开的是 Xcode 26.6,然后对照:

xcode-select -p
xcrun --find xcodebuild
xcrun --find simctl
xcodebuild -version

如果路径不是目标应用,再只对当前维护任务切换:

sudo xcode-select -s /Applications/<Xcode-26.6.app>
xcodebuild -runFirstLaunch

官方文档要求先选择目标 Xcode,再运行 xcodebuild -runFirstLaunch;首次初始化还会安装包括 simctl 在内的必要系统组件。(developer.apple.com)

不要在共享构建节点上把全局切换当成默认修复。更稳妥的做法是:

  1. 在脚本开头明确设置目标 Developer Directory。
  2. 使用绝对路径调用 xcodebuildxcrun
  3. xcodebuild -versionxcode-select -p 写入构建日志。
  4. 在切换后重新执行 xcrun simctl list runtimes
  5. 通过一个最小项目确认编译和启动均使用同一套工具链。

如果 xcodebuild -runFirstLaunch 卡住,先保存完整终端输出。不要因为命令没有立即返回,就连续启动多个初始化进程;这可能让运行时挂载和组件安装更难判断。

03 Preparing 长时间不动时,先证明下载链路在哪里断了

Xcode 26.6 在 Preparing 阶段长时间没有进度,不能只看进度条判断。你需要区分 4 类可能性:

  1. 本地 DNS、代理、防火墙或 hosts 文件阻断。
  2. 组件目录请求成功,但下载任务没有落盘。
  3. 下载包已生成,但导入阶段失败。
  4. 当前服务或组件目录存在暂时性异常。

在 Xcode 的 Settings > Components 中记录目标平台、版本和界面提示。同时在终端尝试官方命令:

xcodebuild -downloadPlatform iOS \
  -exportPath ~/Downloads/<simulator-export>

如果需要明确目标版本,可加入:

xcodebuild -downloadPlatform iOS \
  -buildVersion <iOS-runtime-version> \
  -exportPath ~/Downloads/<simulator-export>

官方支持使用 -downloadPlatform 下载指定平台,也支持通过 -exportPath 将组件导出到磁盘,再复制到其他 Mac 安装。架构变体可以使用 -architectureVariant universalarm64,但必须结合目标节点架构和实际 Xcode 支持情况选择。(developer.apple.com)

你应当保留以下证据:

date
xcodebuild -version
xcode-select -p
df -h
scutil --dns
env | grep -i proxy

同时记录:

  • 错误域名。
  • 错误码和退出码。
  • 开始与失败时间。
  • 请求的 runtime 版本或 build。
  • 导出目录是否仍为 0 字节
  • Xcode Components 页面是停在 Preparing、失败,还是显示已完成。

如果目录始终为 0 字节,问题更接近下载链路或组件服务,而不是 CoreSimulator 数据库。若导出包已经出现,则进入导入和识别排查,不要继续重复点击 Get。

论坛中的一个 Xcode 26.6 个案同时出现了 SDK 可见、simctl 无 runtime、界面长期 Preparing,以及命令行返回退出码 70 的组合;该内容没有得到官方普遍故障确认,因此只能作为取证模式参考。(developer.apple.com)

04 SDK 已安装但 Simulator runtime 不见了

这类情况的关键不是“重新安装 SDK”,而是确认运行时包是否真正完成安装。

先检查图形界面和命令行是否一致:

xcrun simctl list runtimes
xcodebuild -showsdks

然后在 Xcode 中打开 Settings > Components

  • 如果 iOS runtime 显示 Get:它尚未安装。
  • 如果显示下载中:等待当前任务结束,并观察导出目录或系统日志。
  • 如果显示已安装,但 simctl 没有对应条目:可能是导入未完成、活动 Xcode 不一致,或运行时服务状态异常。
  • 如果 simctl 能列出 runtime,但没有可用设备:创建一个新的模拟设备进行验证。

设备创建和启动可以通过 Xcode 的 Window > Devices and Simulators 完成,也可以使用 simctl

xcrun simctl create "<device-name>" \
  "<device-type-identifier>" \
  "<runtime-identifier>"

xcrun simctl boot "<device-udid>"
xcrun simctl list devices

设备类型标识符和 runtime 标识符不要凭记忆填写,先从本机清单中读取。不同 Xcode 和系统版本可用的设备、runtime 列表会变化,不能把网上旧命令直接复制到 2026 年的节点上。

如果 runtime 在组件界面存在,但设备启动失败,先退出 Xcode 和 Simulator,再重启 Mac 验证。官方资料说明,Simulator 在 Mac 上运行,并不等同于真实设备;硬件相关能力仍需真机验证。(developer.apple.com)

05 通过官方导出与导入恢复受限节点

在一台 Mac 上成功下载的 Simulator runtime,可以通过官方导出包在另一台符合条件的远程 Mac 上复用。不要直接复制某个 runtime 目录;更稳妥的做法是,在下载正常的 Mac 上导出平台组件,再在目标节点导入。

源 Mac:

xcode-select -s /Applications/<Xcode-26.6.app>
xcodebuild -runFirstLaunch

xcodebuild -downloadPlatform iOS \
  -exportPath ~/Downloads/<export-directory> \
  -architectureVariant <arm64-or-universal>

确认导出结果后,计算文件校验值:

shasum -a 256 ~/Downloads/<export-directory>/<export-bundle>

把导出的 .exportedBundle 或官方生成的组件文件通过受控渠道传到目标远程 Mac。目标节点执行:

xcode-select -s /Applications/<Xcode-26.6.app>
xcodebuild -runFirstLaunch

xcodebuild -importPlatform \
  ~/Downloads/<export-directory>/<export-bundle>

Xcode 26.4 的发布说明记录了 .exportBundle 导出格式,以及使用 xcodebuild -importPlatform 导入的示例。较早版本也明确说明,导出的 Simulator 磁盘镜像可以应用到其他 Xcode 安装,避免重复下载。(developer.apple.com)

导入后不要只看命令退出状态。按顺序复测:

xcrun simctl list runtimes
xcrun simctl list devices
xcrun simctl boot "<device-udid>"

同时记录:

  • 源节点和目标节点的 Xcode 版本。
  • runtime 平台、版本和 build。
  • 架构变体。
  • 导出文件校验值。
  • 导入命令完整输出。
  • 导入后 simctl 的清单变化。

如果目标节点与源节点的 Xcode 主版本、系统版本或架构条件不一致,不要假设导出包一定兼容。先在一台非生产节点验证,再批量分发到 CI 节点。

06 破坏性清理只能放在末级

当 runtime 已下载、活动 Xcode 正确、首次初始化完成,但 CoreSimulator 仍无法识别时,才进入状态异常排查。

优先做低风险动作:

  1. 退出 Xcode、Simulator 和相关测试进程。
  2. 重启 Mac,等待系统服务完全恢复。
  3. 重新运行 xcodebuild -runFirstLaunch
  4. 重新执行 xcrun simctl list runtimes
  5. 删除并新建单个测试设备。
  6. 使用同一 runtime 运行最小项目。

不要一开始执行以下操作:

rm -rf ~/Library/Developer/CoreSimulator
sudo rm -rf /Library/Developer
sudo rm -rf /System/Library/AssetsV2

这些命令可能删除已有设备、测试数据、缓存和其他开发组件。执行前至少完成备份,并记录恢复入口、当前 Xcode 路径、runtime 导出包和项目依赖。没有这些资料,清理后你可能无法判断是原问题消失,还是整个基线被破坏。

某些版本的发布说明曾记录过 simdiskimaged 与 runtime 安装、simctl 卡住相关的问题,并给出过重启或重新安装运行时的处理方向。这类版本特定说明不能自动套用到 Xcode 26.6;你应以当前版本文档和实际日志为准。(developer.apple.com)

07 验收结果决定修复、重建还是换节点

不要以“Xcode 能打开”作为修复完成标准。远程 Mac 还要经受 SSH 断线、Mac 重启和 Xcode 重新启动后的复测。

远程节点验收清单

  • xcode-select -p 指向预期的 Xcode 26.6。
  • xcodebuild -version 与图形界面版本一致。
  • xcodebuild -showsdks 能看到目标 Simulator SDK。
  • xcrun simctl list runtimes 能列出目标 iOS runtime。
  • ✅ 可以创建并启动一个全新的模拟设备。
  • ✅ 最小项目可以完成编译、安装和测试。
  • ✅ 真实项目可以执行至少一组 Simulator 测试。
  • ✅ SSH 断线后,后台任务不会因为终端关闭而消失。
  • ✅ Mac 重启后,runtime 仍能被识别。
  • ✅ Xcode 重新启动后,运行目标仍然可用。
  • ✅ CI 使用的用户、路径和权限与手工验收一致。

如果只有下载失败,但离线导入成功,说明节点仍可继续使用,不过应保留导出包和校验记录。若导入成功但重启后 runtime 消失,说明节点基线不可信,优先隔离重建。若干净节点也无法下载,且多个时间点复测得到相同域名或错误码,再考虑暂缓批量部署,而不是同时清理所有节点。

修复路径对比

现象与证据 首选动作 风险 继续条件
SDK 可见,runtime 清单为空 使用 Components 或 xcodebuild -downloadPlatform 导出目录出现文件或下载成功
xcode-select 与图形界面不一致 只切换当前任务的 Developer Directory xcodebuild -version 与界面一致
Preparing 长时间不变,导出目录为 0 字节 检查 DNS、代理、防火墙、hosts 和错误域 能复现网络请求或获得明确错误
runtime 已下载,simctl 不识别 重启、重新初始化、核对活动 Xcode runtime 清单恢复
可下载节点正常,目标节点受限 官方导出后校验并导入 低至中 目标节点能列出并启动 runtime
多次清理后仍无法建立基线 在干净节点复现,必要时换节点 新节点通过真实项目和重启验收

继续修复还是更换节点

决策信号 继续修复 隔离重建 更换远程 Mac 节点
SDK 与 runtime 状态 仅一层异常,证据清楚 多层状态互相矛盾 新节点可正常识别
下载链路 能稳定导出或导入 只能偶尔成功 多次复测均失败
CoreSimulator 重启后恢复 清理后仍需反复修复 干净节点一次通过
CI 复测 真实项目测试稳定 只适合临时手工测试 需要长期无人值守运行
运维成本 日志和恢复入口完整 缺少可审计基线 原节点已被多次重装或删除

单纯因为 iOS Simulator 下载失败,通常没有必要立即重装 Xcode。只有在 Xcode 应用本身损坏、xcodebuild 无法正常运行、首次初始化持续失败,或干净路径安装后问题稳定消失时,重装才有明确证据支持。Components 页面卡在 Preparing,本身不足以证明 Xcode 应用已经损坏。

如果你正在搭建长期的 远程 Mac 开发环境,建议把 Xcode 版本、runtime 导出包、校验值和验收脚本纳入节点交付记录。需要批量建立环境时,也可以先查看 CALMVPS 的 Mac 方案与价格,再按测试周期选择临时节点或持续运行节点。

当前方案如果是反复重装本地 Xcode、依赖不稳定的共享云环境,常见缺点是:运行时重复下载、失败后缺少完整日志、节点重启后状态不可预测,以及团队成员无法复用同一份干净基线。若原 Mac 已被多次清理,无法证明当前环境是否完整,先租用一台干净的远程 Mac,复现下载、官方导入和真实项目测试,再决定是否重建原节点,通常比继续破坏性排查更容易控制风险。需要临时算力、隔离的 Xcode 测试环境或一台 7×24 小时在线的构建节点时,CALMVPS 的远程 Mac 会比继续维护一台状态不明的机器更适合做这次恢复验证。