> ## Documentation Index
> Fetch the complete documentation index at: https://momentic.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Cross-platform frameworks

> Test React Native, Expo, Flutter, and other cross-platform apps with Momentic by building native iOS and Android artifacts.

Momentic tests run against the **native build** of your app, not your source
framework. It drives the rendered iOS and Android UI through the accessibility
layer, so any framework that produces a native iOS `.app` and an Android `.apk`
works: React Native, Expo, Flutter, NativeScript, Capacitor, and others. There
is no React-Native-specific or Flutter-specific setup; you build the same
artifacts a store release would use, then follow the [iOS](/quickstart/ios) and
[Android](/quickstart/android) quickstarts.

<Info>
  A cross-platform app is two targets to Momentic: an **iOS** app and an
  **Android** app. Set each up once with the platform quickstart, then write
  tests against either. Tests authored against the rendered UI are usually
  portable across both.
</Info>

## What Momentic needs

| Platform | Artifact                                                  | Used by                     |
| -------- | --------------------------------------------------------- | --------------------------- |
| iOS      | A **Simulator** `.app` bundle (not a device/`.ipa` build) | Local and remote simulators |
| Android  | An `.apk`                                                 | Local and remote emulators  |

The artifact format is the only requirement. How you produce it depends on your
framework below. For packaging details and signing notes, see
[iOS app setup](/platforms/ios/app-setup) and
[Android app setup](/platforms/android/app-setup).

## React Native

React Native projects contain standard native `ios/` and `android/` projects, so
you build them the same way as any native app.

* **iOS**: open `ios/<YourApp>.xcworkspace` in Xcode and use **Product**, then
  **Build For**, then **Testing** to produce a Simulator `.app`. See
  [iOS app setup](/platforms/ios/app-setup).
* **Android**: build an APK from the `android/` project:

  ```bash theme={null}
  cd android && ./gradlew assembleRelease
  # APK is written to android/app/build/outputs/apk/release/
  ```

## Expo

Expo apps need the native projects generated before you can build them.

* Generate the native projects with
  [prebuild](https://docs.expo.dev/workflow/prebuild/):

  ```bash theme={null}
  npx expo prebuild
  ```

  Then build with Xcode / Gradle exactly as in the [React Native](#react-native)
  section.

* Or build with [EAS Build](https://docs.expo.dev/build/setup/). Use a build
  profile that targets the iOS **Simulator** so you get a `.app` (a device build
  produces an `.ipa`, which simulators can't install):

  ```bash theme={null}
  eas build --platform android --profile preview --local   # .apk
  eas build --platform ios --profile preview --local       # iOS Simulator .app
  ```

## Flutter

Flutter builds the native artifacts directly:

```bash theme={null}
flutter build ios --simulator   # iOS Simulator .app (build/ios/iphonesimulator/)
flutter build apk               # Android .apk (build/app/outputs/flutter-apk/)
```

## Other frameworks

Any toolchain that emits an iOS Simulator `.app` and an Android `.apk` works the
same way: point Momentic at the artifact. If your framework only documents
device (`.ipa`) builds, produce a Simulator build instead, or reach out to the
Momentic team.

## Next steps

<CardGroup cols={2}>
  <Card title="iOS quickstart" icon="apple" href="/quickstart/ios">
    Upload your `.app`, run your first iOS test
  </Card>

  <Card title="Android quickstart" icon="android" href="/quickstart/android">
    Upload your `.apk`, run your first Android test
  </Card>
</CardGroup>
