.app (iOS), upload it to a
channel/tag, and run momentic-mobile against it. Both EAS Build and
expo prebuild with local toolchains work.
Produce a testable build
- Android (APK)
- iOS (simulator .app)
Option A: EAS (recommended if you already use it)A
preview profile with "buildType": "apk" (or "distribution": "internal")
in eas.json produces an installable .apk. Without --local, the build runs
in EAS cloud and you download the artifact URL.Option B: prebuild + Gradle (no EAS account)Upload and run
Remote emulators and simulators install the app from an uploaded asset. Add the CLI as a dev dependency so the lockfile pins the version in CI:smoke.test.yaml
defaultChannel/defaultTag on the test pick the uploaded asset. In the
editor, the same selection appears as the Channel/Tag pickers next to
the Region dropdown; choose any Momentic region for a remote instance.
Expo-specific pitfalls
- Expo Go is not testable. Momentic installs your standalone build, not Expo
Go. You need a
prebuildor EAS artifact, and over-the-air JS updates do not reach the installed binary: rebuild when the JS surface changes (new screens, new native modules). - Dev-client builds work. An
expo-dev-clientbuild is a normal APK; test it the same way. Point it at a reachable Metro/dev server or a published update channel. - Deep links and app links resolve through the installed app id; use an
appiumstep (mobile: deepLink) to open them. expo-routerheaders and safe areas appear as native elements to Momentic: describe them as the user sees them (“the back chevron”, “the Settings tab”) rather than by testID.- WebView content on Android needs
WebView.setWebContentsDebuggingEnabled(true); add it inMainApplicationor a small config plugin if your app renders web content.
In CI
Run an EAS build, upload the artifact to a channel, then run your suite against that same upload. A complete GitHub Actions workflow:.github/workflows/mobile.yml
--channel dev --tag ${{ github.sha }} selects the asset this job just
uploaded; without it, tests fall back to their defaultChannel/defaultTag and
can pick up a stale build.