Move a native app to React Native? Five questions first
Moving a native iOS or Android app to React Native only makes sense when cost, team and roadmap support it. Five questions to decide and scope the work.

Fondateur d'Inyka
Published on October 22, 2026
9 min
Short answer
Moving a Swift or Kotlin app to React Native is a decision about future costs, delivery capacity and what must be rebuilt. If the native app works, remains maintainable and does not hold back the roadmap, keep it. If separate teams repeatedly build the same journeys and changes have become slow, audit a focused migration. The brief places a mid-sized move in a €20,000 to €80,000 excluding VAT range, spread over months according to the code and integrations involved. Those are planning figures, not an automatic quote. Inyka prices the work after examining the user journeys and native dependencies.
First: which cost are you trying to reduce?
A high maintenance bill does not prove Swift or Kotlin is the cause. The expense may come from an unstable backend, missing tests, product debt or a provider who is hard to replace. Rebuilding the interface will not repair an API that fails each week.
Write down comparable current costs: iOS maintenance, Android maintenance, recurring fixes, release delays and features stuck in the queue. Separate mobile client issues from work that will remain after a migration. If one platform serves most users and its team ships quickly, I would keep it native until a specific problem appears. Two codebases are costly only when they genuinely force two rounds of development and maintenance.
An investment case must compare future spending and delivery time, not only the project quote. A stack change also creates a period when the old product still needs attention. Our guide to mobile app maintenance cost helps establish that starting point.
Second: can the team still ship?
The constraint may be hiring, knowledge transfer or reliance on one person. Record how long an ordinary fix takes, how many developers can release the app and who could step in if the current owner leaves. These answers matter more than a broad statistic about the developer job market.
React Native can bring skills together around TypeScript and share some components or logic across iOS and Android. Native knowledge does not disappear. Notifications, in-app purchases, permissions and platform-specific modules still need checking on each operating system. A team that ignores those topics swaps one dependency for another.
I would migrate when the lack of capacity repeatedly blocks expected features and the business is ready to maintain a shared mobile codebase. If the native team is available and moves quickly, the benefit remains hypothetical. Choosing between React Native and Flutter comes after this business decision.
Third: are iOS and Android drifting apart?
Two apps can share a logo while moving at different speeds. Compare features available on each platform, open bugs, navigation differences and release dates. When every new journey is designed, developed and corrected twice, a shared React Native base may simplify product work.
That does not mean one codebase yields identical interfaces without effort. System behaviors, permissions and purchases require separate platform tests. Aim for the same functional contract, with platform adjustments where needed.
A gap table is useful during scoping. Mark each feature "same", "different for a product reason" or "different because one team fell behind". Keep intentional differences in the specification. Use the accidental ones as a chance to narrow scope. Rebuilding every inherited feature without review brings the old delays into a new stack.
Fourth: what can be shared with the backend and dashboard?
React Native does not absorb an existing web dashboard. The interfaces remain different. Some types, validation rules and API clients may be shared if the architecture supports it. Prove the gain module by module.
Identify data whose definition differs today: order states, user roles, profile fields or pricing rules. If mobile and dashboard disagree on those concepts, moving the app alone will not settle them. Clarify the data contract first. A stable backend can remain in place while the mobile client changes.
Inyka delivers dashboards only as part of a mobile app project. If the main need is rebuilding standalone web software, this is outside our scope. Our mobile MVP method helps decide what belongs in the new app.
Fifth: which functions need specific native work?
Before promising a timeline, list proprietary SDKs, connected devices, background tasks, video, maps, sensors and in-app purchases. A maintained React Native library may cover some needs. Others require a native module or make the move poor value. The quote should name these dependencies and include a technical proof for the riskiest ones.
Repository size is a weak shortcut. A hundred straightforward screens can be easier to rebuild than a small module talking to specialized hardware. The relevant measure is the complexity of behaviors that must survive, not a line-count threshold.
Inyka works with React Native and Expo. Expo projects can include native code when needed, but a new native capability requires an appropriate build. EAS updates must be compatible with the native code already installed. Our Expo versus bare React Native guide explains the trade-off without treating one setup as a universal answer.
Three migration routes
| Route | When to consider it | Main risk |
|---|---|---|
| Rebuild the mobile client | Focused scope with few special native modules | Regressions in established habits |
| Add React Native screens gradually | Large native app that must keep evolving | Technical coexistence to maintain |
| Launch a new app alongside it | Product and journeys both need major changes | Two live versions during transition |
React Native documents how to add screens to an existing native app. That makes gradual adoption possible, not effortless. It needs an architecture plan, tests and a release process for both parts.
Active users also affect the choice. A published app with subscriptions and stored data cannot be replaced like a prototype. Account continuity and regression monitoring matter, followed by a planned cutover or update. For an unreleased product with no active base, a complete rebuild may be simpler to manage.
What the quote must include
A migration is not an automatic conversion from Swift or Kotlin to TypeScript. The quote should list retained journeys, removed features, backend interfaces, native modules, device tests and the store release route. Add the period in which the current and new apps coexist.
The brief offers €20,000 to €80,000 excluding VAT as a discussion range for a mid-sized project. A simple app and a product with several specialist SDKs cannot have the same fixed price. Inyka's Scale package starts at €24,000 excluding VAT, with the final scope set after review. The mobile app cost guide helps read the quote's components.
Ask for a release condition too: which journeys must work, on which devices and with which data before old code can be retired? A date without those checks invites an early launch.
Mistakes that derail a native migration
Promising parity without an inventory. "Build the same app" misses less visible states: deep links, interrupted tasks, denied permissions and payment returns. List observable journeys and the expected result of each one.
Ignoring publication until the end. An app may work on a test phone and still fail store review or release signing. Check accounts, identifiers, certificates and privacy settings early.
Leaving native modules until late. A hardware SDK or background process may dictate a different architecture. Prototype the riskiest dependency before offering a fixed price for the whole move.
Using visual comparison as the only test. Two similar screens may calculate different entitlements or lose a draft. Acceptance checks should compare business outcomes and data states, not just pixels.
Retiring old code on the first release. Active users may stay on an earlier build. Decide which versions receive support, how updates are announced and when the old one can be retired based on observed adoption.
What Inyka declines in a native migration
- A fixed quote for a large, unread codebase without inspection and a technical proof. Native dependencies need to be known before price.
- A promise of identical performance on every device and every feature without measurement. Demanding journeys should be tested on the target phones.
- A line-by-line conversion from Swift or Kotlin. The new product should retain useful behavior rather than reproduce the old repository's structure.
- A pure native rebuild outside Inyka's React Native and Expo scope, or a product in its certified regulated exclusions.
Decision checklist before commissioning the move
The team can work through these checks in one scoping meeting if the people who know the app attend:
- iOS, Android and backend maintenance costs are separated.
- Delivery bottlenecks are shown through recent feature requests.
- Intentional platform differences are documented.
- Each feature proposed for removal has a decision owner.
- Every native SDK, sensor and background task has a technical owner.
- The current backend has an API contract and test environment.
- Existing purchases and subscriptions have a continuity plan.
- A reference build can be installed on actual target devices.
- Store accounts and app identifiers are controlled by the product owner.
- Exit criteria cover testing, data and support after publication.
If several answers are missing, commission a bounded audit first. Its report can compare keeping native, gradual adoption and a new app against the same functional scope. A framework's general popularity cannot substitute for this comparison. The decision document should also name the people who will maintain the old release while the replacement is built; otherwise the migration budget hides a second, ongoing project.
Keep a small set of reference journeys on the existing app before anyone rewrites them. Record their inputs, outputs, device behavior and the time a user needs to finish each task. Run the same journeys on the React Native build at agreed checkpoints. That gives the team a way to spot a slower checkout, a lost draft or a changed permission flow while there is still time to fix it. It also stops the acceptance meeting from turning into a debate about which interface looks more familiar.
Keep these observations with the acceptance record so the decision remains reviewable after the team changes.
The record should also say which differences are intentional. A platform-specific permission prompt may look different while delivering the same outcome. A missing saved draft is a regression. Writing that distinction before testing prevents both false alarms and real faults being dismissed as normal cross-platform variation.
FAQ
Will a React Native app be slower? It depends on the journey. Ordinary business interfaces can work well; highly specialized processing or demanding graphics need a proof on a device before commitment.
Can we keep our App Store listing? Yes, if the owner controls the listing and publishes a compatible update. Changing the implementation language alone does not require a new listing.
Do we have to rebuild the backend? No, if its APIs, data and rules support the new product. A mobile migration can start by stabilizing the contract with a backend that already works.
Can React Native coexist with Swift or Kotlin? Yes. This is a documented approach, although it adds integration and maintenance work during the transition.
When should we decline a migration? When native delivery is still fast, the main problem sits elsewhere or a specialist hardware module would make the new client disproportionate.
What about features nobody seems to use? Check usage and purpose before removing them. Rare actions such as account recovery can remain necessary even with few visits.
Can we release iOS before Android? Yes, if publication and data plans support two client versions for a time. Document feature availability and support for both platforms.
Who maintains the old app during the migration? Assign a person or team to production incidents. The transition budget includes that work even while new development happens elsewhere.
Decide from the existing product
If your native app consumes time without moving the roadmap, scope the decision with Inyka. Bring a build, the journey list, maintenance costs and native dependencies. Those are the inputs for a defensible decision.
Book a 30-minute discovery call to compare the current app with the available migration routes.
Frequently asked questions
- Will a React Native app be slower?
- It depends on the journey. Ordinary business interfaces can work well; highly speciali

About the author
Youssef AttiaYoussef Attia est le fondateur d'Inyka, studio spécialisé dans les applications mobiles React Native pour iOS et Android. Il accompagne les porteurs de projet du cadrage jusqu'à la publication sur les stores, avec un prix fixe annoncé avant signature.
Read next

Taking over an abandoned mobile app starts with an audit
Taking over a stalled mobile app requires an audit of source code, access, data and app store accounts. Use the findings to choose repair or a focused rebuild.
Read article
Moving off Bubble or FlutterFlow without losing users
A practical Bubble or FlutterFlow migration plan covering accounts, data, subscriptions, app stores and a staged move to React Native for active users.
Read article
Proprietary community app: leaving Facebook Groups
When a proper mobile app replaces Facebook Groups: thresholds, MVP scope, real 3-year cost comparison, and a workable member migration plan.
Read article