Cross-platform mobile app development

One codebase, both app stores, built to survive the operating system

Cross-platform apps in React Native and Expo — including the background, permission, and store-review work that decides whether an app actually ships.

The problem

Building two native apps costs roughly twice as much and drifts apart within a year. But cross-platform has its own trap: the demo works, then the app meets a real phone. Background tasks get killed, battery optimisation throttles updates, a store reviewer rejects the build over a permission string, and the last ten percent takes longer than the first ninety.

How we approach it

One Expo codebase for iOS and Android, with the hard parts identified early rather than discovered at submission. Anything that has to survive the OS — background execution, permissions, offline state — gets built as testable logic separated from the device, so it can be proven against simulated failures instead of only against whatever your test phone happened to do.

Most of the cost in a mobile app is not the screens. It is background execution, permissions, offline behaviour, and store review — the parts that are invisible in a design file and unavoidable in production.

Two of the apps in our selected work are built on exactly that problem, and both case studies describe the specific bugs and how they were found.

What you get

  • iOS and Android apps from a single TypeScript codebase
  • Store-ready builds via EAS, with signing set up in your own developer accounts
  • Permission flows and privacy declarations that match what the app actually does
  • Offline-tolerant behaviour where the product needs it
  • An automated test suite around the logic that matters
  • Submission support for App Store and Google Play review

Typical features

  • Accounts, sign-in, and secure token storage
  • Maps, location, and background location capture
  • Push and local notifications
  • Camera, photo upload, and document capture
  • In-app purchases and subscription restore
  • Offline storage with sync on reconnect

A good fit for

  • Startups launching a first consumer or field-team app
  • Service businesses putting tools in the hands of people who are not at a desk
  • Products where iOS and Android need to stay genuinely in step

From real projects

What this has looked like in practice

Each of these is drawn from a case study on this site, not from a hypothetical.

  • MileageSync's trip detection is written as pure functions over location samples, which put roughly a hundred automated tests around behaviour that otherwise only appears while driving — simulated app kills, GPS drift, and stop-and-go traffic that must not split one drive into five.
  • GameLynx runs a live Mapbox map with clustered member markers, and randomises locations on the server so exact coordinates never leave their owner.
  • A GameLynx crash on opening a profile turned out to be a second live map instance pushing native heap past 390 MB. Replacing non-interactive maps with static renders settled it at a stable 217 MB.

Case studies

Projects demonstrating this work

The GameLynx app shown on a phone, displaying its member discovery map

Cross-platform mobile appMobile Apps

GameLynx

A skill-based matchmaking app that pairs golfers with compatible playing partners nearby, then gets the round on the calendar.

In development — store listings in progress

  • React Native
  • Expo
  • TypeScript
  • React 19
  • +5 more
The MileageSync app shown on a phone, displaying its trip tracking home screen

Cross-platform mobile appMobile Apps

MileageSync

A hands-free mileage logger that detects drives in the background and turns them into IRS-ready deductions, with every GPS point kept on the device.

In development — store listings in progress

  • React Native
  • Expo
  • TypeScript
  • SQLite
  • +4 more
The FamilyPromise matching app shown across mobile screens

Full-stack civic mobile appMobile Apps

FamilyPromise Mobile Matching App

A role-based mobile app helping tenants, property owners, and case handlers coordinate Section 8 housing voucher matches in one workflow.

University team project, Fall 2024 — built with multiple contributors

  • React Native
  • Expo
  • TypeScript
  • Flask
  • +3 more

Questions about mobile apps

Why React Native rather than fully native?

One team, one codebase, and features land on both platforms at the same time. Fully native is the right call when an app's core is sustained heavy graphics or a platform-only capability — and if that is your product, we will tell you.

Can you guarantee App Store approval?

No, and nobody honestly can. Review outcomes are the platform's decision. What is controllable is preparation: matching privacy declarations to real behaviour, correct background-mode entitlements, and a working restore-purchases path. Rejections are usually about those, and we handle resubmissions.

How long does a first version take?

It depends on scope, and anyone quoting a number before seeing the scope is guessing. Discovery produces a milestone plan with dates you can hold us to.

Do you publish under our developer account?

Yes. The App Store and Play accounts are yours, so the app stays yours regardless of who maintains it later.

Related

All services

Thinking about mobile apps?

Start with a discovery call. It costs nothing to find out whether this is the right shape of work for your situation.

Prefer email? Contact@DeviceBytes.com