React Native 0.75.4 Upgrade Guide: Fixing Breaking Changes & Dependency Issues
Note: This guide is based on React Native 0.75.4 and Expo SDK 51 (as of August 2025). Check reactnative.dev and docs.expo.dev for updates if using newer versions like React Native 0.76 or Expo SDK 52.
Upgrading your React Native app unlocks new features and keeps it compatible with iOS (Xcode 16+, iOS 18 SDK) and Android (SDK 35), but breaking changes can make it tricky. This beginner-friendly guide walks you through upgrading to React Native 0.75.4 with Expo SDK 51, fixing dependency conflicts, and testing thoroughly. We’ll use tools like react-native-upgrade-helper
and expo-codemod
to streamline the process. No prior upgrade experience is needed, and we’ll explain key terms. For up-to-date templates, explore Instamobile or Dopebase.
By the end, your app will run smoothly on the latest version, ready for production. Let’s dive in!
Prerequisites
Ensure you have these tools and setups:
- Node.js (v20.x or later, LTS recommended): Download from nodejs.org.
- npm (v10.x or later, included with Node.js).
- EAS CLI: For Expo project management.
- Android Studio (2024.3.2 or later): With Android SDK 35 and NDK r25+.
- Xcode (16+): For iOS builds, with iOS 18 SDK (macOS only).
- A code editor like VS Code.
- Git: For version control.
- A React Native project (preferably Expo SDK 50 or earlier).
- macOS: Required for iOS builds.
What are breaking changes? Breaking changes are updates in React Native or its dependencies that require code or configuration changes to work, like renamed or removed functions.
Ready? Let’s prepare for the upgrade!
Step 1: Prepare Your Project
Back up and assess your project to avoid issues during the upgrade.
-
Commit your code to Git:
git add .
git commit -m "Pre-upgrade backup"
git push origin main -
Check your current versions in
package.json
:{
"dependencies": {
"react-native": "^0.74.5",
"expo": "~50.0.0"
}
} -
Review upgrade notes for React Native 0.75 at docs.expo.dev. Key changes include:
- React updated to 18.3.1.
- New architecture improvements (optional).
- Deprecated APIs removed (e.g.,
UIManager
methods).
-
Install
react-native-upgrade-helper
:npm install -g react-native-upgrade-helper
Compare versions:
rn-diff 0.74.5 0.75.4
Summary:
- Backed up project and reviewed upgrade notes.
- Used
react-native-upgrade-helper
to identify changes.
Mega Bundle Sale is ON! Get ALL of our React Native codebases at 90% OFF discount 🔥
Get the Mega BundleStep 2: Upgrade React Native and Expo
Upgrade to React Native 0.75.4 and Expo SDK 51 with automated tools.
-
Install EAS CLI:
npm install -g eas-cli
-
Update
package.json
:{
"dependencies": {
"react": "18.3.1",
"react-native": "0.75.4",
"expo": "~51.0.0"
}
} -
Install dependencies:
npm install
-
Apply codemods:
npx [email protected] sdk51 .
What are codemods? Codemods are scripts that automatically update code to match new APIs or remove deprecated ones, saving manual effort.
-
Use
app.config.js
for flexibility:export default () => ({
name: "MyApp",
slug: "myapp",
version: "1.0.0",
orientation: "portrait",
icon: ".https://docs.instamobile.io/assets/icon.png",
splash: {
image: ".https://docs.instamobile.io/assets/splash.png",
resizeMode: "contain",
backgroundColor: "#ffffff"
},
ios: {
bundleIdentifier: "com.myapp.app",
buildNumber: "1.0.0"
},
android: {
package: "com.myapp.app",
versionCode: 1
},
updates: {
enabled: true,
url: "https://u.expo.dev/your-project-id",
checkAutomatically: "ON_LOAD",
fallbackToCacheTimeout: 0
}
}); -
Test locally:
npx expo start
Summary:
- Upgraded to React Native 0.75.4 and Expo SDK 51.
- Applied codemods and tested the app.
Step 3: Resolve Dependency Conflicts
Fix dependency conflicts to ensure compatibility.
-
Check for conflicts:
npm list --depth=0
Look for mismatched versions (e.g., multiple React versions).
-
Update incompatible dependencies:
- Check Expo’s compatibility guide.
- Example: Update
react-native-reanimated
:npm install react-native-reanimated@~3.12.0
-
Use resolutions if needed:
{
"resolutions": {
"react": "18.3.1"
}
}Run
npm install
. -
Test again:
npx expo start
Summary:
- Resolved dependency conflicts using
npm list
and resolutions. - Verified app functionality.
Step 4: Update Platform Configurations
Update iOS and Android settings to match new requirements.
-
iOS:
- Open
ios/MyApp.xcworkspace
in Xcode 16+. - Set deployment target to iOS 18 in Build Settings.
- Update
Podfile
:require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
platform :ios, '18.0'
use_react_native!(
:path => '../node_modules/react-native',
:hermes_enabled => true
) - Run:
cd ios && pod install
- Open
-
Android:
- Update
android/build.gradle
:buildscript {
ext {
buildToolsVersion = "35.0.0"
minSdkVersion = 21
compileSdkVersion = 35
targetSdkVersion = 35
}
} - Update
android/app/build.gradle
:android {
compileSdkVersion 35
defaultConfig {
applicationId "com.myapp.app"
minSdkVersion 21
targetSdkVersion 35
versionCode 1
versionName "1.0.0"
}
}
- Update
-
Test builds:
npx expo run:ios
npx expo run:android
Summary:
- Updated iOS and Android configurations.
- Tested platform builds.
Step 5: Test Thoroughly
Ensure your app works post-upgrade with automated and manual tests.
-
Install testing dependencies:
npm install --save-dev jest @types/jest ts-jest @testing-library/react-native @testing-library/jest-native
-
Configure Jest in
package.json
:{
"scripts": {
"test": "jest"
},
"jest": {
"preset": "react-native",
"transform": {
"^.+\\.tsx?$": "ts-jest"
},
"setupFilesAfterEnv": ["@testing-library/jest-native/extend-expect"]
}
} -
Create a test in
src/__tests__/App.test.tsx
:import { render } from '@testing-library/react-native';
import App from '../App';
test('renders welcome text', () => {
const { getByText } = render(<App />);
expect(getByText('Welcome to MyApp!')).toBeTruthy();
}); -
Run tests:
npm test
-
Manually test on devices/simulators to catch UI or platform issues.
Summary:
- Set up automated tests with Jest.
- Conducted manual testing on devices.
Step 6: Deploy with OTA Updates
Use OTA updates to deploy fixes for any upgrade issues.
-
Install
expo-updates
:npm install expo-updates
Check the latest version for Expo SDK 51 at docs.expo.dev.
-
Ensure
app.config.js
includes OTA settings (Step 2). -
Add update logic to
src/App.tsx
:import { useEffect } from 'react';
import { View, Text } from 'react-native';
import * as Updates from 'expo-updates';
export default function App() {
useEffect(() => {
const checkForUpdates = async () => {
try {
const update = await Updates.checkForUpdateAsync();
if (update.isAvailable) {
await Updates.fetchUpdateAsync();
await Updates.reloadAsync();
}
} catch (e) {
console.error('Update check failed:', e);
}
};
if (!__DEV__) {
checkForUpdates();
}
}, []);
return (
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<Text>Welcome to MyApp!</Text>
</View>
);
} -
Configure EAS Update:
eas update:configure
-
Publish an OTA update:
eas update --branch production
-
Test the update with a preview build:
eas build --profile preview --platform all
Summary:
- Configured OTA updates with EAS.
- Tested updates on a preview build.
Troubleshooting Tips
- Dependency Errors: Run
npm list
and useresolutions
inpackage.json
for conflicts. - Build Fails: Ensure Xcode 16+ and Android SDK 35. Clear caches (
rm -rf ~/Library/Developer/Xcode/DerivedData
or./gradlew clean
). - Codemod Issues: Apply
rn-diff
changes manually if needed. - OTA Issues: Verify
EXPO_TOKEN
andapp.config.js
’supdates.url
. Runeas update:configure
.
Looking for a custom mobile application?
Our team of expert mobile developers can help you build a custom mobile app that meets your specific needs.
Get in TouchConclusion
You’ve upgraded your React Native app to version 0.75.4 with Expo SDK 51, navigating breaking changes with confidence. Using react-native-upgrade-helper
, expo-codemod
, and EAS Update, your app is production-ready. For pre-upgraded templates, check out Instamobile or Dopebase. Dive deeper with Expo’s documentation or join the community at reactnative.dev.
Additional Resources
- dopebase.com - Mobile app development resources and templates
- instamobile.io - Production-ready React Native templates
- instaflutter.com - Flutter templates for cross-platform development
- reactnative.dev - Official React Native documentation
- docs.expo.dev - Expo SDK and EAS documentation