Bump to Expo SDK 56
This commit is contained in:
6 files changed
+1009
-1172
No files matched your search
@@ -81,7 +81,9 @@ history, code and binary blobs related to React Native functionality filtered ou
|
||||
- replace [moment](https://momentjs.com/docs/#/-project-status/) (maintenance mode) with
|
||||
`date-fns`
|
||||
- replace unmaintained UI packages:
|
||||
- `react-native-simple-radio-button` (react-native-ui-lib already ships RadioButton/RadioGroup)
|
||||
- `react-native-simple-radio-button` (last published in 2018, and untyped — it accounts for
|
||||
5 of the errors `npm run check-types` reports); `@expo/ui` ships a native `Picker` in
|
||||
segmented/radio style, see the SDK 56 follow-ups below
|
||||
- migrate ESLint 8 + airbnb config (both EOL) to ESLint 9 flat config or
|
||||
[eslint-config-expo](https://docs.expo.dev/guides/using-eslint/)
|
||||
- follow-ups from the [Expo SDK 54 upgrade](https://expo.dev/changelog/sdk-54):
|
||||
@@ -100,6 +102,35 @@ history, code and binary blobs related to React Native functionality filtered ou
|
||||
- consider [remote build caching](https://docs.expo.dev/guides/cache-builds-remotely/)
|
||||
(now stable) so `npm run android`/`ios` can download a cached build instead of
|
||||
compiling locally when the native fingerprint is unchanged
|
||||
- follow-ups from the [Expo SDK 56 upgrade](https://expo.dev/changelog/sdk-56):
|
||||
- replace the deprecated `@expo/vector-icons` with the scoped
|
||||
[`@react-native-vector-icons`](https://github.com/oblador/react-native-vector-icons) packages
|
||||
(`npx @react-native-vector-icons/codemod`) — only `SimpleLineIcons` in
|
||||
`src/modules/events/EventList.tsx` uses it, yet it ships ~3.5 MB of fonts into every export
|
||||
- try [`@expo/ui`](https://docs.expo.dev/versions/latest/sdk/ui/), production-ready as of SDK 56:
|
||||
real SwiftUI / Jetpack Compose components that could back the homegrown ones in
|
||||
`src/components/` and finally retire `react-native-simple-radio-button`
|
||||
- simplify `fetchWithTimeout` in `src/utils.ts`: `expo/fetch` is now `globalThis.fetch`, so the
|
||||
wrapper collapses to `fetch(url, { signal: AbortSignal.timeout(ms) })`. Opt back out with
|
||||
`EXPO_PUBLIC_USE_RN_FETCH=1` if it misbehaves
|
||||
- swap `@react-native-async-storage/async-storage` (used by `redux-persist` in
|
||||
`src/reduxStore.ts`) for
|
||||
[`expo-sqlite/localStorage`](https://docs.expo.dev/versions/latest/sdk/sqlite/#localstorage),
|
||||
ideally folded into the redux replacement above
|
||||
- verify on iOS: the minimum target jumped to iOS 16.4 (from 15.1), dropping the iPhone 7, 6s
|
||||
and SE (1st gen). Building now requires Xcode 26.4 on macOS 13.4+
|
||||
- drop the `@expo/config-plugins` devDependency once `@sentry/react-native` fixes its config
|
||||
plugin: `withSentryAndroidGradlePlugin.js` imports `@expo/config-plugins` directly instead of
|
||||
`expo/config-plugins`, and SDK 56 no longer hoists it, so `expo config` crashes without the
|
||||
explicit dependency. Still broken in 8.20.0. Dropping Sentry outright would also remove it
|
||||
- Hermes V1 is now the default engine; turn it off with `useHermesV1: false` in
|
||||
`expo-build-properties` if it causes trouble
|
||||
- now on TypeScript 6: `baseUrl` is deprecated (gone in TS 7) and was removed from
|
||||
`tsconfig.json`, and TS 6 stopped auto-including `@types/*`, hence the explicit `types` field
|
||||
- make `npm run lint` usable again: ESLint only ignores `coverage/`, so it also walks the
|
||||
gitignored `android/` and `ios/` directories and reports ~126 errors from stale build output.
|
||||
Add them to `ignorePatterns`, alongside the ESLint 9 migration above
|
||||
- fix the 20 pre-existing `npm run check-types` errors (unchanged by the SDK upgrade)
|
||||
- add [Apple Pay](https://docs.stripe.com/apple-pay?platform=react-native) for membership
|
||||
payments: either natively in the payment sheet (register the merchant ID
|
||||
`merchant.no.neuf.chateau` + Apple Pay certificate, set `merchantIdentifier` in the
|
||||
|
||||
@@ -6,11 +6,6 @@
|
||||
"orientation": "portrait",
|
||||
"icon": "./assets/icon.png",
|
||||
"userInterfaceStyle": "light",
|
||||
"splash": {
|
||||
"image": "./assets/splash.png",
|
||||
"resizeMode": "contain",
|
||||
"backgroundColor": "#E5E2D7"
|
||||
},
|
||||
"scheme": "no-neuf-chateau",
|
||||
"assetBundlePatterns": [
|
||||
"**/*"
|
||||
@@ -51,6 +46,15 @@
|
||||
[
|
||||
"@stripe/stripe-react-native",
|
||||
{}
|
||||
],
|
||||
"expo-status-bar",
|
||||
[
|
||||
"expo-splash-screen",
|
||||
{
|
||||
"image": "./assets/splash.png",
|
||||
"resizeMode": "contain",
|
||||
"backgroundColor": "#E5E2D7"
|
||||
}
|
||||
]
|
||||
],
|
||||
"extra": {
|
||||
|
||||
Generated
+939
-1142
File diff suppressed because it is too large.
Load diff
+22
-20
@@ -22,30 +22,31 @@
|
||||
"@react-navigation/native": "^7.1.17",
|
||||
"@react-navigation/native-stack": "^7.3.26",
|
||||
"@sentry/react-native": "~7.11.0",
|
||||
"@shopify/react-native-skia": "2.4.18",
|
||||
"@stripe/stripe-react-native": "0.63.0",
|
||||
"@shopify/react-native-skia": "2.6.2",
|
||||
"@stripe/stripe-react-native": "0.64.0",
|
||||
"email-validator": "^2.0.4",
|
||||
"expo": "^55.0.0",
|
||||
"expo-asset": "~55.0.18",
|
||||
"expo-constants": "~55.0.17",
|
||||
"expo-dev-client": "~55.0.37",
|
||||
"expo-font": "~55.0.8",
|
||||
"expo-notifications": "~55.0.25",
|
||||
"expo-status-bar": "~55.0.6",
|
||||
"expo": "^56.0.0",
|
||||
"expo-asset": "~56.0.21",
|
||||
"expo-constants": "~56.0.22",
|
||||
"expo-dev-client": "~56.0.24",
|
||||
"expo-font": "~56.0.7",
|
||||
"expo-notifications": "~56.0.22",
|
||||
"expo-splash-screen": "~56.0.14",
|
||||
"expo-status-bar": "~56.0.4",
|
||||
"graphql": "^16.9.0",
|
||||
"moment": "^2.30.1",
|
||||
"react": "19.2.0",
|
||||
"react": "19.2.3",
|
||||
"react-hook-form": "^7.52.1",
|
||||
"react-native": "0.83.6",
|
||||
"react-native": "0.85.3",
|
||||
"react-native-fast-confetti": "^2.0.2",
|
||||
"react-native-gesture-handler": "~2.30.0",
|
||||
"react-native-reanimated": "4.2.1",
|
||||
"react-native-safe-area-context": "~5.6.0",
|
||||
"react-native-screens": "~4.23.0",
|
||||
"react-native-gesture-handler": "~2.31.1",
|
||||
"react-native-reanimated": "4.3.1",
|
||||
"react-native-safe-area-context": "~5.7.0",
|
||||
"react-native-screens": "~4.26.0",
|
||||
"react-native-simple-radio-button": "^2.7.4",
|
||||
"react-native-svg": "15.15.3",
|
||||
"react-native-svg": "15.15.4",
|
||||
"react-native-svg-transformer": "^1.5.3",
|
||||
"react-native-worklets": "0.7.4",
|
||||
"react-native-worklets": "0.8.3",
|
||||
"react-redux": "^9.2.0",
|
||||
"redux": "^5.0.1",
|
||||
"redux-persist": "^6.0.0",
|
||||
@@ -53,6 +54,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.24.9",
|
||||
"@expo/config-plugins": "~56.0.14",
|
||||
"@react-native/eslint-config": "^0.74.85",
|
||||
"@testing-library/react-native": "^13.3.3",
|
||||
"@types/jest": "^29.5.14",
|
||||
@@ -69,9 +71,9 @@
|
||||
"eslint-plugin-react": "^7.34.3",
|
||||
"eslint-plugin-react-hooks": "^4.6.2",
|
||||
"jest": "^29.7.0",
|
||||
"jest-expo": "~55.0.20",
|
||||
"jest-expo": "~56.0.5",
|
||||
"prettier": "^3.3.3",
|
||||
"react-test-renderer": "19.2.0",
|
||||
"typescript": "~5.9.2"
|
||||
"react-test-renderer": "19.2.3",
|
||||
"typescript": "~6.0.3"
|
||||
}
|
||||
}
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
// moment ships its locale files as plain JS with no type declarations. TypeScript 6
|
||||
// (Expo SDK 56) rejects side-effect imports it cannot type, so declare them as untyped.
|
||||
declare module 'moment/locale/*';
|
||||
+4
-4
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"jsx": "react",
|
||||
"baseUrl": "./",
|
||||
"paths": {
|
||||
"@/*": ["src/*"],
|
||||
"@assets/*": ["assets/*"]
|
||||
"@/*": ["./src/*"],
|
||||
"@assets/*": ["./assets/*"]
|
||||
},
|
||||
"strict": true
|
||||
"strict": true,
|
||||
"types": ["jest", "node"]
|
||||
},
|
||||
"extends": "expo/tsconfig.base",
|
||||
"include": ["src", "src/types/svg.ts", "App.ts", "index.ts"]
|
||||
|
||||
Reference in new issue
Block a user