Summary
Our React Native (Expo SDK 54) Android app consistently gets stuck on the native splash screen when running on Maestro Cloud. The JavaScript runtime never initializes. The same APK works correctly on Firebase Test Lab and real user devices.
Environment
- App: React Native 0.81.5, Expo SDK 54, Hermes engine
- APK: EAS Build (internal distribution, APK format)
- Maestro Cloud: via
mobile-dev-inc/action-maestro-cloud@v2
- Android API levels tested: 33, 34
- Device model: pixel_6 (default)
Reproduction
Every test run fails with the same error on the extendedWaitUntil step:
Assertion is false: id: logo-app is visible
The app displays only the native splash screen (black background + logo) for the entire test duration (~90s) and never transitions to the React Native JS UI.
Test flow (debugLaunch.yaml)
appId: com.doctomatic.app
---
- launchApp:
clearState: true
- takeScreenshot: 01_after_launch
- scroll
- takeScreenshot: 02_after_scroll
- pressKey: Home
- launchApp:
clearState: false
- takeScreenshot: 03_after_relaunch
- extendedWaitUntil:
visible:
id: "logo-app"
timeout: 60000
- takeScreenshot: 04_logo_visible
Evidence that JS never loads
We instrumented the app with three independent diagnostic channels:
| Channel |
Result |
| HTTP pings (webhook.site POST at module-level JS) |
0 requests received |
Sentry (error tracking, Sentry.init() runs at module level) |
0 events from test builds |
| On-screen debug overlay (React state-driven text) |
Not visible in screenshots |
All three are JS-level and none received any data, confirming the React Native bridge / Hermes engine never starts.
Same APK works elsewhere
- Firebase Test Lab (Robo test): ✅ App launches, navigates, interacts normally
- Real devices (production users on same APK version): ✅ Sentry receives events from 50+ devices
Failed test runs (Maestro Cloud)
| Run ID |
Date |
API Level |
APK |
| GH Actions #23491261535 |
2026-03-24 13:13 UTC |
34 |
9nagtYVkrdDM2PbPMhCZ7k.apk |
| GH Actions #23489324428 |
2026-03-24 12:26 UTC |
33 |
hpTagrqKyikurMDUpcrcra.apk |
| GH Actions #23485239253 |
2026-03-24 10:39 UTC |
33 |
wyFHRY397wew6KtfQNY9of.apk |
| GH Actions #23439257293 |
2026-03-23 13:17 UTC |
33 |
(staging build) |
What we've tried
- Increased
extendedWaitUntil timeout to 90s
- Added
launchApp: permissions: { all: allow }
- Disabled version-check modal (
SKIP_VERSION_CHECK=true)
- Explicitly called
SplashScreen.hideAsync() at module level
- Downgraded from Expo SDK 55 to SDK 54
- Tried API level 33 and 34
- Added HTTP pings + Sentry + on-screen overlay for diagnostics
None of these resolved the issue.
Expected behavior
The app should load past the native splash screen within ~5-10 seconds (as it does on Firebase Test Lab and real devices), displaying the login screen with a testID="logo-app" element.
Questions
- Are there known issues with Expo/React Native apps on the Maestro Cloud emulator infrastructure?
- Does the Maestro Cloud emulator include Google Play Services? (Our app uses Expo push notifications which depend on FCM)
- Is there any way to get logcat/adb output from the Maestro Cloud device to see native-level crash logs?
- Can we select a different device model or emulator image?
Thank you for your help!
Summary
Our React Native (Expo SDK 54) Android app consistently gets stuck on the native splash screen when running on Maestro Cloud. The JavaScript runtime never initializes. The same APK works correctly on Firebase Test Lab and real user devices.
Environment
mobile-dev-inc/action-maestro-cloud@v2Reproduction
Every test run fails with the same error on the
extendedWaitUntilstep:The app displays only the native splash screen (black background + logo) for the entire test duration (~90s) and never transitions to the React Native JS UI.
Test flow (
debugLaunch.yaml)Evidence that JS never loads
We instrumented the app with three independent diagnostic channels:
Sentry.init()runs at module level)All three are JS-level and none received any data, confirming the React Native bridge / Hermes engine never starts.
Same APK works elsewhere
Failed test runs (Maestro Cloud)
9nagtYVkrdDM2PbPMhCZ7k.apkhpTagrqKyikurMDUpcrcra.apkwyFHRY397wew6KtfQNY9of.apkWhat we've tried
extendedWaitUntiltimeout to 90slaunchApp: permissions: { all: allow }SKIP_VERSION_CHECK=true)SplashScreen.hideAsync()at module levelNone of these resolved the issue.
Expected behavior
The app should load past the native splash screen within ~5-10 seconds (as it does on Firebase Test Lab and real devices), displaying the login screen with a
testID="logo-app"element.Questions
Thank you for your help!