Skip to content
Apple Development Foundation
Esc
navigateopen⌘Jpreview
On this page

Testing

Combine swift-testing-verification, XcodeBuildMCP, and Maestro for Apple app verification.

Choose the smallest verification that proves the change. Never claim a check passed without running it.

Unit and focused verification — $swift-testing-verification

Path .agents/skills/swift-testing-verification/SKILL.md
Use after A meaningful Apple-platform code change
Do not use Planning-only work; before implementation exists

Prefer the smallest tests that prove the change; widen to package/API surfaces when public contracts move. Run via XcodeBuildMCP on the right simulator or macOS target. Report exact commands/outcomes and separate pre-existing failures from new ones.

End-to-end UI — $maestro-apple-app-testing

Path .agents/skills/maestro-apple-app-testing/SKILL.md
Use when Simulator flows, UI inspection, screenshots, flaky-flow diagnosis, regression coverage
Do not use for Non-testing product implementation; standalone unit tests

Pair with:

  • XcodeBuildMCP — build, install, boot, hierarchy
  • Maestro MCP — live inspect/debug
  • Maestro CLImaestro test regression

Hard rules distilled for agents (full detail on Maestro):

  • Check command -v maestro, version, list-devices before speculative flows
  • One exact simulator ID; no OS=latest
  • Classify flakes (app vs selector vs fixture vs env); reproduce once
  • Stable accessibility selectors; careful with system tab chrome identifiers

Practical session pattern

  1. session_show_defaults (XcodeBuildMCP); set defaults if needed
  2. Build/unit-test via MCP: prefer build_run_sim / test_sim; use the matching XcodeBuildMCP CLI only when active policy explicitly permits it
  3. For UI: install/launch on the pinned simulatorId, then run Maestro flows
  4. On failure: logs/hierarchy/screenshot/snapshot_ui → fix → re-run the smallest failing slice
  5. Report scheme, simulatorId, commands, pass/fail, residual risk

Skill maintenance tests (this repo)

./Scripts/verify-skills.sh
./Scripts/test-install-skills.sh   # if installer behavior changed

Was this page helpful?