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
XcodeBuildMCP
server's
list_simulators
method
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
Create a P1 todo for each build error
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_simulator
with the built app path and simulator UUID
Call
launch_app_on_simulator
with the bundle ID and simulator UUID
Call
capture_sim_logs
with 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
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
Created Todos: [count]
006-pending-p1-xcode-settings-crash.md
Result: [PASS / FAIL / PARTIAL] 9. Cleanup After testing: Call stop_log_capture with the simulator UUID Optionally call shutdown_simulator with the simulator UUID Quick Usage Examples
Test with default scheme
/test-xcode
Test specific scheme
/test-xcode MyApp-Debug
Test after making changes
/test-xcode current Integration with ce:review When reviewing PRs that touch iOS code, the ce:review workflow can spawn an agent to run this skill, build on the simulator, test key screens, and check for crashes.