iOS
Standalone App Clips carrying
NSAppClip are supported as iOS builds. Upload
the simulator-built Clip’s .app bundle or its ZIP archive to register the
Clip’s bundle identifier for test runs. If an archive includes a host app and
its embedded Clip, Revyl selects the host; upload the Clip separately to test it.
CLI file and URL uploads also accept gzip-compressed tar archives named .gz,
.tar.gz, or .tgz, including EAS artifacts that contain ZIP data despite those
suffixes. URL ingestion additionally accepts uncompressed .tar archives.
These archives must contain a supported .app bundle; arbitrary gzip-compressed
files are not supported.
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.
Revyl’s iOS simulators run on Apple silicon, so the app’s executable must include arm64 simulator code. An x86_64-only simulator build is rejected at install. To check a build, run lipo -archs YourApp.app/YourApp; the output must include arm64.
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:- Upload one installable
.apkartifact..aab,.apks, APK Set archives, and split APK archives are not supported. - Native libraries must include a supported 64-bit ABI. Revyl accepts
x86_64andarm64-v8a. APKs without native libraries are also supported. - APK must be debuggable (
android:debuggable="true"in the merged manifest).
Why a supported 64-bit ABI
Cloud emulators runx86_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. The CLI also limits each local conversion to 8 GiB of temporary files and 8 GiB of uncompressed data during repacking. These limits apply separately to each CLI process. See upload existing builds for local conversion behavior.FAQ
Can I use a physical-device archive (.ipa / non-debuggable release APK)?
Can I use a physical-device archive (.ipa / non-debuggable release APK)?
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.Why does Revyl insist on a simulator slice / supported Android ABI?
Why does Revyl insist on a simulator slice / supported Android ABI?
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.
Does my simulator build need arm64?
Does my simulator build need arm64?
Yes. Revyl’s iOS simulators run
arm64, so the build must include an
arm64 simulator slice; an extra x86_64 slice is fine. Builds that
contain only x86_64 are usually caused by
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64 in the project or a
dependency, or by building on an Intel Mac. Remove that exclusion and
rebuild for the iOS Simulator on an Apple silicon Mac or runner.My CI only produces release/production builds. What now?
My CI only produces release/production builds. What now?
Add a parallel debug job for Revyl. Most Gradle / Xcode / EAS projects
need only a single extra task or profile.
My build uses abiFilters for size reasons.
My build uses abiFilters for size reasons.
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.Related
Framework Build Guides
Platform-specific build commands for Xcode, Gradle, RN, Flutter, Expo.
Apps & Builds
Upload, activate, and manage builds in your Revyl app.