子舒
子舒
@zishu

Xcode 27 下 HBuilderX 运行 iOS 模拟器报错 `Unable to find application named 'Simulator'` 的解决办法

0 评论
这是 Xcode 27 引入的破坏性变更——Xcode 27 首次不再附带 Simulator.app,模拟器 GUI 被并入新的 DeviceHub.app。HBuilderX 仍按老版本习惯执行 open -a Simulator,于是在 Xcode 27 机器上必挂。做一个名为 Simulator.app 的转发壳即可修复,几 KB、随时可删。

出了什么问题

升级 Xcode 27 后,在 HBuilderX 里运行到 iOS 模拟器基座,直接报错:

Command failed: open -a Simulator
Unable to find application named 'Simulator'

Xcode 26 及以前一直正常,这是 Xcode 27 才出现的问题。

什么原因

Xcode 27 起不再附带 Simulator.app,模拟器界面并入了新的 DeviceHub.app

ls /Applications/Xcode.app/Contents/Applications/
# DeviceHub.app 在这里,Simulator.app 没了

模拟器本体没坏(simctl、运行时、设备都正常),但 HBuilderX 启动模拟器时写死执行 open -a Simulator,系统里已经没有叫这个名字的应用,于是启动失败。这是 DCloud 论坛的已知问题,官方暂未适配。

怎么解决

/Applications 下创建一个名为 Simulator.app 的转发壳,把 open -a Simulator 转给 DeviceHub:

mkdir -p "/Applications/Simulator.app/Contents/MacOS"

cat > "/Applications/Simulator.app/Contents/Info.plist" <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleName</key>
	<string>Simulator</string>
	<key>CFBundleDisplayName</key>
	<string>Simulator</string>
	<key>CFBundleIdentifier</key>
	<string>com.local.simulator-launcher</string>
	<key>CFBundleExecutable</key>
	<string>SimulatorLauncher</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleVersion</key>
	<string>1.0</string>
	<key>LSUIElement</key>
	<true/>
	<key>LSMinimumSystemVersion</key>
	<string>13.0</string>
</dict>
</plist>
EOF

cat > "/Applications/Simulator.app/Contents/MacOS/SimulatorLauncher" <<'EOF'
#!/bin/bash
# Xcode 27 起不再附带 Simulator.app,模拟器界面由 DeviceHub 承担,
# 把 open -a Simulator 转发给 DeviceHub。
exec /usr/bin/open -a "/Applications/Xcode.app/Contents/Applications/DeviceHub.app" "$@"
EOF

chmod +x "/Applications/Simulator.app/Contents/MacOS/SimulatorLauncher"

# 注册到 LaunchServices
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister \
  -f /Applications/Simulator.app

验证一下:

open -a Simulator   # DeviceHub 正常打开即可

然后重启 HBuilderX,重新运行到 iOS 模拟器即可恢复和以前一样的流程。如果 DeviceHub 里没自动弹出模拟器画面,在它左侧设备列表点一下对应的 iPhone。

想撤销的话,删掉 /Applications/Simulator.app 就行;等 HBuilderX 官方适配 Xcode 27 后也可以删。

评论

目录