# unotest mobile — AI-native E2E testing for iOS apps

> For the full site index, see [llms.txt](/llms.txt)

unotest mobile is AI-native end-to-end testing for iOS apps — 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.

Install: `npx @unotest/mobile install <App>.app` — package `@unotest/mobile`.

## How it works

1. **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.
2. **Ask your agent in your editor.** The agent drives the Simulator over MCP,
   reading the live accessibility tree — not screenshots.
3. **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

- **Sees the accessibility tree.** WebDriverAgent returns a structured tree —
  roles, testIDs, text, bounds — as a token-cheap outline. Works on RN/Expo and
  native Swift.
- **Pause-on-failure debugger.** A failing step freezes the run; inspect
  runtime, patch the scenario, resume from the same step.
- **Plain `.js` in your repo.** Ordinary JavaScript in `unotest/e2e/*.js`.
- **Safe to run blindly.** Sandboxed AST interpreter — no `require`, `fetch`
  or filesystem.
- **React Native & native.** Drives RN / Expo and plain Swift apps alike.
- **Local-only.** Everything runs on your Mac; your `.app` never leaves it.

## Requirements

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

## Works with

Claude Code, Cursor, Codex.

## Documentation

https://docs.unotest.com
