[Redacted] Banking app
I built a native iOS & Android app for a large national banking client to test out new money management features developed by our UX team. It allows users to scan and save an organized collection of data pulled off of physical products using OCR. I am limited in how much more I can reveal about what the app does, but I can go over how it was built.
Before working on this project I programmed all of my native apps for iOS in Xcode using Swift or Objective-C. I always viewed cross-platform tools suspiciously – in part believing they were a crux for developers who didn’t want to learn new languages and with an understanding that the cross-platform trade-off often comes at the cost of performance and native feel.
However, since this app needed to support both iOS and Android and required a complex offline-first data layer, I recognized early on that this project could be a good fit for React Native. The app was built with a local Realm database yet, due to a peculiar set of requirements, still required a custom client-side syncing implementation that kept local data, often generated offline, in sync across devices through a legacy rest API. As is often the case when building an offline first application, this meant a great deal of data logic was compiled into the client app. Using React Native allowed us to leverage a single implementation of this complex code base across platforms which was a significant saver of time and sanity.
Although the app shared almost all of its code between Android and iOS, the OCR feature was integrated with iOS only through a custom native bridge written in objective-c. Other than this and a few styling inconsistencies the Android version of the app performed as flawlessly as it’s iOS counterpart.
React Native is not without rough edges. Adding yet another layer to an already complex stack introduces more dependencies and a whole new source of bugs. But the trade-off of building a single app that is performant and easy to maintain is a good one, and I expect I’ll be turning to React Native again on future projects.