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 CLI —
maestro testregression
Hard rules distilled for agents (full detail on Maestro):
- Check
command -v maestro, version,list-devicesbefore 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
session_show_defaults(XcodeBuildMCP); set defaults if needed- Build/unit-test via MCP: prefer
build_run_sim/test_sim; use the matching XcodeBuildMCP CLI only when active policy explicitly permits it - For UI: install/launch on the pinned
simulatorId, then run Maestro flows - On failure: logs/hierarchy/
screenshot/snapshot_ui→ fix → re-run the smallest failing slice - 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