Why React Native rather than fully native Swift and Kotlin?
Because it gets you two apps for close to the cost of one, and React Native handles the kind of product we build well — content, video, bookings, dashboards, payments. The honest limit: if you need heavy 3D, AR, frame-perfect custom gestures or serious background processing, native is the better buy and we will say so before you spend anything. When one screen needs native muscle, we write that piece in Swift or Kotlin and bridge it, instead of rebuilding the whole app around it.
Who handles App Store and Play Store submission, and what happens if the app gets rejected?
We do — builds, signing, screenshots, privacy labels, Play's data safety form, the release notes. Submission runs through developer accounts registered to your company, so the listings, reviews and signing keys stay with you. First submissions do get bounced: missing in-app account deletion, a privacy label that does not match what the app actually collects, Sign in with Apple required alongside a social login. We write the reply, fix the cause and resubmit; Apple review usually turns around within a day or two.
Will the app work without an internet connection?
Partly, by default — login sessions, cached lists and anything already downloaded stay usable, while fresh data and streamed video do not. Proper offline, meaning queued actions that sync on reconnect and lessons that play on a plane, is buildable but it is a real feature with real cost rather than a checkbox. Video is the awkward part: CDN-streamed content is online-only unless we add secured downloads, which brings storage and licensing decisions with it. Decide this early, because retrofitting offline into a finished app is the expensive route.
How do updates reach users after launch?
Anything touching native code ships as a new store release — we submit, review clears, users update. JavaScript-only changes such as copy fixes, layout tweaks and most bug patches can go out over the air and land the next time someone opens the app, skipping the review queue entirely. We also put a version check in the API so you can prompt or force an update when a release actually matters. Worth knowing: over-the-air updates cannot add native libraries or change what the app fundamentally does — both stores draw a hard line there.
Does one codebase genuinely cover both platforms, or is that a sales line?
Most of it genuinely is shared: screens, navigation, state, the API layer and your business rules get written once. The parts that split are predictable — push notification setup, permissions, in-app purchase and payment flows, file handling, the Android back button, and the small conventions that make each platform feel native rather than ported. So one codebase saves you building the app twice; it does not save you testing it twice, and Android fragmentation means more handsets on the desk. We build and test both platforms from the first sprint instead of shipping iOS and porting later, which is where most teams get caught out.