Skip to content

Conversation

@teodorciuraru
Copy link
Contributor

Summary

Upgrades the react-native-expo quickstart project from Expo SDK 53 to SDK 54 with minimal changes to preserve the original project structure.

Changes

  • ✅ Upgraded Expo SDK from ~53 to ~54.0.25
  • ✅ Upgraded React to 19.1.0 and React Native to 0.81.5
  • ✅ Added new dependencies: expo-image, @react-navigation/elements, react-native-worklets
  • ✅ Updated all Expo packages to SDK 54 compatible versions
  • ✅ Added SafeAreaProvider from react-native-safe-area-context (matches RN CLI project)
  • ✅ Added Expo 54 config options (edgeToEdgeEnabled, predictiveBackGestureEnabled, reactCompiler)
  • ✅ Added dark mode splash screen configuration
  • ✅ Used simple index.js entry point to minimize diff (not expo-router structure)
  • ✅ Updated scripts to use 'expo start' for development

Testing

  • Clean build and run on iOS simulator
  • Clean build and run on Android emulator
  • Ditto sync functionality verified
  • SafeAreaView properly handles notches and safe areas

Notes

  • Preserved original App.tsx and project structure
  • Minimal diff approach - only upgraded dependencies and added necessary config
  • All Ditto integration and customizations preserved

🤖 Generated with Claude Code

Closes SDKS-2259

Teodor Ciuraru and others added 13 commits November 20, 2025 18:20
Migrated bare React Native CLI to latest template (0.82.1) and integrated Ditto SDK 4.13.0.

BREAKING CHANGE: React Native upgraded from 0.79.1 to 0.82.1, React upgraded from 19.0.0 to 19.1.1

- Migrated to React Native 0.82.1 template (from 0.79.1)
- Upgraded React to 19.1.1
- Integrated Ditto SDK 4.13.0
- Added react-native-dotenv for environment variable loading from parent .env
- Fixed Android packaging conflicts with pickFirst '**/*.so' for duplicate Ditto native libraries
- Removed macOS support (no longer in template)
- Verified iOS and Android builds working on simulator and emulator

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Restored files that should not have been removed:
- .maestro test flows for iOS and Android
- LICENSE file

Added macOS support:
- Restored macOS directory with project files
- Added react-native-macos 0.79.1 (latest available)
- Added macOS scripts to package.json

Note: macOS support is currently non-functional due to compatibility issues between React Native 0.82.1 and react-native-macos 0.79.1 (codegen error). A README in the macos/ directory documents this limitation. macOS will work once Microsoft releases react-native-macos 0.82.x.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
The migration accidentally kept the generic React Native template README.
Restored the original README with Ditto app information, screenshots,
documentation links, and setup instructions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
The migration used TempRNProject as the placeholder name. Restored the
original project name DittoReactNativeSampleApp for iOS and Android.

- Renamed iOS Xcode project and workspace
- Renamed Android package from com.temprnproject to com.dittoreactnativesampleapp
- Updated app.json with correct display name
- Updated Podfile and rebuilt pods for RN 0.82.1

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Replace react-native SafeAreaView with react-native-safe-area-context
- Add SafeAreaProvider wrapper to provide context
- Add SafeAreaView to apply safe area insets as padding
- Ensures UI respects device notches, status bars, and system UI

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Restore react-native/types/env.d.ts for @env module types
- Regenerate Gemfile.lock with bundler for consistent gem versions
- Without env.d.ts, TypeScript can't resolve @env imports

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Add ruby/setup-ruby@v1 action to build-ios job
- Use Ruby 3.3 to match local development environment
- Enable bundler-cache for faster CI builds
- Fixes: CFPropertyList-3.0.9 Ruby version incompatibility

Resolves CI error: "CFPropertyList-3.0.9 requires ruby version < 3.2,
which is incompatible with the current version, ruby 3.3.10p183"

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Update ruby requirement from >= 2.6.10 to >= 3.2
- Add CFPropertyList >= 3.1.0 for Ruby 3.3 compatibility
- Remove old Gemfile.lock (will be regenerated by CI with Ruby 3.3)

This allows CFPropertyList 4.0.0 which supports Ruby 3.2+, resolving
the version conflict where:
- CFPropertyList 3.0.9 requires Ruby < 3.2
- CFPropertyList 4.0.0 requires Ruby >= 3.2

CI will generate the correct Gemfile.lock with compatible versions.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Set Ruby 3.3.0 as local version via .ruby-version
- Revert Gemfile to match RN 0.79.1 template (Ruby >= 2.6.10)
- Remove incompatible CFPropertyList constraint
- Generate Gemfile.lock with resolved dependencies
- Add BuildConfig support for RN 0.79 edge-to-edge feature

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Upgrade Expo from ~53 to ~54.0.25
- Upgrade React to 19.1.0 and React Native to 0.81.5
- Add new dependencies: expo-image, @react-navigation/elements, react-native-worklets
- Update all Expo packages to SDK 54 versions
- Change main entry point from main.tsx to expo-router/entry
- Add edgeToEdgeEnabled and predictiveBackGestureEnabled to Android config
- Enable reactCompiler experiment
- Add dark mode splash screen configuration
- Update scripts to use 'expo start' instead of 'expo run'

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Create app/ directory structure required by expo-router
- Add app/index.tsx that exports the existing App component
- This fixes the empty screen issue

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Use index.js instead of expo-router/entry to keep original structure
- Remove app/ directory to minimize changes
- Keep upgraded dependencies while preserving original architecture

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Replace react-native SafeAreaView with react-native-safe-area-context
- Wrap app with SafeAreaProvider for proper safe area handling
- Matches implementation in react-native CLI project

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@teodorciuraru teodorciuraru self-assigned this Nov 21, 2025
- Remove expo-image (~3MB) - not used in project
- Remove @react-navigation/elements - not used in project
- Keep react-native-worklets (peer dependency for reanimated)
- Remove react-native-old-backup directory

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@teodorciuraru
Copy link
Contributor Author

Closing in favor of clean branch without react-native changes

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