---
title: "Move from React Native or Expo to Swift"
description: "Replace a cross-platform client with a native Apple app without losing the product."
---
Superapp does not translate JavaScript line by line. It uses the existing product, screens, and service contracts as a specification, then creates a native Swift and SwiftUI implementation.

## Separate the client from the product

-   Document navigation, screens, validation, and offline behavior.
-   List every Expo SDK feature and third-party native module.
-   Record API endpoints, request shapes, responses, and authentication behavior.
-   Identify local storage that must migrate and server data that can remain.
-   Map deep links, notifications, analytics events, and subscription entitlements.

## Replace abstractions intentionally

### Keep

Product rules, content, backend contracts, user accounts, remote data, brand assets, and subscription state when they are portable and correctly owned.

### Rebuild

React components, navigation, device modules, local persistence, permission handling, build configuration, and other client-side platform code.

### 1. Rebuild the core loop

Start with one complete flow in native SwiftUI and connect it to a development backend.

### 2. Replace native modules

Map each Expo or React Native dependency to an Apple framework or a maintained Swift package. Prefer direct Apple APIs for capabilities such as notifications, location, camera, HealthKit, widgets, and purchases.

### 3. Test migration behavior

Verify existing accounts, server records, subscription restoration, links, and push tokens. Test both fresh installs and upgrades where a released bundle is being replaced.

### 4. Retire the old client carefully

Keep the cross-platform codebase and release artifacts recoverable until the Swift app is stable in TestFlight and production.
