ce-test-xcode
everyinc/compound-engineering-plugin
Build, install, and test iOS apps on simulator with XcodeBuildMCP integration.
What is ce-test-xcode?
Automates iOS app testing on the simulator by building projects, launching apps, capturing screenshots and logs, and verifying behavior across key screens. Use this when you need to validate iOS app functionality, check UI rendering, detect crashes, or test specific user flows on a simulated device.
- Discovers Xcode projects and schemes, then builds apps for iOS Simulator
- Boots and manages iOS Simulator instances with automatic readiness checks
- Installs built apps and launches them with bundle ID targeting
- Captures screenshots and console logs to verify UI rendering and detect errors
- Tests multiple screens sequentially with screenshot review and log analysis
- Handles human verification flows for Sign in with Apple, push notifications, in-app purchases, and permissions
How to install ce-test-xcode
npx skills add https://github.com/everyinc/compound-engineering-plugin --skill ce-test-xcode- Xcode installed with command-line tools
- XcodeBuildMCP MCP server installed and connected to your agent
- Valid Xcode project or workspace in the current directory
- At least one iOS Simulator available (iPhone 15 Pro recommended)
How to use ce-test-xcode
- 1.Verify XcodeBuildMCP is available by checking the list_simulators tool
- 2.Discover your Xcode project and list available schemes using discover_projs and list_schemes
- 3.Boot a simulator using boot_simulator with the simulator UUID
- 4.Build the app with build_ios_sim_app, capturing any build errors
- 5.Install the app with install_app_on_simulator and launch it with launch_app_on_simulator
- 6.Take screenshots of key screens using take_screenshot and review for correct UI rendering
- 7.Check simulator logs with get_sim_logs for crashes, exceptions, and errors
- 8.Pause for human verification when testing flows requiring device interaction (Sign in, notifications, permissions)
Use cases
- Validate UI layout and content rendering across multiple app screens before merging PRs
- Detect crashes and exceptions during automated testing by reviewing simulator logs
- Test authentication flows that require manual interaction (Sign in with Apple, biometric)
- Verify camera, location, and notification permissions work correctly on simulator
- Check for broken links and navigation issues in SwiftUI-based iOS apps
- iOS developers testing apps locally before pushing to CI/CD
- QA engineers validating app behavior on multiple simulator configurations
- Code reviewers running automated tests on pull requests that modify iOS code
- Mobile app teams integrating simulator testing into development workflows
ce-test-xcode FAQ
Install XcodeBuildMCP via Homebrew (brew tap getsentry/xcodebuildmcp && brew install xcodebuildmcp) or npx (npx -y xcodebuildmcp@latest mcp), then add it as an MCP server in your agent configuration and restart.
SwiftUI Text views with inline AttributedString links do not expose links as separate accessibility elements, so simulated taps cannot trigger them. Use manual taps in the simulator or xcrun simctl openurl to open the target URL directly as a fallback.
The skill pauses and asks the user to complete the flow manually on the simulator (e.g., 'Please complete Sign in with Apple'), then continues testing after confirmation.
The skill captures build errors and reports them to the user with specific details, then stops before attempting to install or test.
Yes, the ce-code-review workflow can spawn an agent to run this skill on PRs that touch iOS code, automatically building, testing key screens, and checking for crashes.
Full instructions (SKILL.md)
Source of truth, from everyinc/compound-engineering-plugin.
name: ce-test-xcode description: "Build and test iOS apps on simulator with XcodeBuildMCP." argument-hint: "[scheme name or 'current' to use default]" disable-model-invocation: true
Xcode Test Skill
Build, install, and test iOS apps on the simulator using XcodeBuildMCP. Captures screenshots, logs, and verifies app behavior.
Prerequisites
- Xcode installed with command-line tools
- XcodeBuildMCP MCP server connected
- Valid Xcode project or workspace
- At least one iOS Simulator available
Workflow
0. Verify XcodeBuildMCP is Available
Check that the XcodeBuildMCP MCP server is connected by calling its list_simulators tool.
MCP tool names vary by platform:
- Claude Code:
mcp__xcodebuildmcp__list_simulators - Other platforms: use the equivalent MCP tool call for the
XcodeBuildMCPserver'slist_simulatorsmethod
If the tool is not found or errors, inform the user they need to add the XcodeBuildMCP MCP server:
XcodeBuildMCP not installed
Install via Homebrew:
brew tap getsentry/xcodebuildmcp && brew install xcodebuildmcp
Or via npx (no global install needed):
npx -y xcodebuildmcp@latest mcp
Then add "XcodeBuildMCP" as an MCP server in your agent configuration
and restart your agent.
Do NOT proceed until XcodeBuildMCP is confirmed working.
1. Discover Project and Scheme
Call XcodeBuildMCP's discover_projs tool to find available projects, then list_schemes with the project path to get available schemes.
If an argument was provided, use that scheme name. If "current", use the default/last-used scheme.
2. Boot Simulator
Call list_simulators to find available simulators. Boot the preferred simulator (iPhone 15 Pro recommended) using boot_simulator with the simulator's UUID.
Wait for the simulator to be ready before proceeding.
3. Build the App
Call build_ios_sim_app with the project path and scheme name.
On failure:
- Capture build errors
- Report to user with specific error details
On success:
- Note the built app path for installation
- Proceed to step 4
4. Install and Launch
- Call
install_app_on_simulatorwith the built app path and simulator UUID - Call
launch_app_on_simulatorwith the bundle ID and simulator UUID - Call
capture_sim_logswith the simulator UUID and bundle ID to start log capture
5. Test Key Screens
For each key screen in the app:
Take screenshot:
Call take_screenshot with the simulator UUID and a descriptive filename (e.g., screen-home.png).
Review screenshot for:
- UI elements rendered correctly
- No error messages visible
- Expected content displayed
- Layout looks correct
Check logs for errors:
Call get_sim_logs with the simulator UUID. Look for:
- Crashes
- Exceptions
- Error-level log messages
- Failed network requests
Known automation limitation — SwiftUI Text links:
Simulated taps (via XcodeBuildMCP or any simulator automation tool) do not trigger gesture recognizers on SwiftUI Text views with inline AttributedString links. Taps report success but have no effect. This is a platform limitation — inline links are not exposed as separate elements in the accessibility tree. When a tap on a Text link has no visible effect, prompt the user to tap manually in the simulator. If the target URL is known, xcrun simctl openurl <device> <URL> can open it directly as a fallback.
6. Human Verification (When Required)
Pause for human input when testing touches flows that require device interaction.
| Flow Type | What to Ask |
|---|---|
| Sign in with Apple | "Please complete Sign in with Apple on the simulator" |
| Push notifications | "Send a test push and confirm it appears" |
| In-app purchases | "Complete a sandbox purchase" |
| Camera/Photos | "Grant permissions and verify camera works" |
| Location | "Allow location access and verify map updates" |
| SwiftUI Text links | "Please tap on [element description] manually — automated taps cannot trigger inline text links" |
Ask the user using the platform's blocking question tool: AskUserQuestion in Claude Code (call ToolSearch with select:AskUserQuestion first if its schema isn't loaded), request_user_input in Codex, ask_question in Antigravity CLI (agy), ask_user in Pi (requires the pi-ask-user extension). Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question:
Human Verification Needed
This test requires [flow type]. Please:
1. [Action to take on simulator]
2. [What to verify]
Did it work correctly?
1. Yes - continue testing
2. No - describe the issue
7. Handle Failures
When a test fails:
-
Document the failure:
- Take screenshot of error state
- Capture console logs
- Note reproduction steps
-
Ask the user how to proceed:
Test Failed: [screen/feature] Issue: [description] Logs: [relevant error messages] How to proceed? 1. Fix now - debug, propose a fix, rebuild and retest 2. Skip - continue testing other screens -
If "Fix now": investigate, propose a fix, rebuild and retest
-
If "Skip": log as skipped, continue
8. Test Summary
After all tests complete, present a summary:
## Xcode Test Results
**Project:** [project name]
**Scheme:** [scheme name]
**Simulator:** [simulator name]
### Build: Success / Failed
### Screens Tested: [count]
| Screen | Status | Notes |
|--------|--------|-------|
| Launch | Pass | |
| Home | Pass | |
| Settings | Fail | Crash on tap |
| Profile | Skip | Requires login |
### Console Errors: [count]
- [List any errors found]
### Human Verifications: [count]
- Sign in with Apple: Confirmed
- Push notifications: Confirmed
### Failures: [count]
- Settings screen - crash on navigation
### Result: [PASS / FAIL / PARTIAL]
9. Cleanup
After testing:
- Call
stop_log_capturewith the simulator UUID - Optionally call
shutdown_simulatorwith the simulator UUID
Quick Usage Examples
# Test with default scheme
/ce-test-xcode
# Test specific scheme
/ce-test-xcode MyApp-Debug
# Test after making changes
/ce-test-xcode current
Integration with ce-code-review
When reviewing PRs that touch iOS code, the ce-code-review workflow can spawn an agent to run this skill, build on the simulator, test key screens, and check for crashes.
Related skills
More from everyinc/compound-engineering-plugin and the wider catalog.

ce-update
Check if compound-engineering plugin is up to date and recommend updates.

ce-work
Execute implementation plans or work prompts end-to-end with systematic quality.

ce-work-beta
Execute work plans with optional Codex delegation for systematic feature delivery.

ce-worktree
Set up isolated git worktrees for parallel work without disturbing your main checkout.

coding-tutor
Personalized coding tutorials that evolve with your knowledge, using your actual codebase and spaced repetition.

compound-docs
Capture solved problems as categorized documentation with YAML frontmatter for fast lookup