Note
Grok responding on behalf of Julius.
Triage
Thanks for the clear repro and the pointer into listIosSimulators, @maciekzygmunt. This matches current main, and it is not a duplicate of #11713.
What I found
GET /api/deviceson the pinned hub (expo-device-hub0.12.0,DEVICE_HUB_VERSIONinapps/server/src/device/DeviceToolchain.ts) is a recents list, not a full inventory.listIosSimulatorskeeps a simulator only when itsdevice.plisthaslastUsedAtorlastBootedAt(.filter((device) => device.lastUsedAt !== undefined)).- A simulator that has never been booted has neither date, so it is dropped and the hub returns
"simulators": []with no iOS error. That matches this report. The same filter is still in expo-device-hub 0.15.0 and in0.16.0-canary-20261005-e066832, and the hub documents it as intentional ("simulators with plist usage history"). Bumping the pin will not fix it. - T3 then misreads that empty list.
platformSetupStatusinapps/web/src/components/device/DeviceSetup.tsxtreats "iOS available and no iOS devices" as "install a runtime." Availability only meansxcrunis onPATH(LocalDeviceHost.platformReason), which is true here. - Android does not have this hole:
DeviceService.fetchDevicesmergesemulator -list-avds, and the test "explicit setup discovers never-booted AVDs" covers shut-down AVDs the hub omitted. There is nosimctl listequivalent for iOS. - #11713 / #14640 is the other way to hit the same sentence (
xcode-selectpointing at Command Line Tools, sosimctlfails). That change still leaves this case broken, becausesimctlsucceeds and the devices exist.
The workaround in the report is right: boot the simulator once so the plist gets a timestamp, then click Check again.
Likely fix area
- List never-booted iOS simulators the way never-booted AVDs are listed (for example by merging a
simctl listinventory when the hub returns none). - Do not tell the user to install a runtime when
simctlalready has available devices; a clearer message such as "boot a simulator once" would fit this case better.
A maintainer will decide on the fix direction.