maestro-apple-app-testing
Skill2 starsChanged 2 months agoMITView on GitHub
Use when building, debugging, authoring, or journey-level testing an Apple app with Maestro, including iOS simulator flows, UI inspection, screenshots, flaky-flow diagnosis, and focused regression of the affected flow(s). Prefer the single edited or directly affected flow over tagged or full suites. Do not use for non-testing product implementation or standalone unit tests.
In this repository17 other files it gives its agents.
- AGENTS.mdAGENTS.md
- apple-accessibility-reviewSkill
- apple-app-marketing-siteSkill
- apple-design-systemSkill
- apple-development-foundationSkill
- apple-error-statesSkill
- apple-platform-plannerSkill
- apple-security-privacy-reviewSkill
- codex-bootstrapSkill
- codex-skill-maintainerSkill
- ios-macos-platform-adaptationSkill
- reusable-code-extractorSkill
- swift-concurrency-reviewSkill
- swift-package-module-authorSkill
- swift-testing-verificationSkill
- swiftui-component-authorSkill
- swiftui-tab-navigationSkill
The file
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 5 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 8
Use this as the main workflow for iOS app testing with Maestro.
- Distinctive: line 23
Do not run Maestro merely because code changed.
- Very specific: line 39
Check the toolchain with command -v maestro, maestro --version, and maestro list-devices.
- Very specific: line 47
Use Maestro MCP for live hierarchy inspection, screenshots, interaction, and debugging.
- Distinctive: line 54
Do not use arbitrary sleeps when a state assertion or wait can express the condition.
- Distinctive: line 55
When authoring or repairing a flow, cover its relevant happy path, validation and error states, loading/empty states, relaunch and …
- Distinctive: line 72
If a task requires Android or web coverage, adapt the workflow to the active platform and report platform-specific gaps rather than …
- Very specific: line 77
Run the single smallest relevant flow after each flow or journey change.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Maestro Apple app testing
Use this as the main workflow for iOS app testing with Maestro. Combine it with the project's XcodeBuildMCP and Apple-development skills; this skill owns the end-to-end testing loop, not product implementation.
Inputs and output
Inputs: the active Apple app workspace, its Xcode project or package, available
simulators/devices, existing .maestro/ flows, and the requested behavior or bug.
Output: repeatable Maestro flows or focused edits, executed test results, screenshots and debug artifacts when useful, and a concise report of coverage, failures, and remaining manual checks. Never claim a test passed without running it.
Scope Maestro to changed journeys
Do not run Maestro merely because code changed. Use it when a task edits a Maestro flow or changes user-visible UI, interaction, navigation, or journey behavior. For non-UI code, run Maestro only when the changed logic directly affects a known user journey; use focused unit, integration, or build verification for documentation, tooling, refactors, and logic outside a user journey.
Map the change to its existing flow(s) before testing. Run only the one edited or directly affected flow during normal work; if a shared change genuinely affects multiple journeys, run only those directly affected flows and state why. Do not run tagged suites or every flow as a routine final check. Run a complete suite only when the user explicitly requests it or an explicit release/CI policy requires it.
Workflow
- Inspect the active workspace, existing
.maestro/flows, app identifiers, accessibility identifiers, and available test fixtures. Reuse existing conventions. - Check the toolchain with
command -v maestro,maestro --version, andmaestro list-devices. If Maestro or its configured MCP server is unavailable, report the exact blocker before writing speculative flows. - For Swift/Xcode builds, runs, simulator management, and UI inspection, use the
available XcodeBuildMCP tools. Before the first build, run, or test action, call
session_show_defaultsand report the active project, scheme, configuration, and simulator. Resolve and reuse one exact simulator ID; do not useOS=latest. - Build and launch the app with the project's established XcodeBuildMCP workflow.
Use Maestro MCP for live hierarchy inspection, screenshots, interaction, and
debugging; use
maestro testfor repeatable YAML execution and CI-like coverage. - Author flows with stable
testID/accessibility selectors, explicit assertions, automatic waiting, conditional handling for permissions/onboarding, and reusable subflows. Inspect system-generated controls such as SwiftUI tab buttons before selecting them: an identifier inside.tabItemmay not propagate to the generated button, so use its confirmed accessibility label when no identifier is exposed. Do not use arbitrary sleeps when a state assertion or wait can express the condition. - When authoring or repairing a flow, cover its relevant happy path, validation and error states, loading/empty states, relaunch and persistence behavior, navigation/back behavior, permissions, keyboard/input, and accessibility-visible labels. Keep that coverage in the focused flow; do not expand to unrelated flows.
- On failure, preserve or request debug output, screenshots, hierarchy, and video when useful; classify the failure as app behavior, test selector/flow, fixture, simulator/device, build, or environment. Reproduce once before changing a flow.
- Finish by reporting exact commands, simulator/device ID, flows and tags run, pass/fail counts, artifact locations, and untested or manually verified areas.
Maestro MCP rules
The official Maestro CLI includes the MCP server. Prefer the configured local server
with maestro mcp for interactive debugging. Use MCP to inspect the current screen and
confirm selectors before editing a flow; use CLI flows for deterministic regression
coverage. Keep MCP and CLI pointed at the same simulator/device and app state.
If a task requires Android or web coverage, adapt the workflow to the active platform and report platform-specific gaps rather than assuming iOS selectors or behavior.
Verification contract
Run the single smallest relevant flow after each flow or journey change. Do not add a
tagged or complete-suite run unless the user explicitly requests it or a documented
release/CI gate requires it. Use --debug-output or equivalent artifacts for
failures. Do not modify production data or use real credentials; use fixtures, test
accounts, and environment variables supplied by the workspace.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

