Skip to main content
Build your app in the cloud, start an iOS simulator or Android emulator, and control it from your own tools. No Revyl test or AI agent is required. Before you start, install the Revyl CLI and authenticate with revyl auth login. Sessions and remote builds use your organization’s cloud resources. Use test data and keep API keys and screenshots private.

1. Build remotely

From your app’s project directory, run revyl init once. Review the detected recipe and its Revyl app ID using the remote build setup, then run the command for your platform:
The build runs on Revyl’s cloud infrastructure, uploads the artifact, and sets it as the app’s current build by default. No local Xcode or Android SDK is needed. If more than one build profile matches, select one when prompted; for unattended CI, follow the remote build configuration guide. Already uploaded a build? Skip this step. iOS needs a simulator .app or zipped .app; Android needs a compatible .apk. For project setup, dependencies, and framework recipes, see Remote Builds and Framework Guides.

2. Start a device with your app

Use the matching app_id from your project’s .revyl/config.yaml:
Revyl selects a default device and installs the app’s latest build. The command prints the session ID and a live viewer link. Keep the session ID for the next steps; use the viewer to watch the device. For a repeatable CI run, select a specific uploaded version with --build-version-id instead of --app-id. A build version ID is different from a remote build job ID.

3. Control the device and capture evidence

Replace the placeholder with your session ID:
Inspect the screenshots to confirm the app opened and the home command changed the screen. Your harness owns the assertions; a saved screenshot alone does not prove a test passed. See the device command reference for taps, typing, app lifecycle, and other actions.

4. Stop the device

Always release the session your job created, including when a test fails. Do not stop every session in a shared organization.

Appium and Maestro

This quickstart uses Revyl’s native device commands. Connecting an unchanged Appium or Maestro suite still needs a framework connection layer; a viewer URL is not an automation endpoint. The Appium driver and Maestro runner implement attach-only native subsets over existing APIs and are available as private source repositories. Synthetic-app checks verified native lookup and gestures for Appium, and native actions, focused deletion, appearance, and deep links for Maestro on staging Android emulators and iOS simulators. Maestro’s input/paste uses the existing viewer control channel, with the input limitations documented separately; that integration has loopback coverage, not live-device verification. Duration-preserving swipe/scroll still requires undeployed worker capabilities and fails closed on current staging. Broader compatibility is not established. Get the Appium driver or Maestro driver for setup and runnable samples; repository access is required. The Maestro runner embeds the genuine Maestro runtime; it is not a plugin for stock maestro test. Neither integration enables standard UiAutomator2/XCUITest or full Maestro compatibility. See the remaining requirements.

Optional: a complete script for CI

The script below starts one device, opens Settings or an uploaded build, saves screenshots, and stops only that session on exit. It needs Bash and jq. It is a lifecycle smoke check, not an Appium or Maestro adapter.
Save the script as smoke.sh, then run bash smoke.sh ios or bash smoke.sh android. Add a platform-matching build version ID as the second argument to open your own app instead of Settings. The script sets a 600-second idle timeout as a fallback; an abrupt runner termination can still prevent its cleanup trap from running. Give CI jobs their own timeout, keep the returned session ID, and collect private screenshots even when a job fails. Review the images before treating them as visual proof.