Xcode

Herramientas para la gestión de proyectos de Xcode, compilación, pruebas, archivado, firma de código y utilidades de desarrollo para iOS.

Documentación

xcode-mcp

Un servidor MCP (Model Context Protocol) que proporciona herramientas para operaciones relacionadas con Xcode, facilitando el trabajo con proyectos de Xcode desde clientes MCP como Claude Desktop. El servidor ofrece diversas utilidades para la gestión de proyectos de Xcode, compilación, pruebas, archivado, firma de código y herramientas de desarrollo iOS relacionadas.

Características

  • Recuperación de información de proyectos Xcode y listado de esquemas
  • Capacidades de compilación mejoradas con opciones de limpieza y salida personalizada
  • Ejecución integral de pruebas con control granular
  • Archivado de aplicaciones y exportación IPA para distribución
  • Gestión de firma de código y perfiles de aprovisionamiento
  • Integración con Swift Package Manager
  • Gestión del simulador de iOS mediante simctl
  • NUEVO: Implementación y lanzamiento de aplicaciones en dispositivos reales con detección automática de instalación de Xcode y gestión mejorada de dispositivos
  • Manejo inteligente de fallos de instalación de aplicaciones con reintento automático
  • Caché inteligente de información de dispositivos y Xcode para un mejor rendimiento

Instalación

npm install @devyhan/xcode-mcp

Uso

Uso con Claude Desktop

  1. Abra el archivo de configuración de Claude Desktop:

    # macOS
    open ~/Library/Application\ Support/Claude/claude_desktop_config.json
    
  2. Agregue o modifique la siguiente configuración:

    {
      "mcpServers": {
        "xcode-mcp": {
          "command": "npx",
          "args": [
            "@devyhan/xcode-mcp",
            "-y"
          ]
        }
      }
    }
    
  3. Reinicie Claude Desktop.

Herramientas disponibles

1. xcode-project-info

Recupera información detallada sobre un proyecto o espacio de trabajo de Xcode, incluidos objetivos, configuraciones y esquemas.

Parámetros:

  • projectPath (obligatorio): Ruta al proyecto Xcode (.xcodeproj) o espacio de trabajo (.xcworkspace)

Ejemplo:

Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj

Salida de muestra:

{
  "project": {
    "name": "MyApp",
    "targets": ["MyApp", "MyAppTests", "MyAppUITests"],
    "configurations": ["Debug", "Release"],
    "schemes": ["MyApp"]
  }
}

2. xcode-list-schemes

Proporciona una lista completa de todos los esquemas, objetivos y configuraciones disponibles en un proyecto o espacio de trabajo de Xcode.

Parámetros:

  • projectPath (obligatorio): Ruta al proyecto Xcode (.xcodeproj) o espacio de trabajo (.xcworkspace)

Ejemplo:

Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj

Salida de muestra:

Information about project "MyApp":
    Targets:
        MyApp
        MyAppTests
        MyAppUITests

    Build Configurations:
        Debug
        Release

    Schemes:
        MyApp
        MyAppTests

3. xcode-build

Compila un proyecto o espacio de trabajo de Xcode con opciones mejoradas. Admite compilaciones de espacios de trabajo y proyectos, compilaciones limpias y directorios de salida personalizados.

Parámetros:

  • projectPath (obligatorio): Ruta al proyecto Xcode (.xcodeproj) o espacio de trabajo (.xcworkspace)
  • scheme (obligatorio): El esquema a compilar
  • configuration (opcional): Configuración de compilación (p. ej., Debug, Release)
  • destination (opcional): Destino de compilación (p. ej., 'platform=iOS Simulator,name=iPhone 14')
  • extraArgs (opcional): Argumentos adicionales de xcodebuild como matriz de cadenas
  • outputDir (opcional): Directorio de salida de compilación personalizado (SYMROOT)
  • clean (opcional): Si se debe realizar una compilación limpia (predeterminado: false)

Ejemplo:

Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
Scheme: MyAppScheme
Configuration: Debug
Destination: platform=iOS Simulator,name=iPhone 14
Clean: true
OutputDir: /Users/username/Desktop/build

Comando generado:

xcodebuild -project "/Users/username/Projects/MyApp/MyApp.xcodeproj" -scheme "MyAppScheme" clean build -configuration "Debug" -destination "platform=iOS Simulator,name=iPhone 14" SYMROOT="/Users/username/Desktop/build"

4. xcode-test

Ejecuta pruebas para un proyecto o espacio de trabajo de Xcode con amplias opciones. Proporciona control detallado sobre la ejecución de pruebas, incluida la ejecución de pruebas específicas, planes de prueba y varios modos de prueba.

Parámetros:

  • projectPath (obligatorio): Ruta al proyecto Xcode (.xcodeproj) o espacio de trabajo (.xcworkspace)
  • scheme (obligatorio): El esquema a probar
  • destination (obligatorio): Destino de prueba (p. ej., 'platform=iOS Simulator,name=iPhone 14')
  • testPlan (opcional): Nombre del plan de prueba a utilizar
  • onlyTesting (opcional): Matriz de identificadores de prueba específicos para ejecutar
  • skipTesting (opcional): Matriz de identificadores de prueba para omitir
  • resultBundlePath (opcional): Ruta para guardar el paquete de resultados de prueba
  • buildForTesting (opcional): Compilar solo para pruebas sin ejecutar pruebas
  • testWithoutBuilding (opcional): Ejecutar pruebas sin compilar

Ejemplo:

Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
Scheme: MyAppScheme
Destination: platform=iOS Simulator,name=iPhone 14
OnlyTesting: ["MyAppTests/LoginTests"]
ResultBundlePath: /Users/username/Desktop/TestResults

Comando generado:

xcodebuild -project "/Users/username/Projects/MyApp/MyApp.xcodeproj" -scheme "MyAppScheme" -destination "platform=iOS Simulator,name=iPhone 14" test -only-testing:"MyAppTests/LoginTests" -resultBundlePath "/Users/username/Desktop/TestResults"

5. xcode-archive

Crea un archivo (.xcarchive) de un proyecto Xcode y opcionalmente lo exporta a un archivo IPA para distribución. Admite métodos de distribución de App Store, ad-hoc y empresariales mediante el archivo plist de opciones de exportación.

Parámetros:

  • projectPath (obligatorio): Ruta al proyecto Xcode (.xcodeproj) o espacio de trabajo (.xcworkspace)
  • scheme (obligatorio): El esquema a archivar
  • configuration (opcional): Configuración de compilación (p. ej., Release)
  • archivePath (obligatorio): Ruta para guardar el archivo .xcarchive
  • exportPath (opcional): Ruta para exportar el archivo (p. ej., archivo IPA)
  • exportOptionsPlist (opcional): Ruta al archivo exportOptions.plist

Ejemplo:

Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
Scheme: MyAppScheme
Configuration: Release
ArchivePath: /Users/username/Desktop/MyApp.xcarchive
ExportPath: /Users/username/Desktop/Export
ExportOptionsPlist: /Users/username/Projects/MyApp/exportOptions.plist

Comandos generados:

# Archive command
xcodebuild -project "/Users/username/Projects/MyApp/MyApp.xcodeproj" -scheme "MyAppScheme" -configuration "Release" archive -archivePath "/Users/username/Desktop/MyApp.xcarchive"

# Export command (if exportPath and exportOptionsPlist are provided)
xcodebuild -exportArchive -archivePath "/Users/username/Desktop/MyApp.xcarchive" -exportPath "/Users/username/Desktop/Export" -exportOptionsPlist "/Users/username/Projects/MyApp/exportOptions.plist"

6. xcode-codesign-info

Recupera información completa de firma de código y perfiles de aprovisionamiento para un proyecto Xcode. Muestra identidades de firma de código instaladas, configuración de firma de código del proyecto y perfiles de aprovisionamiento en el sistema.

Parámetros:

  • projectPath (obligatorio): Ruta al proyecto Xcode (.xcodeproj) o espacio de trabajo (.xcworkspace)
  • target (opcional): Nombre de objetivo específico

Ejemplo:

Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
Target: MyAppTarget

Salida de muestra:

코드 서명 인증서 목록:
  1) 01AB2345CD6789EF0123456789ABCDEF01234567 "Apple Development: John Doe (ABC12DEF34)"
  2) 9876543210FEDCBA98765432109876543210FEDC "Apple Distribution: Example Corp (XYZ12ABC3)"

프로젝트 코드 서명 설정:
    CODE_SIGN_IDENTITY = Apple Development
    CODE_SIGN_STYLE = Automatic
    DEVELOPMENT_TEAM = ABC123DEF4
    PROVISIONING_PROFILE_SPECIFIER = 

설치된 프로비저닝 프로파일:
-rw-r--r--  1 username  staff  12345 Feb  1 12:34 01234567-89ab-cdef-0123-456789abcdef.mobileprovision
-rw-r--r--  1 username  staff  23456 Mar 15 09:12 fedcba98-7654-3210-fedc-ba9876543210.mobileprovision

7. swift-package-manager

Proporciona acceso a la funcionalidad de Swift Package Manager (SPM) para gestionar paquetes Swift. Admite comandos SPM comunes como init, update, resolve, reset y clean.

Parámetros:

  • command (obligatorio): Comando SPM a ejecutar ("init", "update", "resolve", "reset", "clean")
  • packageDir (obligatorio): Ruta del directorio del paquete Swift
  • extraArgs (opcional): Argumentos SPM adicionales como matriz de cadenas

Ejemplo:

Command: update
PackageDir: /Users/username/Projects/MySwiftPackage
ExtraArgs: ["--enable-pubgrub-resolver"]

Comando generado:

cd "/Users/username/Projects/MySwiftPackage" && swift package update --enable-pubgrub-resolver

Salida de muestra:

Resolving dependencies...
Fetching https://github.com/example/example-package.git
Checking out https://github.com/example/example-package.git at 1.2.3

8. simctl-manager

Proporciona acceso a las capacidades de gestión del simulador de iOS mediante la herramienta de línea de comandos simctl. Admite listado, creación, arranque, instalación de aplicaciones y gestión de dispositivos simuladores.

Parámetros:

  • command (obligatorio): Comando SimCtl ("list", "create", "boot", "shutdown", "erase", "install", "launch", "delete")
  • extraArgs (opcional): Argumentos simctl adicionales como matriz de cadenas

Ejemplo:

Command: list
ExtraArgs: ["devices", "--json"]

Comando generado:

xcrun simctl list devices --json

Salida de muestra (abreviada):

{
  "devices": {
    "com.apple.CoreSimulator.SimRuntime.iOS-17-0": [
      {
        "name": "iPhone 14",
        "udid": "12345678-1234-1234-1234-123456789ABC",
        "state": "Booted",
        "isAvailable": true
      }
    ]
  }
}

9. run-on-device

Compila, instala y ejecuta una aplicación en un dispositivo iOS físico. Admite nombre de dispositivo (incluidos nombres en coreano) o UUID para la selección del dispositivo, variables de entorno y transmisión de registros. Ahora con especificación directa de bundleId, opción de omitir compilación y argumentos de lanzamiento adicionales.

Parámetros:

  • projectPath (obligatorio): Ruta al proyecto Xcode (.xcodeproj) o espacio de trabajo (.xcworkspace)
  • scheme (obligatorio): El esquema a compilar y ejecutar
  • device (obligatorio): Identificador o nombre del dispositivo (admite nombres en coreano)
  • configuration (opcional): Configuración de compilación (p. ej., Debug, Release)
  • streamLogs (opcional): Si se deben transmitir los registros del dispositivo después del lanzamiento
  • startStopped (opcional): Si se debe iniciar la aplicación en estado de pausa para adjuntar el depurador
  • environmentVars (opcional): Variables de entorno para pasar a la aplicación (formato clave1=valor1,clave2=valor2)
  • xcodePath (opcional): Ruta de la aplicación Xcode (predeterminado: "/Applications/Xcode-16.2.0.app")
  • listDevices (opcional): Mostrar todos los dispositivos detectados con sus ID antes de ejecutar
  • skipBuild (opcional): Omitir el paso de compilación e instalación para aplicaciones ya instaladas
  • extraLaunchArgs (opcional): Argumentos adicionales para pasar al comando de lanzamiento de devicectl
  • directBundleId (opcional): Especificar directamente el ID del paquete en lugar de extraerlo del proyecto

Ejemplo:

Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
Scheme: MyAppScheme
Device: "Your-iPhone"
Configuration: Debug
StreamLogs: true
EnvironmentVars: "DEBUG_MODE=1,API_URL=https://test-api.example.com"

Proceso:

  1. La herramienta identifica tanto el UDID de Xcode como el UUID de CoreDevice para el dispositivo especificado
  2. Utiliza el UDID de Xcode para compilar e instalar la aplicación
  3. Utiliza el UUID de CoreDevice para lanzar la aplicación con devicectl
  4. Recupera el identificador del paquete de la aplicación
  5. Si se solicita, transmite los registros del dispositivo

Mejoras clave en v0.4.0:

  • Capacidad de especificar bundleId directamente sin necesidad de un proyecto
  • Omitir el paso de compilación e instalación para aplicaciones ya instaladas
  • Soporte para argumentos adicionales del comando de lanzamiento de devicectl
  • Mejor visualización de información del modelo de dispositivo y versión del sistema operativo
  • Manejo mejorado de rutas y registros para comandos devicectl

Salida de muestra:

// Standard output with build and install
앱 실행 결과:
Launched application with com.example.myapp bundle identifier.
로그 스트리밍이 시작되었습니다. 로그는 터미널에서 확인할 수 있습니다.

// Direct bundle ID usage with skip build
기기 모델: iPhone14,7
기기 OS 버전: 17.0
사용자 지정 번들 ID 사용: com.example.myapp
빌드 및 설치 과정 건너뛰기
앱 실행 결과:
Launched application with com.example.myapp bundle identifier.

Escenario de ejemplo: Uso con LLMs

A continuación se muestra un ejemplo de cómo podría solicitar a un LLM como Claude que use estas herramientas en secuencia:

Solicitud del usuario a Claude:

I need to inspect my Xcode project, run some tests, and then archive it for distribution.

1. First, use the xcode-list-schemes tool to get all available schemes for my project at /Users/username/Projects/MyApp/MyApp.xcodeproj
2. After you see the schemes, run tests for the first available scheme on the iPhone 14 simulator.
3. Then archive the app for distribution using the Release configuration.

Flujo de trabajo esperado:

  1. Claude ejecutará la herramienta xcode-list-schemes para recuperar todos los esquemas:

    Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
    
  2. Claude ejecutará la herramienta xcode-test con el esquema identificado:

    Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
    Scheme: [First scheme from output]
    Destination: platform=iOS Simulator,name=iPhone 14
    
  3. Claude utilizará entonces la herramienta xcode-archive para crear un archivo:

    Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
    Scheme: [First scheme from output]
    Configuration: Release
    ArchivePath: /Users/username/Desktop/MyApp.xcarchive
    

Este flujo de trabajo demuestra cómo encadenar múltiples herramientas, utilizando la salida de una herramienta para informar los parámetros de otra.

Ejemplo: Ejecución en un dispositivo real

Solicitud del usuario a Claude:

I need to test my app on a real device:

1. Get the list of available devices (including connected physical devices)
2. Run my app on my connected iPhone 

Flujo de trabajo esperado:

  1. Claude primero obtendrá la lista de dispositivos:

    listDevices: true
    
  2. Claude identificará su dispositivo físico y ejecutará la aplicación en él:

    Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
    Scheme: MyApp
    Device: "Your iPhone" (or the device UUID)
    StreamLogs: true
    
  3. Para un relanzamiento rápido sin recompilar:

    Device: "Your iPhone"
    DirectBundleId: "com.example.myapp"
    SkipBuild: true
    

Consideraciones de seguridad

Esta herramienta puede ejecutar comandos relacionados con Xcode, lo que plantea riesgos de seguridad. Tenga en cuenta:

  • Úsela solo con proyectos Xcode de confianza.
  • Tenga precaución con proyectos de fuentes desconocidas.
  • No incluya información sensible en los parámetros de compilación.

Desarrollo

Requisitos

  • Node.js 16 o superior
  • npm 6 o superior
  • Xcode 14 o superior (para todas las funciones)
  • Xcode 16 o superior (requerido para devicectl y funciones de dispositivo real)

Desarrollo y pruebas locales

# Clone the repository
git clone https://github.com/devyhan/xcode-mcp.git
cd xcode-mcp

# Install dependencies
npm install

# Run in development mode
npm run dev

# Build
npm run build

# Test
npm test

Licencia

MIT