Reelax's creator app went from 0.70 to 0.82, onto the new architecture, with OTA updates and crash reporting added along the way. What actually took the time.
The Reelax creator app is where influencers find campaigns, send proposals, sign contracts and get paid. It was on React Native 0.70 when I started. The upgrade lived on its own branch for months and was merged into feature work in pieces, so the app kept shipping while it happened.
Where it ended up
- React Native 0.82.1 with the new architecture enabled (Fabric and TurboModules).
- Hermes on both platforms.
- Android: compileSdk and targetSdk 36, NDK 27.1, Gradle 9, and 16KB page-size compliance for Google Play.
- iOS: a Podfile that builds cleanly on current Xcode.
Over-the-air updates came first
Before most of the upgrade landed, we integrated RevoPush for over-the-air JavaScript updates, with a bottom sheet that tells the user an update is ready. A big migration ships bugs, and OTA meant a JavaScript-only fix could reach users the same day instead of waiting on store review.
Deep links needed the most care
Deep links behave differently depending on whether the app is cold-started from the link or already running, and that is easy to get subtly wrong across an upgrade. The fix was to stop handling links manually and let React Navigation's NavigationContainer own them. Then I wrote a verification script that fires every link at the app in both cold-start and warm-start states, so we would notice the next time it regressed.
Native builds, one toolchain at a time
Most of the hours went into native builds, not JavaScript. On iOS, a newer Xcode refused to compile the fmt library that React Native pulls in, and the Podfile needed a patch for its consteval usage. On Android, each SDK and Gradle bump surfaced a library that had not caught up yet.
Things worth adding while you are in there
- In-app updates, so users on an old binary are nudged to the store build.
- Sentry for crash reporting, so native crashes after the upgrade arrive with stack traces instead of store reviews.
- Version code discipline: every store build got a bumped code in the same commit as its changes.
If I did it again, I would set up crash reporting and the deep-link script before touching the React Native version at all. They are what told us the upgrade was working.