/ Annuaire / Playground / XcodeBuild
● Officiel getsentry ⚡ Instantané

XcodeBuild

par getsentry · getsentry/XcodeBuildMCP

Fermez la boucle sur le coding IA iOS/macOS — compilez, testez, exécutez sur simulateur, capturez les logs et screenshots, tout à partir du chat.

XcodeBuildMCP (par Sentry, ancien membre de getsentry Cameron) encapsule xcodebuild, xcrun simctl et l'environnement d'exécution du simulateur. Permet à un agent de compiler un projet, d'exécuter des tests, de démarrer un simulateur, d'installer l'app, de la piloter et de relire les logs ou screenshots — la boucle de rétroaction manquante pour le code iOS généré par IA.

Pourquoi l'utiliser

Fonctionnalités clés

Démo en direct

Aperçu en pratique

xcodebuild.replay ▶ prêt
0/0

Installer

Choisissez votre client

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

Ouvrez Claude Desktop → Settings → Developer → Edit Config. Redémarrez après avoir enregistré.

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

Cursor utilise le même schéma mcpServers que Claude Desktop. La config projet l'emporte sur la globale.

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

Cliquez sur l'icône MCP Servers dans la barre latérale Cline, puis "Edit Configuration".

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

Même format que Claude Desktop. Redémarrez Windsurf pour appliquer.

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

Continue utilise un tableau d'objets serveur plutôt qu'une map.

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

Ajoutez dans context_servers. Zed recharge à chaud à la sauvegarde.

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

Une seule ligne. Vérifiez avec claude mcp list. Supprimez avec claude mcp remove.

Cas d'usage

Usages concrets : XcodeBuild

Vérifiez que le code iOS généré par IA compile et s'exécute réellement sur un simulateur

👤 Développeurs iOS utilisant Claude pour le développement de fonctionnalités, prototypage SwiftUI ⏱ ~15 min intermediate

Quand l'utiliser : Claude vient d'écrire ou de modifier des vues SwiftUI. Avant de dire « terminé », vous voulez compiler, exécuter sur simulateur et faire une capture d'écran.

Prérequis
  • Xcode installé — Xcode 15+ depuis le Mac App Store ; confirmez avec xcodebuild -version
  • Un simulateur amorçable — Xcode → Settings → Platforms → iOS Simulator téléchargé
Déroulement
  1. Découvrez le projet et compilez
    Trouvez le projet Xcode dans /Users/me/Projects/MyApp. Compilez le scheme 'MyApp' pour la destination iOS Simulator 'iPhone 16'. Signalez toute erreur ou avertissement.✓ Copié
    → La compilation réussit, ou des erreurs spécifiques avec fichier:ligne
  2. Démarrez le simulateur, installez, lancez
    Démarrez un simulateur iPhone 16 s'il n'est pas déjà amorcé. Installez l'app compilée et lancez-la. Prenez une capture d'écran après 3 secondes.✓ Copié
    → App en exécution ; capture d'écran prise
  3. Pilotez la fonctionnalité
    Appuyez sur le bouton 'Sign Up', tapez '[email protected]' dans le champ email, appuyez sur Submit. Capture d'écran après chaque étape.✓ Copié
    → Séquence de captures d'écran montrant le flux ; ou une erreur d'appui claire

Résultat : Des captures d'écran avant/après qui prouvent que la fonctionnalité fonctionne, commitées à côté du code.

Pièges
  • L'appui par coordonnées est fragile selon les tailles d'appareil — Préférez les appuis basés sur le label d'accessibilité lorsque le MCP les prend en charge ; utilisez les coordonnées uniquement comme solution de secours
  • La compilation du simulateur utilise une architecture différente de celle d'un appareil réel — Pour le code sensible à l'architecture, compilez également pour un appareil physique au moins une fois avant de fusionner
Combiner avec : filesystem · github

Exécutez vos tests unitaires et UI Xcode à partir du chat et triez les défaillances

👤 Développeurs iOS qui veulent une rétroaction rapide sur les tests sans basculer vers Xcode ⏱ ~10 min beginner

Quand l'utiliser : Vous avez apporté une modification, voulez exécuter l'équivalent de ⌘U et faire analyser les défaillances par Claude.

Déroulement
  1. Exécutez les tests
    Exécutez tous les tests du scheme 'MyApp' sur la destination 'iPhone 16'. Montrez-moi les défaillances avec fichier, ligne et attente.✓ Copié
    → Compteur de réussite plus liste des défaillances avec emplacements
  2. Concentrez-vous sur une défaillance
    Pour la première défaillance, lisez le fichier source et dites-moi si le test est erroné ou si le code est erroné. Soyez précis.✓ Copié
    → Diagnostic clair, pas 'ça pourrait être l'un ou l'autre'
  3. Corrigez et réexécutez
    Appliquez la correction. Réexécutez uniquement le test défaillant pour confirmer qu'il est vert.✓ Copié
    → Réexécution verte

Résultat : Tests à nouveau verts avec une réexécution ciblée, pas une réexécution complète.

Pièges
  • xcodebuild test est lent sur les caches froids — Utilisez le drapeau -only-testing: pour réduire ; le MCP l'expose via test-by-identifier
Combiner avec : github

Diagnostiquez une erreur de compilation Xcode cryptique

👤 Développeurs iOS qui frappent un mur 'erreur d'éditeur de liens / framework manquant / signature' ⏱ ~20 min intermediate

Quand l'utiliser : xcodebuild échoue et la sortie d'erreur est 4000 lignes de bruit.

Déroulement
  1. Compilez et capturez l'échec brut
    Compilez le scheme 'MyApp' et retournez uniquement les lignes contenant 'error:' ou 'warning:', plus 3 lignes de contexte autour de chacune.✓ Copié
    → Liste d'erreurs ciblée sans bruit
  2. Expliquez la première erreur
    Expliquez la première erreur en termes humains. De quoi Xcode se plaint-il réellement, et quelles sont les 3 principales causes ?✓ Copié
    → Diagnostic en langage clair avec les causes probables
  3. Appliquez la correction et reconstruisez
    Appliquez la correction la plus probable (vérifiez Info.plist/entitlements/Package.swift selon les besoins), reconstruisez et confirmez que l'erreur est partie.✓ Copié
    → Compilation propre

Résultat : Débloquez-vous du mur de compilation sans un trou de lapin Stack Overflow de 2 heures.

Pièges
  • Certaines erreurs sont une staleness DerivedData — En dernier recours : nettoyez DerivedData via l'outil de nettoyage du MCP, puis reconstruisez
Combiner avec : filesystem

Capturez un plantage d'app sur simulateur et trouvez la cause première

👤 Développeurs iOS à la recherche d'un plantage reproductible ⏱ ~20 min advanced

Quand l'utiliser : Votre app plante sur un flux spécifique dans le simulateur, et vous voulez que Claude lise le journal de plantage.

Déroulement
  1. Reproduisez avec capture de log
    Lancez MyApp sur le simulateur iPhone 16. Démarrez la capture de log. Effectuez ce flux : ouvrez Settings, appuyez sur 'Clear Cache'. Arrêtez la capture de log lorsque l'app meurt.✓ Copié
    → Plantage reproduit, logs sauvegardés
  2. Analysez le plantage
    Trouvez le plantage dans les logs capturés. Symbolifiez si nécessaire. Dites-moi le thread défaillant, les 5 premiers cadres de pile et la ligne probable dans notre code.✓ Copié
    → Trace de pile symbolifiée pointant vers un fichier source spécifique
  3. Proposez la correction
    En fonction de la trace de pile et du code environnant, quel est le changement minimum pour le corriger ? Appliquez-le.✓ Copié
    → Correction ciblée, pas une grande refonte

Résultat : Un plantage corrigé avec des preuves symbolifiées que vous pouvez coller dans la PR.

Pièges
  • Les plantages Release-config ne se symbolifient pas sans dSYM — Utilisez la configuration Debug pour la reproduction ; testez séparément Release pour confirmer la correction
Combiner avec : sentry · github

Combinaisons

Associez-le à d'autres MCPs pour un effet X10

xcodebuild + filesystem

Modifiez Swift → compilez → capture d'écran → itérez, entièrement dans un chat

Modifiez ContentView.swift pour ajouter un basculement de mode sombre. Compilez MyApp pour iPhone 16, exécutez-le, prenez une capture d'écran en mode clair et en mode sombre.✓ Copié
xcodebuild + github

Corrigez un problème, vérifiez sur simulateur, ouvrez une PR avec une capture d'écran

L'issue #42 dit que le bouton de connexion est mal aligné en mode paysage. Reproduisez sur le simulateur iPad, corrigez la disposition SwiftUI, joignez les captures d'écran avant/après à la PR.✓ Copié
xcodebuild + sentry

Reproduisez un plantage signalé par Sentry sur simulateur avec des conditions identiques

Le plantage Sentry iOS-113 s'est produit sur iOS 18.1 avec la locale utilisateur fr-FR. Démarrez un simulateur correspondant, reproduisez et corrigez.✓ Copié

Outils

Ce que ce MCP expose

OutilEntréesQuand appelerCoût
discover_projects directory: str Trouvez ce qu'il faut compiler dans un repo sans saisir de chemin free
build_project project: str, scheme: str, destination: str, configuration?: 'Debug'|'Release' Compilez un .xcodeproj ou .xcworkspace pour une destination free
build_spm_package path: str Compilez un Swift Package (pas de .xcodeproj) free
test_project project, scheme, destination, only_testing?: str[] Exécutez la suite de tests ; utilisez only_testing pour réduire free
list_simulators aucun Voyez quels simulateurs existent et lesquels sont amorcés free
boot_simulator simulator_id or name: str Amenez un simulateur avant d'installer des apps free
install_app simulator_id: str, app_path: str Installez le .app compilé sur un simulateur amorcé free
launch_app simulator_id: str, bundle_id: str Démarrez l'app installée free
tap_at / type_text / send_url paramètres du simulateur Pilotez l'UI free
screenshot simulator_id: str, path?: str Capturez l'état visuel free
start_log_capture / stop_log_capture simulator_id Capturez les logs de console/système pour une session free
clean project, scheme? Supprimez DerivedData pour ce projet lorsque les compilations s'avèrent bizarres free

Coût et limites

Coût d'exécution

Quota d'API
Aucune — tout s'exécute localement via xcodebuild/simctl
Tokens par appel
Les logs de compilation peuvent être énormes. Préférez filtrer par erreurs/avertissements plutôt que des vidages de log complets
Monétaire
Gratuit (nécessite un Mac avec Xcode, ce qui a son propre coût)
Astuce
Exécutez des compilations incrémentielles, pas des compilations propres, par défaut. Nettoyez uniquement lorsque DerivedData devient bizarre.

Sécurité

Permissions, secrets, portée

Stockage des identifiants : Pas de credentials au niveau du MCP. Les credentials de signature du code vivent dans le Keychain de votre Mac comme d'habitude.
Sortie de données : Aucune sortie du MCP. xcodebuild peut récupérer les dépendances (SPM, CocoaPods) de leurs sources habituelles.
Ne jamais accorder : ne laissez pas l'agent modifier les identités de signature du code ou les profils de provisioning sans confirmation

Dépannage

Erreurs courantes et correctifs

xcodebuild : commande non trouvée

Les Xcode Command Line Tools sont manquants ou non sélectionnés. Exécutez xcode-select --install puis sudo xcode-select -s /Applications/Xcode.app/Contents/Developer.

Vérifier : xcodebuild -version
Pas de destination 'iPhone 16'

Le simulateur portant ce nom n'est pas téléchargé pour l'Xcode actif. Ouvrez Xcode → Settings → Platforms → téléchargez l'environnement d'exécution iOS. Ou utilisez list_simulators et en choisissez un existant.

Vérifier : xcrun simctl list devices
La compilation réussit mais l'app ne se lance pas — 'NSException'

Vérifiez les logs de l'app via start_log_capture juste avant de lancer. Souvent, Info.plist manque de clé, ou entitlements ne correspondent pas.

Les tests s'arrêtent sur un aperçu SwiftUI

Les aperçus SwiftUI peuvent bloquer xcodebuild test dans de rares cas. Désactivez les assistants d'aperçu dans les schemes de test, ou exécutez avec -disable-concurrent-testing.

Alternatives

XcodeBuild vs autres

AlternativeQuand l'utiliserCompromis
Shell MCP direct pour xcodebuildVous voulez une flexibilité maximale et acceptez le compromis de sécurité d'un MCP shell brutPas d'ergonomie ; Claude doit connaître tous les drapeaux xcodebuild
JetBrains MCP (AppCode is EOL)Vous êtes dans JetBrains IDE — ne s'applique plus à iOSPas une alternative iOS aujourd'hui
Fastlane via shellVous avez besoin de compilations signées et de téléchargements TestFlight, pas seulement de vérification du simulateurBeaucoup plus lourd ; hors du champ d'application du développement inner-loop

Plus

Ressources

📖 Lire le README officiel sur GitHub

🐙 Voir les issues ouvertes

🔍 Parcourir les 400+ serveurs MCP et Skills