Autosana runs your mobile apps on both our virtual device cloud (iOS Simulators and Android Emulators) and real devices in the cloud. The build you upload decides where it can run:
Architecture: a universal APK/AAB (recommended) runs on both emulators and real devices. An x86_64-only APK runs on emulators but not real devices.
Most build commands create universal APKs that include all architectures by default, so the same Android build works on both emulators and real devices — no separate build needed.
Select your framework to see build instructions:
React Native
Flutter
Native iOS
Native Android
Important: React Native apps must be built in Release mode. Debug builds will attempt to connect to Metro bundler and fail to run on the device. Release builds bundle the JavaScript code directly into the app, making them standalone.
Drag or upload the .zip file into the Autosana app upload dialog
Why Release configuration? Release builds provide production parity with optimizations enabled, matching what your users experience. Simulator builds don’t require code signing, so Release configuration works without additional setup. While Debug builds will work, they’re not recommended for testing as they don’t reflect the production environment.
Release builds provide better production parity but require signing configuration.Step 1: Configure Signing (if not already set up)Add this to your app/build.gradle:
android { buildTypes { release { // Use debug keystore for testing (not for Play Store) signingConfig signingConfigs.debug minifyEnabled false } }}
This uses the debug keystore for convenience. For Play Store releases, you’ll need a proper release keystore.
Step 2: Build the Release APKUsing Terminal:
cd /path/to/your/android/project./gradlew assembleRelease
To run on real iPhones instead of the simulator, upload an .ipa built for physical hardware (iphoneos) — not a zipped .app. The file extension is how we route the build: .ipa → real device, .app / .zip → simulator.
Signing matters. Use a Development or Ad Hoc signed .ipa. You do not need to register our device UDIDs — builds are automatically re-signed for the test device. Enterprise-signed builds fail to launch on our devices, and App Store builds aren’t supported. Re-signing strips some entitlements (e.g. Push Notifications, Apple Pay, App Groups), so features depending on them won’t work during tests.
Android needs no separate build — a universal .apk / .aab already runs on both emulators and real devices.
React Native (Expo)
Flutter
Native iOS / bare React Native
Use an EAS profile with internal distribution — note there is nosimulator: true:
The .ipa lands in ./build/ipa/. Upload it to Autosana.
After uploading your .ipa, start a run with Target: Real device (or physical_device: true via the API). See Real Device Testing for how to run and pick a device.