ios-build-test

SKILL.md

iOS Build & Test Skill

Build and manage iOS apps using native Xcode CLI tools (xcodebuild, xcrun simctl).

When to Use

  • Building iOS/macOS apps with Xcode
  • Running apps in iOS simulators
  • Managing simulator instances (boot, shutdown, list)
  • Taking screenshots or recording video
  • Running unit/UI tests
  • Resetting app state or onboarding flows

Build Workflow

1. Discover Project Structure

# List available schemes
xcodebuild -list

# For workspaces
xcodebuild -workspace App.xcworkspace -list

2. Find Available Simulators

# List all devices
xcrun simctl list devices

# Get booted simulator UDID
xcrun simctl list devices booted --json | jq -r '.devices[][] | select(.state == "Booted") | .udid'

# Find specific device type
xcrun simctl list devices available --json | jq -r '.devices[][] | select(.name | contains("iPhone 16")) | .udid' | head -1

3. Boot Simulator (if needed)

xcrun simctl boot $UDID

4. Build for Simulator

xcodebuild -workspace App.xcworkspace \
  -scheme App \
  -destination "platform=iOS Simulator,id=$UDID" \
  -derivedDataPath ./DerivedData \
  build

5. Install and Launch

# Find .app bundle
APP_PATH=$(find ./DerivedData -name "*.app" -type d | head -1)

# Install
xcrun simctl install $UDID "$APP_PATH"

# Launch (get bundle ID from Info.plist)
BUNDLE_ID=$(defaults read "$APP_PATH/Info.plist" CFBundleIdentifier)
xcrun simctl launch $UDID $BUNDLE_ID

# Launch with console output
xcrun simctl launch --console $UDID $BUNDLE_ID

Reset App State

Useful for testing onboarding flows or clean state:

# Uninstall app
xcrun simctl uninstall $UDID $BUNDLE_ID

# Reinstall and launch
xcrun simctl install $UDID "$APP_PATH"
xcrun simctl launch $UDID $BUNDLE_ID

To fully reset simulator:

xcrun simctl erase $UDID

Video Capture

Record simulator screen:

# Start recording in background
xcrun simctl io $UDID recordVideo output.mp4 &
RECORD_PID=$!

# ... perform actions ...

# Stop recording (SIGINT)
kill -2 $RECORD_PID

Screenshot:

xcrun simctl io $UDID screenshot screenshot.png

Running Tests

# Run all tests
xcodebuild test \
  -workspace App.xcworkspace \
  -scheme App \
  -destination "platform=iOS Simulator,id=$UDID"

# Run specific test class
xcodebuild test \
  -workspace App.xcworkspace \
  -scheme App \
  -destination "platform=iOS Simulator,id=$UDID" \
  -only-testing:AppTests/LoginTests

# With code coverage
xcodebuild test \
  -workspace App.xcworkspace \
  -scheme App \
  -destination "platform=iOS Simulator,id=$UDID" \
  -enableCodeCoverage YES

Tuist Projects

For projects using Tuist:

# Install dependencies and generate Xcode project
mise exec -- tuist install
mise exec -- tuist generate

# Then use standard xcodebuild commands

XcodeBuildMCP Integration

If XcodeBuildMCP tools are available, prefer those for:

  • Project discovery
  • Build operations
  • Simulator management

Fall back to CLI commands when MCP isn't available or for operations not covered by MCP tools.

Quick Reference

Task Command
List schemes xcodebuild -list
List simulators xcrun simctl list devices
Boot simulator xcrun simctl boot $UDID
Build xcodebuild -workspace X -scheme Y -destination "..." build
Install app xcrun simctl install $UDID path/to/App.app
Launch app xcrun simctl launch $UDID com.bundle.id
Uninstall xcrun simctl uninstall $UDID com.bundle.id
Screenshot xcrun simctl io $UDID screenshot file.png
Record video xcrun simctl io $UDID recordVideo file.mp4
Run tests xcodebuild test -workspace X -scheme Y -destination "..."

Common Issues

Build fails with "no scheme": Use -list to find available schemes, specify with -scheme.

Simulator not found: Ensure UDID is correct. Use xcrun simctl list devices available to find valid simulators.

App won't launch: Check bundle ID matches what's in Info.plist. Use --console flag to see launch errors.

Video recording won't stop: Use kill -2 (SIGINT), not kill -9. The recording needs graceful termination to finalize the file.

See CLI_REFERENCE.md for complete command documentation.

Weekly Installs
2
GitHub Stars
1
First Seen
Feb 28, 2026
Installed on
opencode2
gemini-cli2
codebuddy2
github-copilot2
codex2
kimi-cli2