Skip to content

Upgrade to Expo SDK 57 so npx expo run:ios works with Xcode 27 - #44

Merged
MaxHeimbrock merged 1 commit into
mainfrom
max/upgrade-expo-sdk-57
Sep 24, 2026
Merged

MaxHeimbrock merged 1 commit into
mainfrom
max/upgrade-expo-sdk-57

Conversation

@MaxHeimbrock

@MaxHeimbrock MaxHeimbrock commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Problem

With Xcode 27, npx expo run:ios fails right away on this sample, before it even looks at devices:

CommandError: Can't determine id of Simulator app; the Simulator is most likely not installed on this machine.

Xcode 27 removed Simulator.app and replaced it with DeviceHub.app. The Expo CLI that ships with SDK 54 still checks for Simulator.app first, even when you build for a real phone with --device. The xcode-select hint in the error message does not help.

Expo fixed this in the CLI, but only for SDK 56 and newer (expo/expo#46757). SDK 54 and 55 will not get the fix. So the sample has to move to a newer SDK for the documented command to work with a current Xcode.

Changes

  • Expo SDK 54 -> 57 via npx expo install --fix: react-native 0.81.5 -> 0.86.3, react 19.2.3, expo-router 57, reanimated 4.5.1, and the rest of the Expo-managed packages
  • @config-plugins/react-native-webrtc 13 -> 15 (the release for SDK 56+)
  • @livekit/react-native-expo-plugin 1.0.1 -> 1.0.3 (needed on SDK 57, fixes the config-plugins import)
  • TypeScript 6.0 as a dev dependency only; the duplicate runtime entry is gone
  • CI runs on Node 22, which react-native 0.86 and Metro require
  • Two small code fixes the upgrade needed:
    • useThemeColor: ColorSchemeName can now be 'unspecified', so treat anything but 'dark' as light
    • ControlBar: build the track reference with useMemo instead of calling setState inside an effect (new react-hooks/set-state-in-effect lint rule)

With Xcode 27, `npx expo run:ios` fails on Expo SDK 54 before it even
looks at devices: Xcode 27 replaced Simulator.app with DeviceHub.app, and
the SDK 54 CLI still checks for Simulator.app. The fix is only in the
SDK 56+ CLI, so move the sample to SDK 57.

- expo 54 -> 57, react-native 0.81.5 -> 0.86.3, react 19.2.3, and all
  Expo-managed packages aligned with `npx expo install --fix`
- @config-plugins/react-native-webrtc 13 -> 15 (supports SDK 56+)
- @livekit/react-native-expo-plugin 1.0.1 -> 1.0.3 (fixes the
  config-plugins import that broke on SDK 57)
- typescript 6.0 as a dev dependency only; drop the stray runtime entry
- CI on Node 22, required by react-native 0.86 and Metro
- useThemeColor: ColorSchemeName now includes 'unspecified'; treat
  everything except 'dark' as light
- ControlBar: derive the track reference with useMemo instead of
  setState inside an effect (new react-hooks lint rule)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@MaxHeimbrock
MaxHeimbrock merged commit 374351b into main Sep 24, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants