name: xcode-mcp-app-testing description: MCP-first testing workflow for Xcode apps (iOS, iPadOS, macOS). Use when the user asks to build, test, run, or verify an Xcode project — including UI checks, smoke tests, regression tests, or simulator launches. Prefers Xcode MCP tools via mcpbridge; falls back to xcodebuild/simctl CLI when MCP is unavailable. allowed-tools: Bash, Read user-invocable: true argument-hint: <test scope, e.g. "smoke test" or "run UI tests">
Xcode MCP App Testing
Build, test, and validate Xcode apps using the native Xcode MCP server (Xcode 26.3+). Falls back to xcodebuild/simctl CLI when MCP is not connected.
Installation
Enable Xcode MCP server
- Open Xcode → Settings (
⌘,) → Intelligence - Under Model Context Protocol, toggle Xcode Tools to ON
Register with Claude Code
claude mcp add --transport stdio xcode -- xcrun mcpbridge
claude mcp list # verify "xcode" appears
If xcode does not appear: re-run the add command, confirm the Xcode Tools toggle is enabled, and restart Claude Code.
Xcode MCP Tools Reference
Build & Testing
| Tool | Purpose |
|---|---|
BuildProject |
Compile the project for a scheme and destination |
GetBuildLog |
Retrieve build output (errors, warnings, notes) |
RunAllTests |
Execute the full test suite |
RunSomeTests |
Run specific test targets or test methods |
GetTestList |
Enumerate all available test cases |
Diagnostics
| Tool | Purpose |
|---|---|
XcodeListNavigatorIssues |
List all current warnings and errors |
XcodeRefreshCodeIssuesInFile |
Re-scan a specific file for issues |
File Operations
| Tool | Purpose |
|---|---|
XcodeRead |
Read file contents |
XcodeWrite |
Create a new file |
XcodeUpdate |
Modify an existing file |
XcodeGlob |
Find files by pattern |
XcodeGrep |
Search text across the project |
XcodeLS |
List directory contents |
XcodeMakeDir |
Create directories |
XcodeRM |
Delete files or directories |
XcodeMV |
Move or rename items |
Intelligence & Preview
| Tool | Purpose |
|---|---|
ExecuteSnippet |
Run Swift code in a REPL environment |
RenderPreview |
Capture SwiftUI preview screenshots |
DocumentationSearch |
Search Apple docs and WWDC transcripts |
Workspace
| Tool | Purpose |
|---|---|
XcodeListWindows |
List open Xcode project windows |
Execution Workflow
1. Detect project context
MCP: XcodeListWindows → XcodeLS → XcodeGlob for .xcodeproj, .xcworkspace, Package.swift
CLI fallback:
find . -maxdepth 2 \( -name "*.xcodeproj" -o -name "*.xcworkspace" -o -name "Package.swift" \) | head -10
xcodebuild -list
2. Build
MCP: BuildProject with scheme and destination → on failure, GetBuildLog for diagnostics
CLI fallback:
xcodebuild -scheme <SCHEME> -destination 'platform=iOS Simulator,name=<DEVICE>' build 2>&1
Stop and report immediately on build failure with the shortest actionable error summary.
3. Run tests
MCP: GetTestList to discover tests → RunAllTests or RunSomeTests for targeted runs
CLI fallback:
xcodebuild -scheme <SCHEME> -destination 'platform=iOS Simulator,name=<DEVICE>' test 2>&1
Capture failing test names, file references, and failure messages.
4. UI / functional validation
MCP: RenderPreview for SwiftUI screenshot capture. For runtime validation, combine with simulator launch.
CLI fallback:
xcrun simctl boot <UDID>
xcrun simctl bootstatus <UDID> -b
xcrun simctl install <UDID> <APP_PATH>
xcrun simctl launch <UDID> <BUNDLE_ID>
xcrun simctl io <UDID> screenshot /tmp/screen.png
5. Diagnostics
MCP: XcodeListNavigatorIssues → XcodeRefreshCodeIssuesInFile for specific files → GetBuildLog for crash details
CLI fallback:
xcrun simctl diagnose <UDID>
6. Quick code verification
MCP: ExecuteSnippet — run Swift snippets in REPL to verify logic without a full build cycle
7. Documentation lookup
MCP: DocumentationSearch — search Apple docs and WWDC transcripts with semantic search
Minimum Smoke Checklist
When no explicit test plan is provided, verify:
- App launches without crash
- Main navigation loads and is interactive
- Primary user flow completes (create / save / send / main CTA)
- Permission-gated paths handled (granted + denied states)
- Error and empty states render without UI breakage
Reporting Format
Structure the final output as:
- Environment — scheme, destination, build config, MCP status (connected / fallback)
- Executed — build result, test results, UI flows, artifacts collected
- Findings — ordered by severity (P0 critical → P3 cosmetic) with exact repro steps
- Evidence — screenshot paths, log excerpts
- Next actions — minimal fix plan, prioritized
Common Destinations
# List available simulators
xcrun simctl list devices available
# Common destinations for xcodebuild
'platform=iOS Simulator,name=iPhone 16 Pro'
'platform=iOS Simulator,name=iPhone SE (3rd generation)'
'platform=iOS Simulator,name=iPad Pro 13-inch (M4)'
'platform=macOS'
Troubleshooting
| Problem | Fix |
|---|---|
xcode not in claude mcp list |
Re-run claude mcp add, confirm Xcode Tools toggle, restart Claude Code |
| MCP connects but cannot access project | Open the project in Xcode first; mcpbridge auto-detects the Xcode process |
| Build succeeds in Xcode but fails via CLI | Check scheme sharing: Xcode → Manage Schemes → mark scheme as Shared |
simctl cannot find device |
Run xcrun simctl list devices available to get correct UDID/name |
| Tests time out | Add -test-timeouts-enabled YES -default-test-execution-time-allowance 300 |
Notes
- Xcode must be running with the project open for MCP tools to work
mcpbridgecommunicates with Xcode via XPC — no network requiredRenderPreviewreturns actual screenshot images of SwiftUI previewsExecuteSnippetruns in an isolated Swift REPL, useful for quick logic checks- When the project builds a simulator executable instead of
.app, usesimctl spawnfor process-level checks