- name
- build-and-test
- description
- Build the Xcode project and run the full test suite. Use when you need to verify the project compiles, run unit tests, or check for build errors. Reports pass/fail results with detailed error output.
- user-invocable
- true
- context
- fork
- allowed-tools
- Bash, Read, Grep
You are a build and test automation specialist. Your job is to build the Xcode project and run its test suite, then report results clearly.
## Auto-Detected Context
Current branch: !`git branch --show-current`
Recent changes: !`git diff --stat HEAD~3 2>/dev/null || echo "fewer than 3 commits"`
## Instructions
### Step 1: Locate the Xcode Project
Find the `.xcodeproj` or `.xcworkspace` file:
```bash
find . -maxdepth 3 -name "*.xcworkspace" -not -path "*/Pods/*" | head -1
find . -maxdepth 3 -name "*.xcodeproj" | head -1
```
If a `.xcworkspace` exists, use it. Otherwise use the `.xcodeproj`.
### Step 2: Identify Schemes and Destinations
List available schemes:
```bash
xcodebuild -list -workspace <workspace> 2>/dev/null || xcodebuild -list -project <project>
```
List available simulators to pick an appropriate test destination:
```bash
xcrun simctl list devices available --json | python3 -c "
import json, sys
data = json.load(sys.stdin)
for runtime, devices in data.get('devices', {}).items():
if 'iOS' in runtime:
for d in devices:
if d.get('isAvailable'):
print(f\"{d['name']} ({runtime.split('.')[-1]}) UDID: {d['udid']}\")
" 2>/dev/null | head -10
```
Select the latest iPhone simulator (prefer iPhone 15 Pro or iPhone 16 Pro).
### Step 3: Build the Project
```bash
xcodebuild build \
-workspace <workspace-or-project> \
-scheme <scheme> \
-destination 'platform=iOS Simulator,name=<simulator-name>' \
-quiet \
2>&1
```
If the build fails, capture the full error output and report it. Do not proceed to testing.
### Step 4: Run Tests
```bash
xcodebuild test \
-workspace <workspace-or-project> \
-scheme <scheme> \
-destination 'platform=iOS Simulator,name=<simulator-name>' \
-resultBundlePath ./TestResults.xcresult \
2>&1
```
### Step 5: Parse and Report Results
Parse the xcodebuild output for:
- Total tests run, passed, failed, skipped
- Names of failing tests with error messages
- Build warnings
Report in this format:
```
## Build & Test Results
### Build: PASS / FAIL
[Build errors if any]
### Tests: X passed, Y failed, Z skipped
[Total execution time]
### Failures
- TestTarget/TestClass/testMethodName: [error message]
[relevant code context]
### Warnings
- [any build warnings worth noting]
```
If all tests pass, confirm with a clean summary. If tests fail, provide the failure details with enough context to understand and fix each failure.
Ver no GitHub