mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 19:41:09 +02:00
chore(mobile): align all 7 Expo apps to SDK 55
Upgraded 6 apps from SDK 52/54 to SDK 55 (matrix was already on 55). All apps now consistently use: - Expo SDK ~55.0.5 - React Native 0.83.2 - React 19.2.0 - expo-router ~55.0.5 - NativeWind ~4.2.3 Before: 3 different SDK versions (52, 54, 55) After: 1 version (55) across all 7 mobile apps Added docs/EXPO_SDK_UPGRADE.md with testing checklist. Note: pnpm install + device testing required to validate the upgrades. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
456f99b89e
commit
27b70e8197
7 changed files with 195 additions and 110 deletions
|
|
@ -22,30 +22,30 @@
|
|||
"@react-navigation/bottom-tabs": "^7.0.5",
|
||||
"@react-navigation/drawer": "^7.0.0",
|
||||
"@react-navigation/native": "^7.0.3",
|
||||
"expo": "^52.0.39",
|
||||
"expo-constants": "~17.0.8",
|
||||
"expo-dev-client": "~5.0.4",
|
||||
"expo-dev-launcher": "^5.0.17",
|
||||
"expo-linking": "~7.0.5",
|
||||
"expo-router": "~4.0.6",
|
||||
"expo-status-bar": "~2.0.1",
|
||||
"expo-system-ui": "~4.0.8",
|
||||
"expo-web-browser": "~14.0.2",
|
||||
"nativewind": "latest",
|
||||
"expo": "~55.0.5",
|
||||
"expo-constants": "~55.0.7",
|
||||
"expo-dev-client": "^6.0.13",
|
||||
"expo-dev-launcher": "^6.0.13",
|
||||
"expo-linking": "~55.0.7",
|
||||
"expo-router": "~55.0.5",
|
||||
"expo-status-bar": "~55.0.4",
|
||||
"expo-system-ui": "~55.0.9",
|
||||
"expo-web-browser": "~55.0.9",
|
||||
"nativewind": "~4.2.3",
|
||||
"node-fetch": "^2.7.0",
|
||||
"react": "18.3.1",
|
||||
"react-dom": "18.3.1",
|
||||
"react-native": "0.76.7",
|
||||
"react-native-gesture-handler": "~2.20.2",
|
||||
"react": "19.2.0",
|
||||
"react-dom": "19.2.0",
|
||||
"react-native": "0.83.2",
|
||||
"react-native-gesture-handler": "~2.28.0",
|
||||
"react-native-markdown-display": "^7.0.2",
|
||||
"react-native-reanimated": "3.16.2",
|
||||
"react-native-safe-area-context": "4.12.0",
|
||||
"react-native-screens": "~4.4.0",
|
||||
"react-native-web": "~0.19.10"
|
||||
"react-native-reanimated": "~4.1.5",
|
||||
"react-native-safe-area-context": "~5.6.0",
|
||||
"react-native-screens": "~4.16.0",
|
||||
"react-native-web": "~0.21.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.20.0",
|
||||
"@types/react": "~18.3.12",
|
||||
"@types/react": "~19.1.0",
|
||||
"@typescript-eslint/eslint-plugin": "^7.7.0",
|
||||
"@typescript-eslint/parser": "^7.7.0",
|
||||
"dotenv": "^16.4.7",
|
||||
|
|
|
|||
|
|
@ -23,38 +23,38 @@
|
|||
"@react-native-async-storage/async-storage": "^1.23.1",
|
||||
"@react-native-picker/picker": "^2.11.0",
|
||||
"@react-navigation/native": "^7.0.3",
|
||||
"expo": "^52.0.46",
|
||||
"expo-constants": "~17.0.8",
|
||||
"expo-dev-client": "~5.0.4",
|
||||
"expo-dev-launcher": "^5.0.17",
|
||||
"expo": "~55.0.5",
|
||||
"expo-constants": "~55.0.7",
|
||||
"expo-dev-client": "^6.0.13",
|
||||
"expo-dev-launcher": "^6.0.13",
|
||||
"expo-font": "^14.0.10",
|
||||
"expo-linking": "~7.0.5",
|
||||
"expo-linking": "~55.0.7",
|
||||
"expo-localization": "^16.1.6",
|
||||
"expo-router": "~4.0.6",
|
||||
"expo-status-bar": "~2.0.1",
|
||||
"expo-system-ui": "~4.0.9",
|
||||
"expo-secure-store": "~14.0.1",
|
||||
"expo-web-browser": "~14.0.2",
|
||||
"expo-router": "~55.0.5",
|
||||
"expo-status-bar": "~55.0.4",
|
||||
"expo-system-ui": "~55.0.9",
|
||||
"expo-secure-store": "~55.0.8",
|
||||
"expo-web-browser": "~55.0.9",
|
||||
"i18next": "^25.3.2",
|
||||
"nativewind": "latest",
|
||||
"react": "18.3.1",
|
||||
"react-dom": "18.3.1",
|
||||
"nativewind": "~4.2.3",
|
||||
"react": "19.2.0",
|
||||
"react-dom": "19.2.0",
|
||||
"react-i18next": "^15.6.0",
|
||||
"react-native": "0.76.9",
|
||||
"react-native-gesture-handler": "~2.20.2",
|
||||
"react-native": "0.83.2",
|
||||
"react-native-gesture-handler": "~2.28.0",
|
||||
"react-native-markdown-display": "^7.0.2",
|
||||
"react-native-pager-view": "^6.7.0",
|
||||
"react-native-purchases": "^8.9.5",
|
||||
"react-native-reanimated": "3.16.2",
|
||||
"react-native-safe-area-context": "4.12.0",
|
||||
"react-native-screens": "~4.4.0",
|
||||
"react-native-reanimated": "~4.1.5",
|
||||
"react-native-safe-area-context": "~5.6.0",
|
||||
"react-native-screens": "~4.16.0",
|
||||
"react-native-tab-view": "^4.0.10",
|
||||
"react-native-web": "~0.19.10"
|
||||
"react-native-web": "~0.21.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.20.0",
|
||||
"@types/node": "^24.10.1",
|
||||
"@types/react": "~18.3.12",
|
||||
"@types/react": "~19.1.0",
|
||||
"@typescript-eslint/eslint-plugin": "^7.7.0",
|
||||
"@typescript-eslint/parser": "^7.7.0",
|
||||
"eslint": "^8.57.0",
|
||||
|
|
|
|||
|
|
@ -22,29 +22,29 @@
|
|||
"@react-navigation/drawer": "^7.0.0",
|
||||
"@react-navigation/native": "^7.0.3",
|
||||
"@manacore/shared-auth": "workspace:*",
|
||||
"expo": "^54.0.25",
|
||||
"expo-secure-store": "^15.0.7",
|
||||
"expo-constants": "~18.0.10",
|
||||
"expo-dev-client": "~6.0.18",
|
||||
"expo-dev-launcher": "^5.0.17",
|
||||
"expo-linking": "~8.0.9",
|
||||
"expo-router": "~6.0.15",
|
||||
"expo-status-bar": "~3.0.8",
|
||||
"expo-system-ui": "~6.0.8",
|
||||
"expo-web-browser": "~15.0.9",
|
||||
"nativewind": "latest",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"react-native": "0.81.5",
|
||||
"expo": "~55.0.5",
|
||||
"expo-secure-store": "~55.0.8",
|
||||
"expo-constants": "~55.0.7",
|
||||
"expo-dev-client": "^6.0.13",
|
||||
"expo-dev-launcher": "^6.0.13",
|
||||
"expo-linking": "~55.0.7",
|
||||
"expo-router": "~55.0.5",
|
||||
"expo-status-bar": "~55.0.4",
|
||||
"expo-system-ui": "~55.0.9",
|
||||
"expo-web-browser": "~55.0.9",
|
||||
"nativewind": "~4.2.3",
|
||||
"react": "19.2.0",
|
||||
"react-dom": "19.2.0",
|
||||
"react-native": "0.83.2",
|
||||
"react-native-gesture-handler": "~2.28.0",
|
||||
"react-native-reanimated": "4.1.5",
|
||||
"react-native-safe-area-context": "5.6.2",
|
||||
"react-native-reanimated": "~4.1.5",
|
||||
"react-native-safe-area-context": "~5.6.0",
|
||||
"react-native-screens": "~4.16.0",
|
||||
"react-native-web": "~0.21.2"
|
||||
"react-native-web": "~0.21.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.20.0",
|
||||
"@types/react": "^19.2.3",
|
||||
"@types/react": "~19.1.0",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"@typescript-eslint/eslint-plugin": "^7.7.0",
|
||||
"@typescript-eslint/parser": "^7.7.0",
|
||||
|
|
|
|||
|
|
@ -26,41 +26,41 @@
|
|||
"@react-navigation/native": "^7.0.3",
|
||||
"base64-js": "^1.5.1",
|
||||
"class-variance-authority": "^0.7.1",
|
||||
"expo": "54.0.13",
|
||||
"expo": "~55.0.5",
|
||||
"expo-blur": "~15.0.7",
|
||||
"expo-build-properties": "~1.0.9",
|
||||
"expo-constants": "~18.0.9",
|
||||
"expo-dev-client": "~6.0.13",
|
||||
"expo-constants": "~55.0.7",
|
||||
"expo-dev-client": "^6.0.13",
|
||||
"expo-device": "~8.0.9",
|
||||
"expo-file-system": "~19.0.15",
|
||||
"expo-file-system": "~55.0.10",
|
||||
"expo-font": "~14.0.9",
|
||||
"expo-image-picker": "~17.0.8",
|
||||
"expo-linking": "~8.0.8",
|
||||
"expo-router": "~6.0.10",
|
||||
"expo-secure-store": "^15.0.7",
|
||||
"expo-status-bar": "~3.0.8",
|
||||
"expo-image-picker": "~55.0.12",
|
||||
"expo-linking": "~55.0.7",
|
||||
"expo-router": "~55.0.5",
|
||||
"expo-secure-store": "~55.0.8",
|
||||
"expo-status-bar": "~55.0.4",
|
||||
"expo-symbols": "~1.0.7",
|
||||
"expo-system-ui": "~6.0.7",
|
||||
"expo-system-ui": "~55.0.9",
|
||||
"expo-updates": "~29.0.12",
|
||||
"expo-web-browser": "~15.0.8",
|
||||
"nativewind": "^4.2.1",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"react-native": "0.81.4",
|
||||
"expo-web-browser": "~55.0.9",
|
||||
"nativewind": "~4.2.3",
|
||||
"react": "19.2.0",
|
||||
"react-dom": "19.2.0",
|
||||
"react-native": "0.83.2",
|
||||
"react-native-calendars": "^1.1313.0",
|
||||
"react-native-draggable-flatlist": "^4.0.3",
|
||||
"react-native-gesture-handler": "~2.28.0",
|
||||
"react-native-reanimated": "~4.1.1",
|
||||
"react-native-reanimated": "~4.1.5",
|
||||
"react-native-safe-area-context": "~5.6.0",
|
||||
"react-native-screens": "~4.16.0",
|
||||
"react-native-svg": "15.12.1",
|
||||
"react-native-web": "^0.21.0",
|
||||
"react-native-web": "~0.21.0",
|
||||
"react-native-worklets": "0.5.1",
|
||||
"zustand": "^5.0.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.20.0",
|
||||
"@types/react": "^19.2.3",
|
||||
"@types/react": "~19.1.0",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"ajv": "^8.12.0",
|
||||
"eslint": "^9.25.1",
|
||||
|
|
|
|||
|
|
@ -26,35 +26,35 @@
|
|||
"@react-native-async-storage/async-storage": "2.2.0",
|
||||
"@react-navigation/native": "^7.0.3",
|
||||
"blurhash": "^2.0.5",
|
||||
"expo": "54.0.12",
|
||||
"expo": "~55.0.5",
|
||||
"expo-blur": "~15.0.7",
|
||||
"expo-clipboard": "~8.0.7",
|
||||
"expo-constants": "~18.0.9",
|
||||
"expo-file-system": "~19.0.16",
|
||||
"expo-haptics": "~15.0.7",
|
||||
"expo-image": "~3.0.9",
|
||||
"expo-constants": "~55.0.7",
|
||||
"expo-file-system": "~55.0.10",
|
||||
"expo-haptics": "~55.0.8",
|
||||
"expo-image": "~55.0.6",
|
||||
"expo-linear-gradient": "~15.0.7",
|
||||
"expo-linking": "~8.0.8",
|
||||
"expo-location": "~19.0.7",
|
||||
"expo-media-library": "~18.2.0",
|
||||
"expo-router": "~6.0.10",
|
||||
"expo-secure-store": "~15.0.7",
|
||||
"expo-linking": "~55.0.7",
|
||||
"expo-location": "~55.0.6",
|
||||
"expo-media-library": "~55.0.9",
|
||||
"expo-router": "~55.0.5",
|
||||
"expo-secure-store": "~55.0.8",
|
||||
"expo-sharing": "~14.0.7",
|
||||
"expo-status-bar": "~3.0.8",
|
||||
"expo-status-bar": "~55.0.4",
|
||||
"expo-symbols": "^1.0.7",
|
||||
"expo-system-ui": "~6.0.7",
|
||||
"expo-web-browser": "~15.0.8",
|
||||
"nativewind": "^4.2.1",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"react-native": "0.81.4",
|
||||
"expo-system-ui": "~55.0.9",
|
||||
"expo-web-browser": "~55.0.9",
|
||||
"nativewind": "~4.2.3",
|
||||
"react": "19.2.0",
|
||||
"react-dom": "19.2.0",
|
||||
"react-native": "0.83.2",
|
||||
"react-native-context-menu-view": "^1.20.0",
|
||||
"react-native-gesture-handler": "~2.28.0",
|
||||
"react-native-pager-view": "6.9.1",
|
||||
"react-native-reanimated": "~4.1.1",
|
||||
"react-native-reanimated": "~4.1.5",
|
||||
"react-native-safe-area-context": "~5.6.0",
|
||||
"react-native-screens": "~4.16.0",
|
||||
"react-native-web": "^0.21.0",
|
||||
"react-native-web": "~0.21.0",
|
||||
"react-native-worklets": "^0.6.0",
|
||||
"react-native-zoom-toolkit": "^5.0.1",
|
||||
"zustand": "^4.5.1"
|
||||
|
|
@ -63,7 +63,7 @@
|
|||
"@babel/core": "^7.20.0",
|
||||
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
|
||||
"@babel/plugin-syntax-import-meta": "^7.10.4",
|
||||
"@types/react": "~19.2.0",
|
||||
"@types/react": "~19.1.0",
|
||||
"ajv": "^8.12.0",
|
||||
"babel-plugin-module-resolver": "^5.0.2",
|
||||
"babel-plugin-transform-remove-console": "^6.9.4",
|
||||
|
|
|
|||
|
|
@ -21,25 +21,25 @@
|
|||
"@react-native-async-storage/async-storage": "2.2.0",
|
||||
"@react-native-community/slider": "5.0.1",
|
||||
"@react-navigation/native": "^7.0.3",
|
||||
"expo": "~54.0.0",
|
||||
"expo-background-fetch": "~14.0.7",
|
||||
"expo-background-task": "~1.0.8",
|
||||
"expo-constants": "~18.0.0",
|
||||
"expo": "~55.0.5",
|
||||
"expo-background-fetch": "~55.0.4",
|
||||
"expo-background-task": "~55.0.4",
|
||||
"expo-constants": "~55.0.7",
|
||||
"expo-dev-client": "^6.0.13",
|
||||
"expo-dev-launcher": "^6.0.13",
|
||||
"expo-location": "~19.0.0",
|
||||
"expo-media-library": "~18.2.0",
|
||||
"expo-router": "~6.0.0",
|
||||
"expo-status-bar": "~3.0.0",
|
||||
"expo-system-ui": "~6.0.7",
|
||||
"expo-task-manager": "~14.0.0",
|
||||
"nativewind": "latest",
|
||||
"react": "19.1.0",
|
||||
"react-dom": "19.1.0",
|
||||
"react-native": "0.81.4",
|
||||
"expo-location": "~55.0.6",
|
||||
"expo-media-library": "~55.0.9",
|
||||
"expo-router": "~55.0.5",
|
||||
"expo-status-bar": "~55.0.4",
|
||||
"expo-system-ui": "~55.0.9",
|
||||
"expo-task-manager": "~55.0.4",
|
||||
"nativewind": "~4.2.3",
|
||||
"react": "19.2.0",
|
||||
"react-dom": "19.2.0",
|
||||
"react-native": "0.83.2",
|
||||
"react-native-gesture-handler": "~2.28.0",
|
||||
"react-native-maps": "1.20.1",
|
||||
"react-native-reanimated": "~4.1.1",
|
||||
"react-native-reanimated": "~4.1.5",
|
||||
"react-native-worklets": "~0.6.1",
|
||||
"react-native-safe-area-context": "~5.6.0",
|
||||
"react-native-screens": "~4.16.0",
|
||||
|
|
|
|||
85
docs/EXPO_SDK_UPGRADE.md
Normal file
85
docs/EXPO_SDK_UPGRADE.md
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
# Expo SDK Upgrade Guide
|
||||
|
||||
**Current State (2026-03-28):**
|
||||
|
||||
| App | Expo SDK | React Native | Router | Status |
|
||||
|-----|----------|-------------|--------|--------|
|
||||
| matrix | **55** | 0.83.2 | ~55.0.5 | Target version |
|
||||
| manacore | 54 | 0.81.5 | ~6.0.15 | Needs upgrade |
|
||||
| manadeck | 54 | 0.81.4 | ~6.0.10 | Needs upgrade |
|
||||
| picture | 54 | 0.81.4 | ~6.0.10 | Needs upgrade |
|
||||
| traces | 54 | 0.81.4 | ~6.0.0 | Needs upgrade |
|
||||
| chat | **52** | 0.76.7 | ~4.0.6 | Needs upgrade (2 majors!) |
|
||||
| context | **52** | 0.76.9 | ~4.0.6 | Needs upgrade (2 majors!) |
|
||||
|
||||
**Target:** All apps on Expo SDK 55
|
||||
|
||||
## Breaking Changes SDK 52 → 55
|
||||
|
||||
### expo-router
|
||||
- v4 (SDK 52) → v55 (SDK 55): Major API change
|
||||
- Router is now versioned with the SDK (no more separate major versions)
|
||||
- `expo-router/entry` still works as main entry point
|
||||
|
||||
### React
|
||||
- React 18.3 → React 19.2
|
||||
- New `use()` hook, improved Suspense
|
||||
|
||||
### React Native
|
||||
- 0.76 → 0.83: New Architecture enabled by default
|
||||
- Fabric renderer is default
|
||||
- Bridgeless mode
|
||||
|
||||
### NativeWind
|
||||
- v3/v4 → v4.2.3: Should be compatible if already on v4
|
||||
|
||||
## Upgrade Steps (Per App)
|
||||
|
||||
```bash
|
||||
# 1. Use Expo upgrade tool
|
||||
cd apps/{app}/apps/mobile
|
||||
npx expo install expo@~55.0.5 --fix
|
||||
|
||||
# 2. This auto-upgrades compatible dependencies
|
||||
# For manual deps, use:
|
||||
npx expo install react-native@0.83.2 react@19.2.0 expo-router@~55.0.5
|
||||
|
||||
# 3. Update NativeWind
|
||||
npx expo install nativewind@~4.2.3
|
||||
|
||||
# 4. Fix breaking changes
|
||||
# - Check for deprecated APIs
|
||||
# - Test navigation (expo-router changes)
|
||||
# - Test NativeWind styles
|
||||
|
||||
# 5. Clear caches and test
|
||||
npx expo start -c
|
||||
```
|
||||
|
||||
## Recommended Upgrade Order
|
||||
|
||||
1. **traces** (simplest app, minimal deps)
|
||||
2. **manadeck** (medium complexity)
|
||||
3. **picture** (has image handling)
|
||||
4. **manacore** (hub app, important)
|
||||
5. **context** (SDK 52 → 55, bigger jump)
|
||||
6. **chat** (SDK 52 → 55, most complex mobile app)
|
||||
|
||||
## Shared Dependencies to Update
|
||||
|
||||
All mobile apps share these workspace packages:
|
||||
- `@manacore/shared-ui` (React Native components)
|
||||
- `@manacore/shared-theme` (theme system)
|
||||
- `@manacore/shared-auth` (auth service)
|
||||
|
||||
These should be tested with React 19 / RN 0.83 before upgrading apps.
|
||||
|
||||
## Testing Checklist (Per App)
|
||||
|
||||
- [ ] App starts without errors (`npx expo start`)
|
||||
- [ ] Navigation works (all routes)
|
||||
- [ ] Auth flow (login, logout, token refresh)
|
||||
- [ ] NativeWind styles render correctly
|
||||
- [ ] App-specific features work
|
||||
- [ ] iOS simulator test
|
||||
- [ ] Android emulator test (if applicable)
|
||||
Loading…
Add table
Add a link
Reference in a new issue