This site is available as Markdown for AI agents. For the full index, see llms.txt.
AI-native E2E testing · for iOS

Your agent tests your iOS app for you.

React Native or native Swift — the agent drives your iOS Simulator over MCP through the accessibility tree, records a clean .js scenario, and runs it end-to-end. You review and commit.

$ npx @unotest/mobile install <App>.app

macOS + Xcode required · works with Claude Code · Cursor · Codex · any backend stack

How it works

From .app to passing test in three steps

01

Point it at your .app

Install your built app on the Simulator. unotest auto-detects the bundle ID, URL scheme and required permissions from Info.plist.

02

Ask your agent in your editor

Open Claude Code in the project and ask for a test. The agent drives the Simulator over MCP, reading the live accessibility tree — not screenshots.

03

It records, runs, repairs

The agent emits a plain .js scenario, runs it through the sandboxed interpreter, and on failure pauses mid-run to patch and resume — no Simulator restart.

What you get

Built for agents, owned by you

An MCP server + CLI + sandboxed JS-DSL. The agent does the driving; the tests stay yours.

Sees the accessibility tree

WebDriverAgent returns a structured tree — roles, testIDs, text, bounds — rendered as a token-cheap outline. Works on RN/Expo and native Swift.

Pause-on-failure debugger

A failing step freezes the run. Call inspect_runtime, patch the scenario, resume from the same step. No full restart, no re-running setup.

Plain .js in your repo

Scenarios are ordinary JavaScript in unotest/e2e/*.js. Git, code review, CI — no proprietary format, no binary blob.

Safe to run blindly

The DSL runs in a vendored AST interpreter — no require, no fetch, no filesystem. AI-generated tests are safe to run.

React Native & native

Drives RN / Expo apps and plain Swift apps alike, as long as they expose accessibility.

Local-only

Everything runs on your Mac. Your .app never leaves the machine. No cloud, no account.

Requirements

macOS with Xcode + iOS Simulator · Node 20+ · first run compiles WebDriverAgent once (~5–15 min, then cached)

Frequently asked questions

What is unotest mobile?
AI-native end-to-end testing for iOS apps. The agent drives your iOS Simulator over MCP through the accessibility tree, records a clean JavaScript scenario, and runs it end-to-end. You review and commit.
Does it support React Native and native Swift?
Yes. It drives React Native / Expo apps and plain Swift apps alike, as long as they expose accessibility.
Does it use screenshots?
No. WebDriverAgent returns a structured accessibility tree — roles, testIDs, text and bounds — rendered as a token-cheap outline, not screenshots.
What are the requirements?
macOS with Xcode and the iOS Simulator, plus Node 20+. The first run compiles WebDriverAgent once (about 5–15 minutes), then caches it.
Does my app get uploaded anywhere?
No. Everything runs locally on your Mac and your .app never leaves the machine. There is no cloud and no account.

Let your agent test your iOS app

Point it at a built .app and ask for your first test. Runs locally on your Mac.

$ npx @unotest/mobile install <App>.app
Read the docs