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

Three requirements:
  1. Upload one installable .apk artifact. .aab, .apks, APK Set archives, and split APK archives are not supported.
  2. Native libraries must include a supported 64-bit ABI. Revyl accepts x86_64 and arm64-v8a. APKs without native libraries are also supported.
  3. APK must be debuggable (android:debuggable="true" in the merged manifest).

Why a supported 64-bit ABI

Cloud emulators run x86_64 Android images with Android’s NDK translation layer enabled for arm64-v8a native code. APKs with either 64-bit ABI can run; APKs whose native libraries are only x86 or armeabi-v7a cannot. Default debug builds from every framework usually include a compatible ABI, so this mainly matters 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, include x86_64 or arm64-v8a, or produce a separate Revyl-targeted APK variant with at least one of them. Do not upload .apks files or ZIPs containing multiple split APKs; Revyl does not install APK sets.

Artifact size

Build artifacts may be up to 5 GiB. Revyl enforces this limit from the bytes it receives or reads from storage, regardless of any size reported by the upload client or source server. Validation uses a bounded 8 GiB temporary workspace for the artifact and any files extracted or repackaged from it. A compressed archive below 5 GiB can still be rejected if processing it would exceed that workspace.

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.
Include x86_64 or arm64-v8a, or produce a separate Revyl-targeted variant with at least one of them. You do not need both ABIs in the same APK.

Framework Build Guides

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

Apps & Builds

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