getsentry / getsentry/XcodeBuildMCP
[Bug]: Device Hub opens for stable Xcode when Xcode 27 beta is co-installed
- 主要语言
- TypeScript
- 星标
- 6.4k
- 派生
- 319
- PR 合并指标
- 30 天内没有已合并 PR
描述
### Bug Description
When Xcode 26 stable and Xcode 27 beta are installed together, XcodeBuildMCP
2.7.0 opens the beta-only Device Hub even when `DEVELOPER_DIR` explicitly
selects stable Xcode and the target is an iOS 26.5 simulator.
This crosses the selected toolchain boundary. Stable Xcode 26 ships
`Simulator.app`; Device Hub is bundled only inside Xcode 27 beta on this host.
The cause appears to be the frontend candidate order in
[`focus-policy.ts`](https://github.com/getsentry/XcodeBuildMCP/blob/v2.7.0/src/utils/focus-policy.ts#L67-L88):
the Device Hub candidate is attempted first for every non-headless simulator
launch—via `devices://` when a simulator ID is known, or `open -a DeviceHub`
otherwise—without consulting the active Xcode selected by `DEVELOPER_DIR`.
Simulator.app is only a fallback if opening Device Hub fails. `build_run_sim`
[invokes this policy automatically after boot](https://github.com/getsentry/XcodeBuildMCP/blob/e6ef59b49b44012c824f0a0de261c96142e37390/src/mcp/tools/simulator/build_run_sim.ts#L378-L388).
The same behavior is still present on `main` as of 2026-08-10.
### Debug Output
```text
Platform: macOS 26.5.2 (25F84), arm64
Stable Xcode: 26.6 (17F113)
Beta Xcode: 27.0 (27A5237l)
Selected DEVELOPER_DIR: /Applications/Xcode.app/Contents/Developer
XcodeBuildMCP: 2.7.0
Codex CLI: 0.144.1
Stable frontend:
/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app
bundle id: com.apple.iphonesimulator
Beta frontend:
/Applications/Xcode-beta.app/Contents/Applications/DeviceHub.app
bundle id: com.apple.dt.Devices
Target simulator:
iPhone 17 Pro, iOS 26.5
Control result with XCODEBUILDMCP_HEADLESS_LAUNCH=1:
build-and-run SUCCEEDED on the iOS 26.5 simulator
app launched successfully
no DevicesTrampoline process was created
```
### Editor/Client
Codex desktop with Codex CLI 0.144.1
### MCP Server Version
2.7.0
### LLM
GPT-5 Codex
### MCP Configuration
```toml
[mcp_servers.xcodebuildmcp]
command = "npx"
args = ["-y", "xcodebuildmcp@2.7.0", "mcp"]
env = {
DEVELOPER_DIR = "/Applications/Xcode.app/Contents/Developer",
XCODEBUILDMCP_ENABLED_WORKFLOWS = "simulator,ui-automation,debugging,logging",
}
```
### Steps to Reproduce
1. Install Xcode 26 stable at `/Applications/Xcode.app`.
2. Install Xcode 27 beta at `/Applications/Xcode-beta.app`.
3. Set `DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer`.
4. Leave `XCODEBUILDMCP_HEADLESS_LAUNCH` unset.
5. Select an available iOS 26.5 simulator by UDID.
6. Run `open_sim` or `build_run_sim`.
7. Observe that Device Hub from Xcode 27 beta opens instead of Simulator.app
from the selected stable Xcode.
### Expected Behavior
In automatic GUI mode, the active Apple toolchain should own the simulator
frontend:
- Xcode 26 stable selected -> Simulator.app
- Xcode 27 selected -> Device Hub
An explicit `auto | simulator | device-hub` preference would also work, with
`auto` derived from the Xcode selected by `DEVELOPER_DIR` rather than from the
machine-wide `devices://` URL handler.
Headless mode should continue to suppress both frontends.
### Actual Behavior
For every non-headless launch, XcodeBuildMCP tries Device Hub first. Because the
Xcode 27 beta installation registers `devices://`, that succeeds even though
stable Xcode is selected, so Simulator.app is never attempted.
### Error Messages
No command error is emitted; the wrong GUI frontend opens successfully.
### Related
#498 covers the separate but complementary problem of selecting the newest
simulator runtime within a stable OS major when a next-major beta is installed.
贡献指南
这个仓库没有索引到贡献指南
调研方向
Start in src/utils/focus-policy.ts at the frontend candidate order, then trace how src/mcp/tools/simulator/build_run_sim.ts invokes the policy after boot. Reproduce with stable and beta Xcode installed and DEVELOPER_DIR selecting stable; done means automatic GUI launches the frontend owned by the selected Xcode, while headless mode still opens neither frontend.
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- macos, typescript
- 领域
- mobile-dev, tooling
- Issue 类型
- 缺陷
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 活跃度
- 活跃
- 描述清晰度
- 描述清楚
- 新手友好度
- 74/100