Upgrade to Expo SDK 56 (preview)#23
Draft
alpine-agent wants to merge 4 commits into
Draft
Conversation
Run via the SDK beta upgrade flow: `npx expo install expo@next --fix`,
which moved expo and the expo-* packages to ~56.x, RN to 0.85.3, React
19.2.3, and TypeScript ~6.0.3.
Adjustments needed on top of `--fix`:
- expo-router 56 vendors react-navigation internally and no longer
exposes `@react-navigation/native` and `@react-navigation/bottom-tabs`
transitively. Reroute imports:
- `_layout.tsx`: `ThemeProvider`, `DarkTheme`, `DefaultTheme` now come
from `expo-router`.
- `(tabs)/_layout.tsx`: `BottomTabBarProps` now comes from
`expo-router/build/react-navigation/bottom-tabs` so its type matches
what `<Tabs>` expects.
- Bumped `ts-jest` to ^29.4.9 (required for TS 6 support).
- Added `types: ["jest", "node"]` to tsconfig.json — TS 6 + the
`customConditions: ["react-native"]` from expo's base no longer
auto-discovers @types/jest globals in test files.
- Added `resolutions` for `@expo/log-box` and `@expo/dom-webview` to
resolve a yarn 1 hoisting duplicate flagged by expo-doctor.
Verified:
- `npx expo-doctor`: 18/18 checks pass
- `yarn test`: 14/14 pass
- `yarn lint`: clean
- `tsc --noEmit`: only the two pre-existing `Themed.tsx` errors from
`main`; no new type errors
- Metro bundles successfully (1643 modules, iOS, prod)
`@react-native/dev-middleware@0.85.3` (RN 0.85, SDK 56) requires `^22.13.0` minimum; the previously pinned `22.12.0` failed `yarn install` on EAS Build with "engine \"node\" is incompatible".
- Rename `release.yml` → `upload.yml` (qru convention). Same content; only `name:` field changed to "Upload to app stores". - Add `submit.yml` from qru — manual workflow_dispatch that submits the latest TestFlight build for App Review and promotes the internal Play Store track to production. Uses ASC API + Play Developer API, reading the iOS app ID from `submit.production.ios.ascAppId` and the Android package name from `app.config.ts` so no per-app constants are hardcoded. - `build.yml` already matches qru's; left unchanged.
In SDK 56, `expo-router/unstable-native-tabs` requires the ScrollView
inside each tab screen to be a direct child of the screen, OR the
wrapping component must opt out of RN's view collapsing optimization.
Without `collapsable={false}` on the wrapper, iOS reparents the
ScrollView under the wrong native view; gesture recognizers don't
attach, scrolling and Pressable taps inside it become no-ops.
Symptom on the SDK 56 build: Practice and Settings tabs were entirely
inert (Pressables didn't respond, content didn't scroll). Check tab
appeared fine because its tappable controls are above the ScrollView.
Adding `collapsable={false}` to the outer themed `<View>` on all three
tab screens.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Upgrade word-check from Expo SDK 55 → SDK 56 (currently
56.0.0-preview.6on thenextdist-tag).Followed the SDK beta upgrade flow:
npx expo install expo@next --fix, which movedexpoand theexpo-*packages to ~56.x, RN to 0.85.3, React 19.2.3, and TypeScript ~6.0.3.Adjustments needed beyond
--fixexpo-router56 vendors react-navigation internally and no longer exposes@react-navigation/native/@react-navigation/bottom-tabstransitively. Reroute imports:app/_layout.tsx:ThemeProvider,DarkTheme,DefaultTheme→ fromexpo-routerapp/(tabs)/_layout.tsx:BottomTabBarProps→ fromexpo-router/build/react-navigation/bottom-tabsso its type matches what<Tabs>expectsts-jestto ^29.4.9 — 29.4.6 only supports TS <6.types: ["jest", "node"]totsconfig.json. With TS 6 + thecustomConditions: ["react-native"]fromexpo/tsconfig.base,@types/jestglobals are no longer auto-discovered in test files.resolutionsfor@expo/log-boxand@expo/dom-webviewto resolve a yarn 1 hoisting duplicate flagged byexpo-doctor.Caveats
56.0.0-preview.6) — not GA. Expo Go for SDK 56 is TestFlight External Beta only; physical-device testing needs a dev client build.@rnrepo/expo-config-plugin@0.2.0-beta.0declaresexpo@^54as a peer — yarn warns but it installs. May want a newer plugin version once one is published.Test plan
npx expo-doctor— 18/18 checks passyarn test— 14/14 passyarn lint— cleantsc --noEmit— only the two pre-existingThemed.tsxerrors frommain, no new type errors introducedexpo export --platform web)