/ 디렉터리 / 플레이그라운드 / XcodeBuild
● 공식 getsentry ⚡ 바로 사용

XcodeBuild

제작: getsentry · getsentry/XcodeBuildMCP

iOS/macOS AI 코딩 루프 폐쇄 — 빌드, 테스트, 시뮬레이터 실행, 로그 및 스크린샷 캡처, 모두 채팅에서.

XcodeBuildMCP (Sentry, 전 getsentry 조직 멤버 Cameron)는 xcodebuild, xcrun simctl, 시뮬레이터 런타임을 래핑합니다. 에이전트가 프로젝트를 컴파일하고, 테스트를 실행하고, 시뮬레이터를 부팅하고, 앱을 설치하고, 구동하고, 로그 또는 스크린샷을 다시 읽을 수 있습니다 — AI 작성 iOS 코드의 누락된 피드백 루프입니다.

왜 쓰나요

핵심 기능

라이브 데모

실제 사용 모습

xcodebuild.replay ▶ 준비됨
0/0

설치

클라이언트 선택

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "xcodebuild": {
      "command": "npx",
      "args": [
        "-y",
        "xcodebuildmcp@latest"
      ]
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config 열기. 저장 후 앱 재시작.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "xcodebuild": {
      "command": "npx",
      "args": [
        "-y",
        "xcodebuildmcp@latest"
      ]
    }
  }
}

Cursor는 Claude Desktop과 동일한 mcpServers 스키마 사용. 프로젝트 설정이 전역보다 우선.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "xcodebuild": {
      "command": "npx",
      "args": [
        "-y",
        "xcodebuildmcp@latest"
      ]
    }
  }
}

Cline 사이드바의 MCP Servers 아이콘 클릭 후 "Edit Configuration" 선택.

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "xcodebuild": {
      "command": "npx",
      "args": [
        "-y",
        "xcodebuildmcp@latest"
      ]
    }
  }
}

Claude Desktop과 같은 형식. Windsurf 재시작 후 적용.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "xcodebuild",
      "command": "npx",
      "args": [
        "-y",
        "xcodebuildmcp@latest"
      ]
    }
  ]
}

Continue는 맵이 아닌 서버 오브젝트 배열 사용.

~/.config/zed/settings.json
{
  "context_servers": {
    "xcodebuild": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "xcodebuildmcp@latest"
        ]
      }
    }
  }
}

context_servers에 추가. 저장 시 Zed가 핫 리로드.

claude mcp add xcodebuild -- npx -y xcodebuildmcp@latest

한 줄 명령. claude mcp list로 확인, claude mcp remove로 제거.

사용 사례

실전 활용법: XcodeBuild

AI 생성 iOS 코드가 실제로 빌드되고 시뮬레이터에서 실행되는지 확인

👤 Claude를 기능 작업 및 SwiftUI 프로토타이핑에 사용하는 iOS 개발자 ⏱ ~15 min intermediate

언제 쓸까: Claude가 SwiftUI 뷰를 방금 작성하거나 편집했습니다. '완료'라고 말하기 전에 컴파일, 시뮬레이터에서 실행, 스크린샷을 원합니다.

사전 조건
  • Xcode 설치됨 — Mac App Store의 Xcode 15+; xcodebuild -version으로 확인
  • 부팅 가능한 시뮬레이터 — Xcode → Settings → Platforms → iOS Simulator 다운로드됨
흐름
  1. 프로젝트 검색 및 빌드
    /Users/me/Projects/MyApp에서 Xcode 프로젝트를 찾습니다. iOS Simulator 대상 'iPhone 16'에 대해 스킴 'MyApp'을 빌드합니다. 오류 또는 경고를 보고합니다.✓ 복사됨
    → 빌드 성공 또는 file:line이 있는 특정 오류
  2. 시뮬레이터 부팅, 설치, 시작
    iPhone 16 시뮬레이터를 아직 부팅하지 않았으면 부팅합니다. 빌드된 앱을 설치하고 시작합니다. 3초 후 스크린샷을 찍습니다.✓ 복사됨
    → 앱 실행 중; 스크린샷 캡처됨
  3. 기능 구동
    '가입' 버튼을 탭하고, 이메일 필드에 '[email protected]'을 입력하고, 제출을 탭합니다. 각 단계 후 스크린샷.✓ 복사됨
    → 흐름을 보여주는 스크린샷 시퀀스; 또는 명확한 탭 실패 오류

결과: 기능이 작동하음을 증명하는 이전/이후 스크린샷, 코드와 함께 커밋됨.

함정
  • 좌표로 탭하기는 장치 크기에 따라 취약함 — MCP가 지원할 때 접근성 레이블 기반 탭을 선호합니다; 좌표는 대체로만 사용합니다.
  • 시뮬레이터 빌드는 실제 장치와 다른 아키텍처를 사용합니다. — 아키텍처에 민감한 코드의 경우, 병합하기 전에 최소한 한 번은 물리적 장치를 위해 빌드합니다.
함께 쓰기: filesystem · github

채팅에서 Xcode 단위 및 UI 테스트를 실행하고 장애 분류

👤 Xcode로 전환하지 않고 빠른 테스트 피드백을 원하는 iOS 개발자 ⏱ ~10 min beginner

언제 쓸까: 변경을 수행했고, ⌘U 등가를 실행하고, Claude가 장애를 파싱하기를 원합니다.

흐름
  1. 테스트 실행
    스킴 'MyApp'의 모든 테스트를 대상 'iPhone 16'에서 실행합니다. 파일, 줄, 기대값이 포함된 모든 장애를 보여줍니다.✓ 복사됨
    → 통과 수 및 위치가 포함된 장애 목록
  2. 한 가지 장애에 집중
    첫 번째 장애의 경우, 소스 파일을 읽고 테스트가 잘못되었는지 코드가 잘못되었는지 알려줍니다. 구체적이어야 합니다.✓ 복사됨
    → 명확한 진단, '둘 다 가능할 수 있습니다'가 아님
  3. 수정 및 재실행
    수정을 적용합니다. 녹색을 확인하기 위해 실패한 테스트만 재실행합니다.✓ 복사됨
    → 녹색 재실행

결과: 집중된 재실행으로 테스트가 녹색으로 돌아감, 전체 스위트 재실행이 아님.

함정
  • xcodebuild test는 콜드 캐시에서 느립니다.-only-testing: 플래그를 사용하여 좁힙니다; MCP는 테스트 식별자별로 이를 노출합니다.
함께 쓰기: github

수수께끼 같은 Xcode 빌드 오류 진단

👤 '링커 오류 / 누락된 프레임워크 / 서명' 벽에 부딪친 iOS 개발자 ⏱ ~20 min intermediate

언제 쓸까: xcodebuild가 실패하고 오류 출력이 4000줄의 노이즈입니다.

흐름
  1. 빌드 및 원본 장애 캡처
    스킴 'MyApp'을 빌드하고 'error:' 또는 'warning:'을 포함하는 줄만 반환하고, 각 주변의 3줄의 컨텍스트를 반환합니다.✓ 복사됨
    → 노이즈 없는 집중된 오류 목록
  2. 첫 번째 오류 설명
    첫 번째 오류를 인간의 말로 설명합니다. Xcode가 실제로 무엇을 불평하고 있으며, 상위 3가지 원인은 무엇입니까?✓ 복사됨
    → 가능성 있는 원인이 포함된 평이한 영어 진단
  3. 수정 적용 및 재빌드
    가장 가능성 있는 수정을 적용하고 (필요에 따라 Info.plist/entitlements/Package.swift 확인), 재빌드하고, 오류가 사라졌는지 확인합니다.✓ 복사됨
    → 깨끗한 빌드

결과: 2시간 Stack Overflow 토끼 굴 없이 빌드 벽에서 벗어남.

함정
  • 일부 오류는 DerivedData 부실 데이터입니다. — 모든 것이 실패할 때: MCP의 clean 도구를 통해 DerivedData를 정리한 후 재빌드합니다.
함께 쓰기: filesystem

시뮬레이터의 앱 충돌 캡처 및 근본 원인 찾기

👤 재현 가능한 충돌을 찾는 iOS 개발자 ⏱ ~20 min advanced

언제 쓸까: 앱이 시뮬레이터의 특정 흐름에서 충돌하고, Claude가 충돌 로그를 읽기를 원합니다.

흐름
  1. 로그 캡처로 재현
    iPhone 16 시뮬레이터에서 MyApp을 시작합니다. 로그 캡처를 시작합니다. 다음 흐름을 수행합니다: Settings 열기, '캐시 삭제' 탭. 앱이 죽을 때 로그 캡처 중지.✓ 복사됨
    → 충돌 재현됨, 로그 저장됨
  2. 충돌 파싱
    캡처된 로그에서 충돌을 찾습니다. 필요하면 상징화합니다. 실패한 스레드, 상위 5개 스택 프레임, 및 코드의 가능성 있는 줄을 알려줍니다.✓ 복사됨
    → 특정 소스 파일을 가리키는 상징화된 스택 추적
  3. 수정 제안
    스택 추적 및 주변 코드를 기반으로 이를 수정하기 위한 최소 변경은 무엇입니까? 적용합니다.✓ 복사됨
    → 대상 수정, 큰 리팩토링이 아님

결과: PR에 붙여넣을 수 있는 상징화된 증거��� 있는 수정된 충돌.

함정
  • Release 구성 충돌은 dSYM 없이 상징화되지 않습니다. — 재현에는 Debug 구성을 사용합니다; Release를 별도로 테스트하여 수정 확인
함께 쓰기: sentry · github

조합

다른 MCP와 조합해 10배 효율

xcodebuild + filesystem

Swift 편집 → 빌드 → 스크린샷 → 반복, 모두 한 채팅에서

ContentView.swift를 편집하여 다크 모드 토글을 추가합니다. MyApp을 iPhone 16용으로 빌드하고, 실행하고, 라이트 및 다크 모드 모두에서 스크린샷을 찍습니다.✓ 복사됨
xcodebuild + github

문제 수정, 시뮬레이터에서 확인, 스크린샷과 함께 PR 열기

Issue #42는 로그인 버튼이 가로 모드에서 정렬되지 않았다고 합니다. iPad 시뮬레이터에서 재현하고, SwiftUI 레이아웃을 수정하고, 이전/이후 스크린샷을 PR에 첨부합니다.✓ 복사됨
xcodebuild + sentry

Sentry 보고 충돌을 동일한 조건으로 시뮬레이터에서 재현

Sentry 충돌 iOS-113은 iOS 18.1에서 사용자 로케일 fr-FR로 발생했습니다. 일치하는 시뮬레이터를 부팅하고, 재현하고, 수정합니다.✓ 복사됨

도구

이 MCP가 노출하는 것

도구입력언제 호출비용
discover_projects directory: str 경로 입력 없이 리포지토리에서 빌드할 항목 찾기 free
build_project project: str, scheme: str, destination: str, configuration?: 'Debug'|'Release' 대상을 위해 .xcodeproj 또는 .xcworkspace 빌드 free
build_spm_package path: str Swift Package 빌드 (no .xcodeproj) free
test_project project, scheme, destination, only_testing?: str[] 테스트 스위트 실행; only_testing을 사용하여 좁힘 free
list_simulators none 존재하는 시뮬레이터 및 부팅된 시뮬레이터 확인 free
boot_simulator simulator_id or name: str 앱 설치 전에 시뮬레이터 켜기 free
install_app simulator_id: str, app_path: str 부팅된 시뮬레이터에 빌드된 .app 설치 free
launch_app simulator_id: str, bundle_id: str 설치된 앱 시작 free
tap_at / type_text / send_url simulator params UI 구동 free
screenshot simulator_id: str, path?: str 시각적 상태 캡처 free
start_log_capture / stop_log_capture simulator_id 세션 콘솔/시스템 로그 캡처 free
clean project, scheme? 빌드가 이상할 때 해당 프로젝트의 DerivedData 제거 free

비용 및 제한

운영 비용

API 쿼터
없음 — 모든 것이 xcodebuild/simctl을 통해 로컬에서 실행됨
호출당 토큰
빌드 로그가 매우 클 수 있습니다. 전체 로그 덤프보다는 오류/경고로 필터링하는 것을 선호합니다.
금액
무료 (Xcode가 있는 Mac이 필요하며, 이는 자체 비용입니다)
기본적으로 증분 빌드를 실행하고, 깨끗한 빌드를 실행하지 않습니다. DerivedData가 이상할 때만 정리합니다.

보안

권한, 시크릿, 파급범위

자격 증명 저장: MCP 레이어에 자격 증명이 없습니다. 코드 서명 자격 증명은 일반적으로 Mac의 Keychain에 있습니다.
데이터 외부 송신: MCP에서 없음. xcodebuild는 일반 소스에서 종속성 (SPM, CocoaPods)을 가져올 수 있습니다.
절대 부여 금지: 에이전트가 확인 없이 codesign 아이덴티티 또는 프로비저닝 프로파일을 변경하도록 하지 마세요.

문제 해결

자주 발생하는 오류와 해결

xcodebuild: command not found

Xcode Command Line Tools가 누락되었거나 선택되지 않았습니다. xcode-select --install을 실행한 다음 sudo xcode-select -s /Applications/Xcode.app/Contents/Developer를 실행합니다.

확인: xcodebuild -version
No such destination 'iPhone 16'

해당 이름의 시뮬레이터가 활성 Xcode에 다운로드되지 않았습니다. Xcode → Settings → Platforms → iOS 런타임 다운로드를 엽니다. 또는 list_simulators를 사용하여 기존 시뮬레이터를 선택합니다.

확인: xcrun simctl list devices
Build succeeds but app won't launch — 'NSException'

시작 직전에 start_log_capture를 통해 앱 로그를 확인합니다. 종종 Info.plist 누락 키 또는 entitlements 불일치입니다.

Tests hang on a SwiftUI preview

SwiftUI 미리 보기는 드문 경우 xcodebuild test를 교착 상태에 빠뜨릴 수 있습니다. 테스트 스킴에서 미리 보기 헬퍼를 비활성화하거나 -disable-concurrent-testing으로 실행합니다.

대안

XcodeBuild 다른 것과 비교

대안언제 쓰나단점/장점
xcodebuild를 실행하는 Direct shell MCP최대 유연성을 원하고 원본 셸 MCP의 보안 트레이드오프를 수용합니다.에르고노믹스 없음; Claude는 모든 xcodebuild 플래그를 알아야 합니다.
JetBrains MCP (AppCode is EOL)JetBrains IDE에 있습니다 — 더 이상 iOS에 적용되지 않습니다.오늘 iOS 대안이 아닙니다.
Fastlane via shell시뮬레이터 확인뿐 아니라 서명된 빌드 및 TestFlight 업로드가 필요합니다.훨씬 더 무겁습니다; 내부 루프 개발의 범위를 벗어남.

더 보기

리소스

📖 GitHub에서 공식 README 읽기

🐙 열린 이슈 보기

🔍 400+ MCP 서버 및 Skills 전체 보기