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

iOS

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

.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. Upload one installable .apk artifact. .aab, .apks, APK Set archives, and split APK archives are not supported.
  2. APK must include x86_64 in its ABI set. Revyl’s cloud emulators are x86_64; arm64-v8a-only APKs won’t install.
  3. 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

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 APK variant. The full ABI set is only ~10–20 MB larger. Do not upload .apks files or ZIPs containing multiple split APKs; Revyl does not install APK sets.

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.