iOS and Android from one codebase
Shared logic, with platform-specific behaviour where it matters — navigation patterns, permission prompts and back-button handling differ, and apps that ignore that feel wrong on at least one platform.
One codebase for iOS and Android — and an honest answer about when that is the wrong choice.
React Native suits most apps. Where it genuinely does not, I will tell you before you spend money: heavy real-time video processing, serious 3D, or deep platform-specific hardware integration are usually better native. For the large middle ground — anything built around content, accounts, forms, payments, messaging or scheduling — one codebase across both platforms is a straightforward saving.
The part teams underestimate is not the code. It is the release pipeline: provisioning profiles, store review, staged rollouts, crash triage, and shipping a fix when a release breaks for a subset of devices you do not own.
Shared logic, with platform-specific behaviour where it matters — navigation patterns, permission prompts and back-button handling differ, and apps that ignore that feel wrong on at least one platform.
Local persistence and sync with conflict resolution, so the app stays usable on a bad connection instead of showing a spinner on a train.
FCM and APNs set up properly, including deep links that open the right screen and permission prompts asked at a moment the user understands.
I handle builds, signing, store listings and the review back-and-forth. First submissions get rejected for predictable reasons; knowing them in advance saves a fortnight.
Sentry or Crashlytics wired in from the first build, with source maps uploaded, so a crash report points at a line of code rather than minified noise.
Shipping JavaScript-level fixes without a store review cycle, within the limits the stores actually permit.
Expo covers most apps now and removes a lot of native build pain. Bare is for genuine native module needs. Switching later is expensive, so this is settled first.
Simulators hide jank, thermal behaviour and keyboard problems. Testing happens on actual mid-range hardware.
Certificates and provisioning are the most common cause of a release slipping. They get sorted at the start, not the night before launch.
A staged rollout or TestFlight group before general release, so a bad build reaches a handful of users rather than all of them.
Reusing your existing API to put the core workflow in users' pockets.
Calendars, reminders, rescheduling and payments.
Job lists, status updates, barcode scanning and location, built to survive weak connectivity.
Feeds, profiles, notifications and in-app messaging.
For the categories above, users will not be able to tell. Where the gap shows is sustained 60fps animation under load, heavy media processing and very deep OS integration. If your app's core value is one of those, native is the right call and I would rather say that now than discover it in month three.
A focused first version with accounts, a core workflow and payments is typically eight to fourteen weeks including store submission. The honest variable is not engineering speed; it is how settled the scope is. Projects that take much longer are usually projects that changed definition twice.
Yes — see the Node.js page. Having one person across the API and the app removes a whole class of integration argument, though I am equally happy consuming an API your team owns.
You should, always. I will walk you through creating them under your own company identity and work inside them with delegated access. Apps published under a contractor's developer account are painful to move and give someone else control of your listing.
Mobile needs ongoing attention whether or not you add features — the platforms raise minimum SDK versions annually and libraries age. A small monthly retainer covering OS updates, dependency patches and crash triage is usually more economical than an emergency fix when the app stops building.
A short call costs nothing, and if your project is a better fit elsewhere I will say so. Replies usually within 24 hours.
Get in touch