The short answer
- Framework selection should follow product constraints rather than fashion.
- React Native shares code, but platform-specific code remains a supported design mechanism.
- Native frameworks provide the most direct route to each platform's APIs and conventions.
- Library maturity and upgrade ownership matter as much as first-release speed.
- A short technical proof should test the riskiest capability before commitment.
Start with the product constraint, not the framework
The correct choice depends on what the app must do, where it must feel at home, and which risks the delivery team can own. Document the required devices, operating-system versions, critical interactions, offline behaviour, background work, accessibility needs, sensors, media, security model, integrations, release cadence, and expected product lifespan before scoring technologies.
Also examine the organisation, not only the application. Existing Swift, Kotlin, React, backend, quality-assurance, and release skills can change the total cost of ownership. A theoretically efficient framework is not efficient when nobody can diagnose its production failures or maintain its native boundary.
Choose native when platform depth drives the value
Native iOS development uses Apple technologies such as SwiftUI or UIKit, while native Android development commonly uses Kotlin with Jetpack Compose or Android Views. Apple describes SwiftUI as its modern approach for building across Apple platforms, and Android describes Compose as its recommended modern toolkit for native UI.[1][2]
Native is usually the stronger default when the product relies heavily on new or specialised platform APIs, demanding graphics or real-time interactions, complex background behaviour, advanced accessibility integration, platform-specific interface conventions, or an existing native codebase. It can also simplify responsibility because the application follows the platform vendor's primary toolchain directly.
- Best fit: platform-first products with materially different iOS and Android experiences
- Best fit: teams that already maintain strong Swift and Kotlin capability
- Trade-off: two implementations can increase coordination and duplicated feature work
- Trade-off: consistency requires shared product rules across separate codebases
Choose React Native when shared product logic is substantial
React Native can share interface and application code across iOS and Android while rendering through native platform capabilities. It is often a good fit when the main journeys, data model, business rules, and release priorities are closely aligned across both platforms and the team has relevant React or TypeScript experience.
The strongest case is not 'write once and forget both platforms.' The strongest case is a shared product architecture with deliberate native adaptations. React Native's official documentation exposes platform selection and platform-specific files because different behaviour and components are sometimes the correct solution.[3]
- Best fit: aligned iOS and Android journeys with a shared product team
- Best fit: interface-led products supported by mature compatible libraries
- Trade-off: framework and dependency upgrades become part of the operating model
- Trade-off: specialist native work is still required for unsupported platform APIs
Shared code does not remove native engineering
React Native documents Turbo Native Modules for features that need Android or iOS APIs not supplied by React Native or an existing library. Those modules require a typed specification, generated interfaces, and platform implementations. A proposal should therefore identify every critical capability, the library or native implementation planned for it, and who will maintain that dependency boundary.[4]
Both approaches still need real-device testing, accessibility review, performance measurement, privacy and security work, store assets, signing, phased release, crash monitoring, and support. A shared code percentage is not a business outcome; stable user journeys and maintainable delivery are the outcomes that matter.
Run a risk-led selection exercise
Score each option against user experience, required APIs, performance sensitivity, platform divergence, accessibility, offline needs, security, existing systems, team skills, recruitment, dependency risk, release operations, and five-year maintainability. Weight the factors before scoring so a minor convenience cannot outweigh a critical capability.
When one capability could reverse the decision, build a narrow technical proof with production-like constraints. Test the real device, data volume, failure state, accessibility path, and integration rather than a polished happy-path demo. Record the evidence and the limitations so the framework choice remains explainable later.
- Identify the three constraints that could make either option fail
- Verify critical libraries against the intended framework and OS versions
- Prototype native boundaries, offline behaviour, and demanding interactions
- Estimate release and maintenance work, not only initial feature delivery
- Choose an exit path for dependencies the team does not control
Sources and further guidance
Blancc uses primary guidance where factual or regulatory context matters. Recommendations remain general and should be assessed against the specific business, audience, product, and risk.
Read Blancc’s editorial standards and corrections policy for source selection, illustrative labels, update dates, software assistance and corrections.
