eas build:dev fails on Xcode 27 because Simulator.app was replaced by DeviceHub.app
- Dominant language
- TypeScript
- Stars
- 1.4k
- Forks
- 236
- Avg merge
- 3d 1h
- Merged PRs (30d)
- 91
Description
### Summary
`eas build:dev` cannot install a cached iOS development build on macOS 27 with Xcode 27 because EAS CLI checks only for the legacy `Simulator` app. Xcode 27 replaces `Simulator.app` with `DeviceHub.app`.
The equivalent compatibility change has already landed in Expo CLI in expo/expo#46757, but the separate implementation in EAS CLI still uses the old Simulator-only behavior.
### Reproduction
1. Install macOS 27 and Xcode 27.
2. Ensure the active developer directory is correct:
```console
$ xcode-select -p
/Applications/Xcode.app/Contents/Developer
```
3. Run an iOS development client build:
```console
$ eas build:dev --profile development --skip-build-if-not-found --skip-bundler
```
4. Select iOS. EAS successfully computes the fingerprint, finds the matching build, and downloads the archive, but fails before installation:
```text
Can't determine id of Simulator app; the Simulator is most likely not installed on this machine. Run 'sudo xcode-select -s /Applications/Xcode.app/Contents/Developer'
Error: build:dev command failed.
```
The suggested `xcode-select` command does not help because the developer directory is already correct.
### Environment
```text
macOS: 27.0 (26A428)
Xcode: 27.0 (27A266a)
eas-cli: 24.4.0
Node.js: 24.19.0
Architecture: darwin-arm64
```
### Root cause
Xcode 27 contains:
```text
/Applications/Xcode.app/Contents/Applications/DeviceHub.app
CFBundleIdentifier: com.apple.dt.Devices
```
It does not contain the previous path:
```text
/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app
```
The current EAS CLI implementation:
- resolves only `id of app "Simulator"` in `packages/eas-cli/src/run/ios/simulator.ts`;
- accepts only `com.apple.iphonesimulator` and `com.apple.CoreSimulator.SimulatorTrampoline` in `packages/eas-cli/src/run/ios/systemRequirements.ts`;
- opens and waits for a process named `Simulator`.
### Expected behavior
On Xcode 27, `eas build:dev` should recognize `DeviceHub` / `com.apple.dt.Devices`, install the downloaded app on the selected simulator, and launch it.
### Verified workaround
Updating the local EAS CLI implementation to:
- resolve `DeviceHub` when Simulator is unavailable;
- accept `com.apple.dt.Devices`;
- open DeviceHub and wait for the `DeviceHub` process;
allowed the same command and fingerprint-matched cached build to complete successfully:
```text
Installing your app on the simulator...
✔ Successfully installed your app on the simulator!
Launching your app...
✔ Successfully launched your app!
```
### Related Expo CLI fix
- expo/expo#46694
- expo/expo#46757
Contributor guide
Research direction
Start with packages/eas-cli/src/run/ios/simulator.ts and packages/eas-cli/src/run/ios/systemRequirements.ts, then reproduce the failure with the documented eas build:dev command on Xcode 27. Compare the Simulator-only checks with the stated DeviceHub behavior; done means the cached app installs on the selected simulator and launches successfully.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- macos, typescript
- Domain
- cli, mobile-dev
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 75/100