ce-test-xcode
everyinc/compound-engineering-plugin
Build and test iOS apps on simulator with XcodeBuildMCP.
...Expand allAbout ce-test-xcode
Ce-test-xcode builds, installs, and tests iOS apps on the simulator using the XcodeBuildMCP server, capturing screenshots and logs and verifying app behavior. It takes an optional argument for a scheme name, or "current" to use the default or last-used scheme. Prerequisites include Xcode with command-line tools, a connected XcodeBuildMCP MCP server, a valid Xcode project or workspace, and at least one available iOS Simulator. Model invocation is disabled, so it runs as an explicit command.
The workflow first verifies XcodeBuildMCP is connected by calling its list_simulators tool, and stops with installation guidance if it is not. It then discovers projects and schemes (discover_projs, list_schemes), boots a preferred simulator such as iPhone 15 Pro by UUID, and builds the app with build_ios_sim_app, reporting specific errors on failure. On success it installs and launches the app (install_app_on_simulator, launch_app_on_simulator) and begins log capture. For each key screen it takes a descriptive screenshot, reviews rendering and content, and checks logs for crashes, exceptions, error-level messages, and failed network requests.
The skill documents a known platform limitation: simulated taps cannot trigger gesture recognizers on SwiftUI Text views with inline AttributedString links, so it prompts for a manual tap or offers xcrun simctl openurl as a fallback. It pauses for human verification on flows that require device interaction, including Sign in with Apple, push notifications, in-app purchases, camera and photos, and location, using the platform's blocking question tool such as AskUserQuestion. On test failure it documents the error with a screenshot and logs and asks whether to fix now or skip. It closes with a structured test summary table and a cleanup step that stops log capture and optionally shuts down the simulator. It also integrates with the ce-code-review workflow, which can spawn an agent to run this skill on PRs touching iOS code.
FAQ
What MCP server does this skill require?
It requires the XcodeBuildMCP MCP server to be connected. The workflow confirms availability by calling its list_simulators tool and will not proceed until XcodeBuildMCP is working, providing Homebrew and npx install instructions if it is missing.
How do I choose which scheme to test?
Pass the scheme name as the argument, or pass "current" to use the default or last-used scheme. The skill discovers projects and schemes with discover_projs and list_schemes and uses the provided argument if one is given.
Why don't taps on SwiftUI text links work in the simulator?
Simulated taps do not trigger gesture recognizers on SwiftUI Text views with inline AttributedString links because those links are not exposed as separate elements in the accessibility tree. The skill prompts you to tap manually, and can use xcrun simctl openurl to open a known target URL directly as a fallback.
When does it pause for human input?
It pauses for flows that require real device interaction, such as Sign in with Apple, push notifications, in-app purchases, camera and photos, and location, asking via the platform's blocking question tool and never silently skipping the verification.
What does it do after a test fails?
It documents the failure with a screenshot of the error state, captured console logs, and reproduction notes, then asks whether to fix now (debug, propose a fix, rebuild, and retest) or skip and continue testing other screens.
Build and exercise an iOS app on a simulator, preserving screenshots, logs, human-verification results, and failures as evidence for the user.
Done:
- A completed run reports overall
PASS,FAIL, orPARTIALplus project, scheme, simulator, build result, per-surfacePASS/FAIL/SKIP, console errors, human checks, and residual failures. - Per-surface status is derived from evidence, not the user's routing choice.
PASSrequires completed passing evidence.FAILrecords observed failing evidence until a completed retest replaces it.SKIPmeans the check has no completed outcome. - The overall result is
FAILwhile any failure remains,PARTIALwhen no failure remains but a scoped check is skipped, and otherwisePASS. - Any failure before the launched-with-log-capture handoff stops later stages and reports an actionable setup blocker with its evidence.
Boundaries: this skill tests and reports. Diagnosis and any user-approved product fix belong to ce-debug, invoked with authority narrowed to return here without committing, pushing, or opening a PR. Keep simulator interaction within the app and flows the user placed in scope.
Run
- Prepare and launch. Read
references/setup-and-build.md. It owns the XcodeBuildMCP availability gate, project and scheme discovery, simulator choice, build, install, launch, and log-capture start. - Exercise and report. After launch, read
references/test-and-report.md. It owns per-screen evidence, human-only flows, the SwiftUI inline-link automation limitation, failure routing, cleanup, and the fixed summary fields.
Do not replace either required read with remembered tool names. XcodeBuildMCP adapters differ by host, while their observable success conditions do not.
Install ce-test-xcode
Download and extract the skill files to your .claude/skills/ directory.
Download ZIPClone the repository and copy the skill files to your project.
git clone https://github.com/EveryInc/compound-engineering-plugin/blob/main/skills/ce-test-xcode/SKILL.md # Copy SKILL.md to your .claude/skills/ directory
Copy





Home
