/ 디렉터리 / 플레이그라운드 / 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 전체 보기