Native to Cross-Platform App Development
A guide to migrating native iOS and Android apps to cross-platform frameworks (React Native, Flutter, Tauri).
Executive Summary
A consumer app maintained separate iOS (Swift) and Android (Kotlin) codebases—2x engineering cost and 4-week feature parity lag. Over 7 months, they migrated to React Native using a module-by-module approach, reducing development cost by 60% and eliminating platform feature lag. This guide covers module extraction, platform-specific code handling, and performance optimization.
Why Migrate from Native to Cross-Platform
The company maintained two codebases (iOS and Android), doubling engineering costs. Features took 4 weeks to reach parity across platforms, frustrating users.
- → 2x engineering cost ($1M/year for two teams)
- → 4-week feature parity lag (iOS always first, Android second)
- → Inconsistent UX across platforms
- → Harder to hire native mobile developers (scarce)
Cross-Platform Migration Readiness
The team spent 2 months preparing: evaluating frameworks (React Native vs Flutter), setting up hybrid architecture, and training iOS/Android developers on React Native.
- • Framework evaluation (React Native vs Flutter)
- • Hybrid app architecture (native + cross-platform together)
- • Cross-platform training for 10 mobile developers (4 weeks)
- • Module extraction plan (priority order)
- • CI/CD for both platforms
Native Apps Assessment
iOS app had 50K lines Swift, Android 50K Kotlin. The biggest differences were UI (SwiftUI vs Jetpack Compose) and platform-specific APIs (Face ID vs Fingerprint).
Technical Debt
- • Duplicated business logic (2x maintenance)
- • Inconsistent UI (navigation, gestures)
- • Platform-specific bugs (each platform different)
- • 4-week feature parity lag
Risks
- • Performance degradation (cross-platform vs native)
- • Platform-specific API gaps (camera, biometrics)
- • Developer resistance (learning new framework)
- • App size increase (RN adds 10MB)
Target Cross-Platform Architecture
The target was React Native with native modules for platform-specific APIs.
7-Month Native to Cross-Platform Migration
Step 1: Phase 1: Foundation (Month 1-2)
Set up hybrid app, React Native training, migrated settings screen (simple).
Step 2: Phase 2: UI Screens (Month 3-4)
Migrated 10 UI screens (80% UI of app).
Step 3: Phase 3: Business Logic (Month 5-6)
Migrated API clients, storage, and shared logic.
Step 4: Phase 4: Native Module Replacement (Month 7)
Replaced custom native modules with React Native libraries.
Local Data Migration
Both apps used SQLite for local storage. Migrated to WatermelonDB (cross-platform).
- • Schema compatibility (SQLite → WatermelonDB)
- • Data migration on first launch (detect old format)
- • Dual writes during transition period (both systems)
- • User data integrity (no loss during migration)
Common Native to Cross-Platform Mistakes
Expecting 100% code reuse
Impact: UI differences require platform-specific code (20% not reusable)
Prevention: Accept 80% reuse, plan for platform-specific overrides
Migrating complex UI first
Impact: 3-month delay, team frustrated
Prevention: Start with simple screens (settings, profile)
No performance testing on low-end devices
Impact: React Native slower on Android 8 (janky scrolling)
Prevention: Test on 5 year old device, optimize lists (FlatList)
Ignoring platform design patterns
Impact: iOS-looking app on Android (users dislike)
Prevention: Platform-specific UI overrides (navigation, gestures)
Migration Success Metrics
Who Should Lead Native to Cross-Platform Migration
Recommended Roles
Required Experience
- • Deep experience in iOS (Swift) and Android (Kotlin)
- • 2+ years React Native or Flutter
- • Native module development
- • Performance optimization on low-end devices
Related Roles
Frequently Asked Questions
- React Native vs Flutter—which is better?
- React Native for JavaScript ecosystem (easier hiring). Flutter for better performance and consistent UI. Evaluate with your team skills.
- Can we reuse existing UI code?
- No—UI must be rewritten in React Native/Flutter. Business logic (API, storage) can be reused.
- What about platform-specific features like Widgets?
- Build native modules for platform-specific features (iOS widgets, Android home screen widgets).