Maestro alternative for iOS: Mobster vs Maestro
Maestro doesn't support physical iPhones yet. Mobster tests your iOS app on your iPhone and on simulators, with pass or fail from assertions, never a model.
Facts about Maestro read on , from the sources at the end.
Pick Mobster if you build iOS apps and want them checked on the iPhone on your desk as well as on simulators, by the coding agent that wrote the screen, with a verdict that no model decides.
We make Mobster, and every Maestro fact here comes from Maestro’s own README, docs and pricing page, listed under Sources.
| Feature | Mobster | Maestro |
|---|---|---|
| Your own iPhone | ✓ Over USB: the app already on your phone, its data never cleared | – Its README says physical iOS devices aren’t supported yet |
| Pass or fail decided by | ✓ Assertions on the accessibility tree, never a model | The flow’s assertions; assertWithAI asks an LLM (experimental) |
| A check is written as | ✓ Plain-English steps plus what must be true | YAML commands in a fixed order |
| Your coding agent | ✓ Drives the app over MCP while Mobster judges, against assertions fixed before it starts | maestro mcp, a local stdio server |
| Simulators | ✓ Mobster’s own, headless; the app reset before each run | Any iOS Simulator managed by Xcode |
| Runs on | ✓ An Apple silicon Mac with Xcode | Java 17 or later, plus Xcode for iOS |
| Price | ✓ CLI free (MIT); Mac app $34.99 one time | CLI free (Apache-2.0); Maestro Cloud $250 per device a month |
| Android and the web | – | ✓ |
Four reasons to pick Mobster
1. It checks your app on a real iPhone
Maestro’s README says physical iOS devices are not yet supported, so its iOS flows run on simulators. Mobster drives an iPhone over USB through WebDriverAgent, and mobster verify --device checks an app you already installed on it, without ever clearing its data. Mobster for Mac builds, signs and renews the runner for each phone, so the real-device setup is a guided screen in the app.
2. No model decides whether it passed
Maestro’s assertWithAI uploads a screenshot to an LLM with your assertion and takes back true or false; Maestro marks it experimental. A model may drive a Mobster run, but it never judges one: the verdict comes from assertions checked in code against the app’s accessibility tree, on one settled read of the screen. A check whose assertions already held before the steps ran ends needs_review, because it doesn’t prove the flow works. AI end-to-end tests for iOS goes through every rule.
When a check fails, it says what it found. Daybreak, the sample app, with its planted missing-plan bug (28 September 2026):
✗ failed The paywall shows three plans with Annual at $39.99 a year (18.2 s)
✓ text "Choose your plan"
✗ count id=/^plan_/ == 3: found 2: plan_weekly, plan_monthly
✗ value id=plan_annual == "$39.99 / year": not found; closest: "plan_monthly"
✓ visible label=Restore Purchases role=button
✓ no_text "Loading"3. Your coding agent proves the screen it wrote
Both tools have an MCP server. Mobster’s is built around a check the agent can’t move: verify_start takes what must be true before the agent touches the app, the agent drives with screen, tap, type_text and swipe, and verify_finish decides. A real key-less session on Daybreak’s onboarding (28 September 2026, the simulator already up):
verify_start 3.94 s Run 20260928-151841-816e is ready. Drive the app with the refs below, then call verify_finish.
tap 1.86 s Tapped “Continue”; the screen changed.
tap 2.13 s Tapped “Continue”; the screen changed.
alert 2.13 s Dismissed the alert "“Daybreak” Would Like to Send You Notifications …".
tap 4.13 s Tapped “Get started”; the screen changed.
verify_finish 3.07 s Verdict: passed Complete onboarding. Don't allow notifications. (24.1 s)The agent gets the verdict, the result JSON and an overlay frame that outlines each asserted element in green or red. Coding agents lists every tool.
4. Checks in plain English, and simulators you never manage
A Mobster check is the steps in plain English plus what must be true, in a YAML file you commit:
version: 1name: A new user sees three plans on the paywallapp: bundle: dev.mobster.daybreak path: .mobster/build/Build/Products/Debug-iphonesimulator/Daybreak.appsteps: - Complete onboarding as a new user. Don't allow notifications. - Reach the paywall.expect: - text: Choose your plan - count: { id: /^plan_/ } equals: 3 - value: { id: plan_annual } equals: $39.99 / yearAn agent performs the steps, so they survive a renamed button or a new screen in the middle, and the assertions keep the verdict exact. Any run becomes a check with --save, or with save_check from your agent. Mobster creates its own simulators, boots them headless, builds WebDriverAgent once per Xcode version and resets the app before each run, and it never touches the simulators you made.
When Maestro fits
If one suite has to cover Android and the web as well as iOS, or you want a hosted device cloud with CI built in, Maestro is made for that.
Try Mobster on your app
The CLI is free. Install it, prepare the simulator once, build your app for the simulator and run a launch-only check, which calls no model and needs no key:
curl -fsSL https://mobster.dev/install.sh | sh
mobster sim doctor --fix
xcodebuild -scheme <Scheme> -destination 'generic/platform=iOS Simulator' \
-derivedDataPath .mobster/build CODE_SIGNING_ALLOWED=NO build
mobster verify --app .mobster/build/Build/Products/Debug-iphonesimulator/<App>.app --text "Welcome"Replace "Welcome" with text your first screen shows. For your iPhone, Mobster for Mac sets up the phone for $34.99 one time.
Getting started with verify adds steps and saved checks, and Maestro vs XCUITest vs Mobster brings Apple’s own framework into the picture.
Questions
Does Maestro support real iPhones?
Not as of 8 October 2026. Its README says physical iOS devices are not yet supported, so iOS flows run on simulators, locally or on Maestro Cloud's hosted virtual devices. Mobster checks your app on a real iPhone over USB, with Developer Mode on, and on simulators it manages.
Do Maestro's AI assertions use a model?
Yes. assertWithAI uploads a screenshot to an LLM with your assertion and gets back true or false, and Maestro marks it experimental. Mobster's verdicts come from assertions on the accessibility tree, and no model is an input.
Can I use Maestro and Mobster on the same app?
Yes. Both test the simulator build of your app, and each keeps its own files: Maestro its YAML flows, Mobster its checks in .mobster/checks. Mobster runs on simulators it creates and names as its own, and leaves the others alone.
Sources
Every fact about the other tool comes from its own site, docs or repository, read on 8 October 2026. Reviewed by Andy Guo on . Corrections are welcome at the GitHub repo.
Maestro’s logo is a trademark of mobile.dev, shown only to name the product. Mobster isn’t affiliated with or endorsed by mobile.dev.
Related posts
6 min read
How to test an iOS app with an AI agent
Let a model drive your iOS app and never let it judge. Mobster decides pass or fail from accessibility tree assertions on one settled screen, with proof.
4 min read
Maestro vs XCUITest vs Mobster: when to use which
XCUITest, Maestro and Mobster all check iOS screens. If a coding agent writes yours, Mobster is built for it: plain-English checks, verdicts from assertions.