Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.revyl.com/llms.txt

Use this file to discover all available pages before exploring further.

Revyl runs tests on cloud simulators (iOS) and emulators (Android), not physical devices. That single fact drives every requirement below.

iOS

RequiredRecommended
Simulator-slice .app (or zipped .app). Built against the iphonesimulator SDK, not iphoneos.Debug configuration.

Why

Cloud simulators run a different CPU slice than physical iPhones. An .ipa produced for device distribution will not install on a simulator — simctl install rejects it with an arch mismatch. You need the .app bundle that Xcode/EAS produces when targeting the simulator.

How to satisfy it

FrameworkKnob
Xcode / Swiftxcodebuild -sdk iphonesimulator -configuration Debug
Expo (EAS)ios.simulator: true on your build profile in eas.json
React Native (bare)xcodebuild -sdk iphonesimulator (Pods + workspace)
Flutterflutter build ios --simulator --debug
.ipa archives are not supported. If your CI produces an .ipa, you’ll need a parallel simulator-slice job to upload to Revyl.

Android

Two requirements:
  1. APK must include x86_64 in its ABI set. Revyl’s cloud emulators are x86_64; arm64-v8a-only APKs won’t install.
  2. APK must be debuggable (android:debuggable="true" in the merged manifest).

Why x86_64

Cloud emulators run a Google Play x86_64 system image. Install fails immediately if the APK has no x86_64 native libs. Default debug builds from every framework include all ABIs in one fat APK, so this only bites if you’ve narrowed abiFilters or android.ndkAbiFilters.

Why debuggable

Debuggable builds (android:debuggable="true" in the merged manifest) are what allow Revyl to walk the app sandbox via run-as <pkg> — the platform only permits that against debuggable apps on non-rooted (Play-image) emulators. That sandbox access powers the State tab: SharedPreferences, Jetpack DataStore, and your app’s SQLite databases. It also keeps a number of test-execution paths fast and reliable. The runtime will install a non-debuggable release APK — tests still execute, video records, logs flow. You lose the State tab, and a class of debugging-dependent features. Don’t ship a release APK to Revyl by default; produce a debuggable variant for testing alongside whatever you ship to users.

How to satisfy it

FrameworkKnob
Gradle / Kotlin / Java./gradlew assembleDebug — debuggable + all ABIs by default
React Native (bare)cd android && ./gradlew assembleDebug
Flutterflutter build apk --debug
Expo (EAS)The development profile (developmentClient: true, android.buildType: "apk") is debuggable and ships all ABIs
Custom abiFilters is the most common reason a build fails to install on Revyl. If you’ve narrowed the ABI set for size reasons, keep x86_64 in it or produce a separate Revyl-targeted variant. The full ABI set is only ~10–20 MB larger.

FAQ

No. .ipa won’t install on simulators. Release APKs install but lose the State tab and other debugging-dependent paths. Use a debug build for Revyl.
Cloud test infra runs on shared hosts. Simulators (iOS) and emulators (Android) give us isolation and snapshot-restore. Physical-device farms exist but aren’t what Revyl is.
Xcode produces a fat simulator .app (x86_64 + arm64) by default. Both slices are accepted; Revyl picks the right one at install time.
Add a parallel debug job for Revyl. Most Gradle / Xcode / EAS projects need only a single extra task or profile.
Add x86_64 to the filter set, or produce a separate Revyl-targeted variant that includes it. The full ABI set is only ~10–20 MB larger.

Framework Build Guides

Platform-specific build commands for Xcode, Gradle, RN, Flutter, Expo.

Apps & Builds

Upload, activate, and manage builds in your Revyl app.