Supported platforms
Semaloop runs on iOS across real devices and simulators. Our real device coverage spans iOS 18 through to the latest versions (including iOS 27), and from iPhone 14 to the latest models. We manage all of our own physical device infrastructure, which means we have full control over the data we can give back to you after a test run.
You can’t choose which iPhone model or iOS version a test runs on: each run goes to the next free device that can install your build, and the run shows which device and iOS version it used. Devices use the default text size and accessibility settings. To test with different ones, such as a larger text size, ask for it in the test and the agent changes it in Settings.
Between runs
Section titled “Between runs”Your app is installed fresh at the start of every run, so a test doesn’t need to ask for a fresh install, and it’s removed when the run ends. We then reset the device to a clean state, including any files saved to On My iPhone, so nothing a run leaves behind reaches the next one. The device’s built-in accounts stay signed in, so your app may see a returning user when a test signs in with them.
Android
Section titled “Android”Semaloop runs Android tests on emulators, on Android 15. A fresh emulator is created for every run and thrown away afterwards, so no state carries over between runs. Builds come to us as an APK pushed from your CI, rather than through the Play Console — see connecting your app.
Tests are written the same way on both platforms, and each build gets a run of every active test. What differs is what the agent can do on the device and what comes back with the result. Android real-device coverage is in progress, and the tables below will change as it lands.
What Android emulator testing catches, and what it does not
Section titled “What Android emulator testing catches, and what it does not”Emulators are a good fit for checking that your flows and logic work, and a poor fit for anything that depends on physical hardware.
What it catches
- Broken flows and logic, such as sign-in, onboarding and checkout, judged against the outcome you described.
- Regressions after UI changes, because the agent works from what is on screen.
- Behaviour under poor connectivity, including slow networks and airplane mode.
- Crashes, force-quit and resume, deeplinks, language and region changes, GPS location and voice input.
- Sign-up and verification flows, using the built-in email inbox, magic links and Google accounts.
- The evidence to fix a failure: video, system logs, network traffic and a trace of every step.
What it does not catch
- Hardware-dependent features: the camera and push notifications don’t work on Android emulators.
- In-app purchases, because sandbox accounts aren’t supported on Android yet.
- Phone numbers and SMS codes, which need a real iPhone today.
- How your app behaves and performs on a physical handset, including manufacturer-specific behaviour.
- Any Android version other than Android 15.
- Anything that relies on the full Google Play Services. Our emulators use microG, an open-source replacement, so features such as Google Maps can behave differently from a physical handset.
- Sound your app plays. Audio input is recorded, but a test can’t check what the app said back.
Android real-device coverage is in progress, and this page will change when it lands.
What works where
Section titled “What works where”Getting builds in
Section titled “Getting builds in”| iOS real devices | iOS simulators | Android emulators | |
|---|---|---|---|
| TestFlight | Yes | No | — |
| Upload through the API, CLI or GitHub Action | .ipa, signed with our device IDs | .app | Standalone .apk |
What comes back with each run
Section titled “What comes back with each run”| iOS real devices | iOS simulators | Android emulators | |
|---|---|---|---|
| Video | Yes | Yes | Yes |
| System logs | Yes | Yes | Yes |
| Network traffic | Yes | Yes | Yes |
| Audio capture | Yes | No | Input only |
Built-in accounts
Section titled “Built-in accounts”| iOS real devices | iOS simulators | Android emulators | |
|---|---|---|---|
| Email inbox and magic links | Yes | Yes | Yes |
| Google account | Yes | Yes | Yes |
| Apple ID | Yes | Yes | No |
| Phone number and SMS codes | Yes | No | No |
Agent capabilities
Section titled “Agent capabilities”| iOS real devices | iOS simulators | Android emulators | |
|---|---|---|---|
| Tapping, typing and gestures | Yes | Yes | Yes |
| Signing in with a saved password | Yes | Yes | Yes |
| Deeplinks | Yes | Yes | Yes |
| Force-quitting and resuming, crashing the app | Yes | Yes | Yes |
| Language and region | Yes | Yes | Yes |
| The clipboard | Yes | Yes | Yes |
| Locking and unlocking | Yes | Yes | Yes |
| Reading device state | Yes | Yes | Yes |
| GPS location | Yes | Yes | Yes |
| External files | Yes | Yes | Yes |
| Network conditions | Yes | No | Yes |
| Airplane mode | Yes | No | Yes |
| Health data | Yes | Yes | No |
| Voice input | Yes | No | Yes |
| Biometrics | No | Yes | No |
| Sandbox in-app purchases | Yes | No | No |
| Push notifications | Yes | No | No |
| Camera | Yes | No | No |
A test that needs a phone number can’t run on an Android emulator, so keep those tests on your iOS app.
Audio on Android emulators covers what the agent says into the microphone: the spoken audio is recorded and played back alongside the video. Sound your app plays isn’t captured, so a test can’t check what the app said back.