The dev time math

Native iOS-only with SwiftUI: roughly 1x dev time on UI work, very fast iteration on Apple-specific platform features (HealthKit, Live Activities, App Clips), full access to Apple's tooling.

Native iOS + Android, two codebases: roughly 1.8x dev time on UI work, two sets of platform debt, two release pipelines, two design QA passes for every feature. The 1.8x is generous, in practice it is closer to 2.2x once you account for the second QA cycle.

Expo + React Native, single codebase: roughly 1.2x dev time on UI work for shipping both platforms, with a small set of native modules where you give back some performance or features.

The audience math

Fitness and coaching apps skew iOS in North America and parts of Europe, often 65–70% iOS by paid user share. In Asia, Latin America, parts of Europe and the Middle East, Android dominates by 70–80%. The geography of your audience determines whether iOS-first is a 30% cut or an 80% cut.

For Teshape, iOS launches first because the largest paying segment is iOS. Android follows within 8 weeks. The "iOS-only" framing is a launch sequence, not a permanent stance.

When iOS-first is the wrong call

Three cases where iOS-first is wrong, even for solo developers:

  • Your audience is primarily Android by geography. Most of Latin America, Southeast Asia, Africa.
  • Your product depends on B2B distribution where the buyer (a gym chain) requires both platforms day one.
  • You are targeting enterprise wellness contracts where parity is in the procurement requirements.

The Android handoff

If you go iOS-first the Android plan should be written, dated, and visible from day one. We had ours: 8 weeks after iOS GA, an internal alpha. 12 weeks, public beta. 16 weeks, GA. Without the timeline you will drift and Android becomes a 12-month "soon".

The Expo + React Native choice made the handoff almost free: the same codebase, the same components, a small set of Android-specific tweaks. The trade-off of choosing a cross-platform stack pays itself back the first time you ship a feature to both platforms in a single PR.