Le plugin Xcode d'Apple pour Claude Code : ce qu'il installe
Le plugin xcode d’Apple pour Claude Code tient en 15 lignes dans la marketplace officielle d’Anthropic, sans aucun fichier : l’entrée stocke une seule commande, xcrun agent plugin path --plugin-format claude, et c’est le Xcode de votre propre Mac qui écrit le plugin quand cette commande s’exécute.12 L’entrée a été fusionnée le 6 novembre 2026 (UTC). Je n’ai trouvé aucune annonce d’Apple ni d’Anthropic aux endroits que j’ai vérifiés.2 Sur Xcode 27.2, la commande affiche un répertoire de 160 fichiers : 16 skills et une entrée de serveur MCP, sans hooks ni agents. L’inventaire que dresse Claude Code lui-même estime à environ 4 463 tokens ce qui s’ajoute à chaque session, et la commande du bridge que nomme cette entrée de serveur a listé 54 outils dans l’une de mes sessions.2 J’ai lu le répertoire et je l’ai chargé dans des sessions jetables avec --plugin-dir. Je n’ai pas accepté l’installation depuis la marketplace, et chaque section précise d’où vient chaque affirmation.
TL;DR
- L’entrée de la marketplace contient une commande, pas un plugin. Toutes les autres entrées qui vont chercher leur contenu hors du catalogue portent un SHA de commit.
xcoden’a rien à épingler, et c’est le seul nom inscrit sur une liste d’exemptions dans le validateur de la marketplace.13 - Installer, c’est faire accepter cette commande par une personne. Claude Code l’affiche et pose la question, et l’option qui permet de sauter la question reste sans effet quand un agent lance l’installation depuis l’intérieur d’une session.6
- Vous pouvez tout lire au préalable. La commande affiche le répertoire, et
claude --plugin-dir <dir> plugin details xcode-integrationen dresse l’inventaire sans démarrer de session.72 - Sur Xcode 27.2, l’inventaire compte 16 skills, zéro agent, zéro hook et un serveur MCP qui exécute
xcrun mcpbridge. Une session vous liste 15 de ces skills. L’en-tête du seizième le réserve au modèle.29 - Si vous avez déjà ajouté le bridge avec
claude mcp add, Claude Code écarte la copie du plugin comme doublon. Sur mon Mac, le plugin a ajouté les skills et rien d’autre.28 - L’acceptation porte sur la chaîne de la commande. Ce que la commande affiche dépend du Xcode que vous avez sélectionné, et aucune modification du catalogue ne signale la différence.45
Ce qui est arrivé dans la marketplace
Le référencement tient tout entier en un seul objet JSON. Le voici tel qu’il figurait dans anthropics/claude-plugins-official le 11 novembre 2026, inchangé depuis la fusion :1
{
"name": "xcode",
"displayName": "Xcode",
"description": "Work with Xcode projects from Claude Code: build, run, and test schemes, render SwiftUI previews, drive simulators and devices, read build logs and diagnostics, and search Apple developer documentation.",
"author": {
"name": "Apple Inc."
},
"category": "development",
"source": {
"source": "command",
"command": "xcrun agent plugin path --plugin-format claude",
"mode": "link"
},
"homepage": "https://developer.apple.com/xcode/"
}
Le catalogue comptait 317 plugins ce jour-là. Je les ai classés selon la provenance de leur contenu :1
| Type de source | Entrées | Épinglées à un SHA de commit |
|---|---|---|
| Un dépôt git, par URL | 163 | Les 163 |
| Un sous-répertoire d’un dépôt git | 99 | Les 99 |
| Un dossier à l’intérieur du dépôt de la marketplace | 54 | Sans objet ; le dossier fait partie de l’historique du catalogue lui-même |
| Une commande exécutée sur votre machine | 1 (xcode) |
Non ; il n’y a rien à épingler |
L’historique de l’arrivée de l’entrée montre à quel point elle est inhabituelle. Un contributeur a ouvert la pull request #6259, intitulée « Add Xcode plugin (xcode) », le 18 septembre 2026. Un bot a répondu que le dépôt n’accepte que les contributions des membres de l’équipe d’Anthropic, et un mainteneur a approuvé la modification 19 minutes après son ouverture. Le 30 septembre, une seconde pull request, la #6338, a reporté le même commit sur une branche à l’intérieur du dépôt pour que ses vérifications puissent s’exécuter.1
Les vérifications ne passaient pas en l’état. Une troisième pull request, la #7015, indique que le validateur de la marketplace rejetait l’entrée Xcode sur trois points : elle n’a pas de SHA, les espaces de sa commande comptent comme des métacaractères du shell, et elle n’a aucune URL à cloner. Le correctif a fait passer le workflow à une version du validateur dotée d’un nouveau paramètre d’entrée command-exempt et a donné à ce paramètre la valeur "xcode". Le commentaire placé au-dessus de la ligne qualifie chaque nom de la liste de « listing decision » qui requiert l’aval de l’équipe chargée des opérations de la marketplace.3 Les trois pull requests ont été clôturées le 6 novembre (UTC) en l’espace de neuf minutes : la #7015 a été ouverte à 00:49 et fusionnée à 00:53, la #6338 a été fusionnée à 00:55, et la #6259 a été fermée comme doublon à 00:58.13
Aucune des deux entreprises n’en a rien dit, du moins rien que j’aie pu trouver. Le 11 novembre, j’ai vérifié les flux d’Apple consacrés aux actualités pour les développeurs, aux versions et à la newsroom, la page Xcode d’Apple, la page d’actualités d’Anthropic et le blog de Claude, et je n’y ai trouvé aucune mention du plugin. La documentation d’Apple pour les agents externes décrit toujours l’ajout du bridge à la main avec claude mcp add et ne mentionne aucun plugin.210 Ce qui fonde l’attribution du plugin à Apple, c’est le champ auteur de l’entrée et le fait que la commande est livrée à l’intérieur de Xcode.
L’entrée stocke une commande, pas un plugin
Claude Code a ajouté le type de source command dans la version 2.1.229, le 12 août 2026.6 La documentation le décrit comme la source à utiliser lorsqu’un outil présent sur la machine de l’utilisateur produit le répertoire du plugin, et son exemple est un IDE qui génère un plugin pour la chaîne d’outils que l’utilisateur a sélectionnée.4 Le contrat est court :
- La commande affiche une seule ligne, le chemin absolu d’un répertoire de plugin, et se termine avec le code 0. La limite de temps par défaut est de 60 secondes, et l’entrée Xcode n’en fixe aucune qui lui soit propre.41
- Claude Code exécute la commande quand vous installez ou mettez à jour le plugin, puis de nouveau une fois par session pour un plugin activé, en arrière-plan, peu après le démarrage de la session. Il saute les exécutions en arrière-plan lorsque
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICest défini.5 - En mode
link, celui qu’utilise l’entrée Xcode, Claude Code ne copie rien. Il crée des liens vers les entrées de premier niveau du répertoire et charge les fichiers là où ils se trouvent. La version est tirée du chemin réel du répertoire et de ses entrées de premier niveau, pas du contenu des fichiers.4 - Claude Code n’exécute que la commande exacte qu’une personne a acceptée. Si une marketplace modifie par la suite la commande ou son mode, les exécutions en arrière-plan s’arrêtent jusqu’à ce que chaque utilisateur accepte la nouvelle.5
- Une organisation peut désactiver le type de source tout entier avec le paramètre géré
disableCommandPluginSources.4
Ces règles s’accordent avec le nom de répertoire qu’utilise Xcode. Sur mon Mac, la commande affiche un chemin qui porte le numéro de build de Xcode (nom d’utilisateur remplacé) :
$ xcrun agent plugin path --plugin-format claude
/Users/<you>/Library/Developer/Xcode/CodingAssistant/ExportedPlugins/27B52/claude
Un nouveau build de Xcode signifie un nouveau chemin, et c’est un nouveau chemin qui indique à Claude Code que le plugin a changé. Le répertoire étant déjà construit et aucune application Xcode n’étant en cours d’exécution, la commande a rendu la main en 0,2 seconde environ lors de trois exécutions chronométrées. Sur mon Mac, le mode MCP headless de Xcode est activé : c’est l’aperçu qu’active sudo xcrun mcp-server enable et dont traite une section plus bas. Ici, le premier appel pour chaque build de Xcode a écrit le répertoire en passant par Xcode Service, un auxiliaire d’arrière-plan situé dans le bundle de Xcode, et non par l’application Xcode. Je n’ai chronométré que des appels visant un répertoire qui existait déjà, et je n’ai pas exécuté la commande avec ce mode désactivé.2
Les mêmes règles changent ce qu’un examen peut couvrir. La documentation de sécurité de Claude Code vous dit de lire la source d’un plugin avant de l’installer : ouvrir la page d’accueil ou le dépôt de la marketplace et y trouver le répertoire du plugin.7 Pour xcode, la page d’accueil est la page produit de Xcode chez Apple, et le dépôt contient les 15 lignes ci-dessus. Le contenu du plugin n’existe qu’une fois que votre Xcode l’a écrit : l’examen se fait donc sur votre Mac, sur votre build de Xcode.
Ce que Claude Code vous demande d’accepter
Comme l’installation exécute un programme, Claude Code affiche la commande et pose la question avant de l’exécuter. Dans un terminal, la question est Run this command now? [y/N].6 J’ai lancé l’installation sur Claude Code 2.1.322 depuis un shell auquel aucun terminal n’était attaché, et elle a refusé au lieu de poser la question. Les quatre premières lignes de sa sortie :2
$ claude plugin install xcode@claude-plugins-official --scope local
"xcode" is installed by running a command from marketplace "claude-plugins-official" on this machine:
xcrun agent plugin path --plugin-format claude
(mode "link": its output directory is used in place (linked, not copied))
Not an interactive terminal, so the command was only displayed, not accepted. Run this in your own terminal (outside the Claude Code session) to confirm the command shown above.
Trois détails de cette étape comptent.
Un agent ne peut pas accepter à votre place. -y accepte la commande affichée depuis votre propre terminal. La référence de la CLI indique que Claude Code ignore cette option quand l’installation s’exécute à l’intérieur d’une session, depuis l’outil Bash ou depuis un hook.6 Si vous demandez à Claude Code d’installer le plugin, attendez-vous à ce qu’il vous remette la commande entre les mains.
Un script peut accepter une commande précise, et une seule. Avec --json, l’installation refusée renvoie un objet shownCommand, et --accept-command <sha256>, ajouté dans la 2.1.271, accepte cette commande et aucune autre. La référence dit de le passer depuis votre propre terminal, car l’option est sans effet à l’intérieur d’une session Claude Code : un agent ne peut donc pas non plus accepter par hash. La documentation lie le hash à la commande, au plugin et au catalogue de la marketplace, et indique que Claude Code affiche de nouveau la commande si l’un des trois a changé.6 Le mien, extrait du résultat d’une seule ligne et remis en forme :2
"shownCommand": {
"kind": "command_source",
"pluginId": "xcode@claude-plugins-official",
"command": "xcrun agent plugin path --plugin-format claude",
"mode": "link",
"catalogRevision": "gcs:43fd1f9db0941b2b83cb62268e35970d4a67c202",
"sha256": "b6a49a80f0917b25ceb38fa52e95dacca7ad78893aeb9f0463c62b3d73ca1a48"
}
Prenez la valeur dans votre propre exécution avec --json. La valeur ci-dessus diffère d’un simple SHA-256 de la chaîne de la commande, que j’ai calculé pour comparer, et la documentation indique qu’un hash cesse de compter dès que le catalogue change. Claude Code peut refuser une valeur copiée depuis cet article.26
Une session a sa propre voie. Le reste du message de refus nomme un second endroit où accepter : le volet de détails du plugin, sous /plugin. Je n’ai pas ouvert ce volet pour xcode.2
Lisez le plugin avant de l’accepter
La commande que la marketplace veut exécuter, vous pouvez l’exécuter vous-même. Trois lignes vous montrent ce que l’installation lierait :
# 1. Ask Xcode for the directory. The first call for an Xcode build writes it.
DIR="$(xcrun agent plugin path --plugin-format claude)"
# 2. Inventory it without starting a session.
claude --plugin-dir "$DIR" plugin details xcode-integration
# 3. Read the one file that starts a process.
cat "$DIR/.mcp.json"
La ligne 2 est la façon documentée de lister ce que Claude Code trouve dans un répertoire de plugin : elle lit les fichiers sans démarrer de session.7 Le nom à passer est celui qui figure dans le manifeste du plugin, xcode-integration. Avec le nom du catalogue, xcode, la même commande répond Plugin "xcode" not found.2 Sur Xcode 27.2 (27B52) et Claude Code 2.1.322, la première partie de l’inventaire indiquait :2
xcode-integration 1.0.0
Description: Xcode-managed plugin for skills and services that integrate with the IDE.
Source: xcode-integration@inline
Component inventory
Skills (16) accessibility-dynamic-type-specialist, accessibility-sufficient-contrast-specialist, accessibility-voiceover-specialist, adopt-c-bounds-safety, app-intents-specialist, app-intents-whats-new-27, app-resizability, audit-xcode-security-settings, building-document-based-swiftui-applications, device-interaction, modernize-tests, swiftui-specialist, swiftui-whats-new-27, translation, translation-coordinator, xctrace
Agents (0)
Hooks (0)
MCP servers (1) xcode (tool schemas resolved at runtime; not counted)
LSP servers (0)
Projected token cost
Always-on: ~4,463 tok added to every session
La page de sécurité de Claude Code énumère les parties d’un plugin qui exécutent du code d’elles-mêmes, hors des règles d’autorisation qui régissent les appels d’outils de Claude : les hooks, les monitors, les mods et les processus de serveurs MCP et LSP.7 Le répertoire d’Apple en contient une, le serveur MCP. Son premier niveau compte trois entrées : le dossier du manifeste, .mcp.json et skills/. Les 160 fichiers se répartissent en 157 fichiers Markdown, deux fichiers JSON et un script Python. Ce script compte 69 lignes et se trouve dans le skill audit-xcode-security-settings ; il n’importe que argparse, json, re et pathlib, et sa propre description indique qu’il filtre une sortie enregistrée de réglages de build pour n’en garder que les entrées pertinentes pour la sécurité. Il ne s’exécute que si un agent l’exécute.2
claude plugin validate valide le répertoire avec un seul avertissement : le manifeste ne nomme aucun auteur. La même exécution applique un sous-ensemble des vérifications de soumission de l’annuaire claude.ai d’Anthropic, une liste distincte de la marketplace officielle. Ces vérifications signalent deux problèmes pour lesquels cet annuaire refuserait une soumission, l’absence de README et l’absence de LICENSE, et un avertissement, l’absence d’icône. Elles ne concernent pas ce référencement : le guide de publication indique que la marketplace officielle n’accepte aucune soumission par le portail de cet annuaire.212 Le dossier n’énonce aucune condition de licence qui lui soit propre. Je le traite comme une partie de Xcode.
Ce que reçoit une session : 16 skills, dont 15 listés
J’ai chargé le répertoire dans des sessions à prompt unique, dans un projet vide, avec claude -p --plugin-dir "$DIR". Un plugin chargé avec --plugin-dir ne dure que le temps de cette session et n’installe rien.2
L’événement d’ouverture de la session listait le plugin sous le nom xcode-integration@inline, version 1.0.0, et le journal de débogage a enregistré 16 skills chargés depuis ce plugin. La liste de skills et de commandes slash de la session elle-même en contenait 15. Le skill manquant, translation-coordinator, définit user-invocable: false dans son en-tête, le paramètre qui masque un skill dans le menu / tout en laissant Claude l’invoquer.9 Quand j’ai demandé au modèle, dans la même session, d’afficher les skills dont il disposait, il a affiché 16 noms, dont le coordinateur. Cette dernière vérification est le compte rendu du modèle lui-même.2
Chaque nom porte le préfixe xcode-integration:, comme dans /xcode-integration:swiftui-specialist. Le catalogue appelle le plugin xcode et le manifeste l’appelle xcode-integration, et la référence de chargement de Claude Code indique que les deux noms n’ont pas le même rôle : le nom du catalogue est la clé d’installation, et le nom du manifeste est l’espace de noms des composants du plugin.5 J’ai observé le préfixe avec --plugin-dir. Pour une installation depuis la marketplace, je m’en remets à cette page.
L’estimation par Claude Code du coût de chaque skill, tirée du reste de la même sortie, avec en regard le nombre d’outils du bridge que nomment les fichiers du skill, s’il y en a :2
| Skill | Toujours en contexte | À l’invocation | Outils du bridge qu’il nomme |
|---|---|---|---|
app-intents-specialist |
~930 | ~2.2k | Aucun |
app-intents-whats-new-27 |
~780 | ~3.3k | Aucun |
swiftui-specialist |
~340 | ~1.5k | Aucun |
swiftui-whats-new-27 |
~340 | ~1.6k | Aucun |
adopt-c-bounds-safety |
~320 | ~740 | Aucun |
building-document-based-swiftui-applications |
~310 | ~900 | Aucun |
app-resizability |
~230 | ~6.9k | Aucun |
audit-xcode-security-settings |
~210 | ~21.7k | 11 |
accessibility-voiceover-specialist |
~180 | ~6.9k | 1 |
xctrace |
~170 | ~380 | Aucun |
translation |
~160 | ~9k | 4 |
translation-coordinator (modèle uniquement) |
~150 | ~4.2k | 4 |
accessibility-dynamic-type-specialist |
~140 | ~3.6k | 1 |
accessibility-sufficient-contrast-specialist |
~120 | ~4.9k | 1 |
device-interaction |
~50 | ~4.6k | 4 |
modernize-tests |
~40 | ~3.5k | Aucun |
Les chiffres sont des tokens, et ce sont les estimations de l’outil. Les lignes sont arrondies et totalisent environ 4 470 ; le total de Claude Code lui-même est celui indiqué plus haut, environ 4 463. Les deux skills App Intents en représentent environ 1 710, parce que leurs descriptions sont longues. L’estimation laisse de côté les schémas d’outils du serveur MCP, que l’inventaire dit résoudre à l’exécution. Ce qu’enseigne chaque skill figure dans mon article plus long sur les skills que livre Xcode 27 et les deux voies pour les en sortir.
La moitié MCP : une entrée de serveur, 54 outils ici
Le .mcp.json déclare un serveur stdio nommé xcode dont la commande est xcrun mcpbridge. La documentation d’Apple donne la même commande pour brancher le bridge à la main : claude mcp add --transport stdio xcode -- xcrun mcpbridge.10 Mes sessions Claude Code avaient déjà cette entrée. Dans une session avec l’entrée ajoutée à la main et sans le plugin, le bridge s’est connecté en 339 millisecondes, s’est identifié comme xcode-tools version 25464 et a listé 54 outils.2 L’un de mes articles précédents citait 20 outils pour le bridge dans Xcode 26.3, un décompte que cet article fonde sur mes tests de l’époque et sur un guide pas à pas tiers vers lequel il renvoie.
J’ai regroupé les 54 d’après leur nom :2
| Domaine | Outils | Exemples |
|---|---|---|
| Fichiers et structure du projet | 15 | XcodeRead, XcodeWrite, XcodeUpdate, XcodeRM, XcodeNewTarget |
| Build, exécution et diagnostics | 11 | BuildProject, RunProject, GetBuildLog, XcodeRefreshCodeIssuesInFile |
| Réglages de build, options de compilation, entitlements, Info.plist | 6 | GetTargetBuildSettings, UpdateTargetBuildSetting, AddEntitlement |
| Tests | 5 | GetTestList, RunSomeTests, RunAllTests |
| Interaction avec l’appareil et le simulateur | 5 | DeviceInteractionStartSession, DeviceInteractionSynthesize |
| String Catalogs et localisation | 4 | LocalizationPlanner, StringCatalogEdit |
| Rapports de plantage et de performances sur le terrain | 4 | GetTopCrashIssues, GetFieldPerformanceIssueLogs |
| Aperçus, extraits de code et débogueur | 3 | RenderPreview, RunCodeSnippet, InvokeDebuggerCommand |
| Documentation | 1 | DocumentationSearch |
La liste va plus loin que ne le laisse entendre la description de la marketplace. XcodeRM retire des fichiers du projet et, par défaut, place les fichiers sous-jacents dans la Corbeille. InvokeDebuggerCommand envoie une commande lldb à la session de débogage active de Xcode. GetTopCrashIssues se décrit comme récupérant les signatures de plantage de votre application auprès du service de rapports de plantage d’Apple.2 Chacune de ces opérations est un appel d’outil : les règles d’autorisation de Claude Code s’y appliquent donc. Le processus du serveur, lui, s’exécute en dehors de la sandbox, comme le serveur MCP de tout plugin.7
Les skills et les outils renvoient les uns aux autres. Sept des 16 skills nomment des outils du bridge par leur simple nom. L’un des sept, audit-xcode-security-settings, donne aussi la forme préfixée générique mcp__<server>__XcodeGlob, précise que le nom du serveur varie selon l’environnement et demande à l’agent de ne pas en coder un en dur. La dépendance joue aussi dans l’autre sens. Les descriptions des quatre outils de String Catalogs et de localisation demandent toutes à l’agent d’activer un skill du plugin avant d’appeler l’outil : LocalizationPlanner et StringCatalogRead nomment xcode-integration:translation-coordinator, et StringCatalogContext et StringCatalogEdit nomment xcode-integration:translation. Les 50 autres descriptions ne nomment aucun skill.2 Une session avec le bridge ajouté à la main et sans plugin dispose des quatre outils et d’aucun des deux skills. Un commentateur de la pull request fusionnée a demandé ce qu’apporte le référencement, puisque le serveur MCP de Xcode fonctionnait déjà.1 Sur mon Mac, la réponse, ce sont les skills, et quatre des outils du bridge lui-même en réclament deux par leur nom.
Si vous avez déjà ajouté le bridge à la main
Claude Code classe les définitions de serveurs MCP : d’abord les portées locale, projet et utilisateur, puis les serveurs que fournissent les plugins, puis les connecteurs claude.ai. Un serveur qu’une organisation fournit par les paramètres gérés se classe au-dessus de tous ceux-là. Claude Code compare le serveur d’un plugin aux autres d’après leur endpoint : un serveur de plugin ayant la même commande qu’un serveur que vous avez configuré compte donc comme un doublon, et Claude Code se connecte une seule fois, en utilisant votre définition.8
Mes sessions ont montré exactement cela. Avec le plugin chargé à côté de mon entrée xcode de portée utilisateur, la liste des serveurs de la session contenait xcode avec la source user et aucune entrée pour le serveur du plugin, et le journal de débogage disait pourquoi (horodatage et niveau de journalisation retirés) :2
Suppressing plugin MCP server "plugin:xcode-integration:xcode": duplicates manually-configured "xcode"
L’effet pratique tient aux noms. Tant que l’entrée ajoutée à la main reste en place, les outils gardent les noms mcp__xcode__BuildProject, mcp__xcode__XcodeRead, et ainsi de suite. La documentation donne au serveur d’un plugin le nom plugin:<plugin>:<server> et à ses outils la forme mcp__plugin_<plugin>_<server>__<tool>, et précise que la forme des outils est celle à utiliser dans les règles d’autorisation et les matchers de hooks.8 D’après cette règle, une session avec le plugin et sans entrée ajoutée à la main appellerait le même outil mcp__plugin_xcode-integration_xcode__BuildProject. Je n’ai pas mesuré cette configuration, car la mienne comporte l’entrée ajoutée à la main. Si vous avez des règles d’autorisation de type allow ou des hooks écrits pour des noms en mcp__xcode__, retirer l’entrée ajoutée à la main après avoir installé le plugin revient à un renommage, d’après la règle de nommage de la documentation.
Deux couches d’autorisation, et l’installation n’en touche qu’une
Accepter la commande règle le côté Claude Code. Xcode garde sa propre barrière, et rien dans le répertoire du plugin ne peut l’ouvrir : le répertoire n’a ni hooks ni étape d’installation.
Apple documente cette barrière pour un Xcode en cours d’exécution. Dans les réglages Intelligence de Xcode, sous Model Context Protocol, un menu local nommé « Allow External Agents to Use Xcode Tools » propose Always, « While Xcode is Open » et Never, et Xcode vous alerte quand un agent externe se connecte.10 Les notes de version de Xcode 27 décrivent un second dispositif, un aperçu d’un serveur MCP qui fonctionne sans espace de travail ouvert. Il reste désactivé tant que vous n’avez pas exécuté sudo xcrun mcp-server enable, et il vous permet d’accorder à des agents dont le code est signé l’autorisation d’utiliser les projets situés dans une arborescence de répertoires.11
Mon Mac fonctionne selon le second dispositif. xcrun mcp-server status indique que l’autorisation est activée, avec un agent autorisé et 11 dossiers autorisés.2 L’agent autorisé est Claude Code lui-même, identifié par sa signature de code : je m’attends donc à ce qu’un bridge démarré par le plugin relève de la même autorisation. Je ne l’ai pas testé. Je n’ai pas vu non plus ce que demande Xcode sur un Mac où vous n’avez approuvé aucun agent et où le plugin est le premier à démarrer le bridge.
Ce qui change quand Xcode change
Une entrée de marketplace épinglée change quand le catalogue change. L’entrée Xcode change quand Xcode change. Trois builds de Xcode sur mon Mac, la release candidate 27.1 (27A9275), la bêta 27.2 (27B5019j) et la 27.2 (27B52), ont produit trois répertoires, de 15, 15 et 16 skills. Dans la bêta 27.2, le skill que les deux autres builds appellent app-resizability se nomme uikit-app-modernization, et xctrace n’existe que dans le 27B52.2
Le mécanisme, c’est l’exécution une fois par session. Mettez Xcode à jour, ou sélectionnez-en une autre copie, et la commande affiche un chemin différent à sa prochaine exécution, c’est-à-dire, avec un plugin installé et activé, normalement lors de l’exécution en arrière-plan de la session suivante. La référence de chargement indique que Claude Code installe alors le résultat comme une nouvelle version et le recharge dans la session interactive en cours, avec une notification, ou vous invite à exécuter /reload-plugins lorsqu’un rechargement sur place invaliderait le cache de prompt de la session.5 Votre acceptation antérieure reste valable, car la chaîne de la commande est la même. Je n’ai pas vu ce rechargement se produire, puisque je n’ai pas installé le plugin.
Deux habitudes en découlent. Relancez les trois lignes d’examen après une mise à jour de Xcode, comme vous liriez un changelog, et commencez par la première, car le chemin change avec le build. Et si une commande d’agent n’affiche rien après une mise à jour de Xcode, cherchez d’abord un Xcode que vous n’avez pas ouvert (pgrep -lx Xcode). Sur mon Mac, d’autres commandes xcrun agent se sont bloquées pendant qu’un Xcode masqué attendait sur son écran de premier lancement, la cause probable que j’ai retracée dans l’article plus long. xcrun agent plugin path ne s’est bloquée dans aucune de mes exécutions. Si elle dépasse un jour la limite de 60 secondes, la documentation indique que l’installation ou la mise à jour échoue.4
Trois façons de brancher Xcode sur Claude Code
| Bridge ajouté à la main | --plugin-dir, une session |
Installation depuis la marketplace | |
|---|---|---|---|
| Commande | claude mcp add --transport stdio xcode -- xcrun mcpbridge |
claude --plugin-dir "$(xcrun agent plugin path --plugin-format claude)" |
claude plugin install xcode@claude-plugins-official |
| Skills d’Apple | Aucun | 16 sur Xcode 27.2 | 16 sur Xcode 27.2, d’après le répertoire |
| Outils du bridge | 54 ici, nommés mcp__xcode__<tool> |
Ceux de l’entrée ajoutée à la main quand il y en a une ; sinon ceux du serveur propre au plugin, ce que je n’ai pas mesuré | Les mêmes, d’après la documentation |
| Durée | Jusqu’à ce que vous le retiriez | Une session | Jusqu’à ce que vous le désinstalliez ; tant que le plugin est activé, la commande est normalement exécutée de nouveau à chaque session |
| Ce que vous approuvez | Une commande que vous avez saisie | Une commande que vous avez saisie | Une commande que le catalogue vous montre |
| Mesuré pour cet article | Oui | Oui | Le message de refus uniquement |
Points clés
Pour les développeurs iOS qui utilisent Claude Code :
- Exécutez d’abord les trois lignes d’examen. Sur Xcode 27.2, elles montrent 16 skills, un serveur MCP et aucun hook.2
- Installez depuis votre propre terminal avec claude plugin install xcode@claude-plugins-official, et comparez la commande affichée à celle du catalogue : xcrun agent plugin path --plugin-format claude.16
- Comptez environ 4 463 tokens de descriptions de skills dans chaque session, d’après l’estimation de Claude Code, avant qu’une session n’invoque le moindre skill.2
Pour les développeurs qui utilisent déjà le bridge ajouté à la main : - Le plugin ajoute les skills d’Apple. Claude Code écarte le serveur du plugin comme doublon, et les noms de vos outils restent tels quels tant que l’entrée ajoutée à la main reste en place.28 - Les outils de traduction attendent le plugin : les quatre outils de String Catalogs et de localisation demandent tous à l’agent d’activer l’un des deux skills que seul le plugin fournit.2
Pour les équipes qui examinent les outils avant de les utiliser :
- Aucun commit n’épingle le contenu. Examinez le répertoire pour chaque build de Xcode, et traitez une mise à jour de Xcode comme une mise à jour du plugin.14
- --accept-command <sha256> lie une installation scriptée à une commande et à un catalogue examinés, et disableCommandPluginSources désactive le type de source pour une organisation.46
Pour les auteurs de marketplaces et de plugins :
- Une source command fait de l’outil présent sur la machine de l’utilisateur l’éditeur du plugin. La marketplace officielle d’Anthropic admet chacune de ces sources nommément, en tant qu’exemption, inscrite sur une liste, à sa règle d’épinglage.3
FAQ
Qu’est-ce que le plugin Xcode d’Apple pour Claude Code ?
Une entrée nommée xcode dans la marketplace Claude Code officielle d’Anthropic, avec « Apple Inc. » pour auteur. L’entrée ne contient aucun fichier de plugin. Elle stocke la commande xcrun agent plugin path --plugin-format claude, et sur les trois builds de Xcode 27 que j’ai essayés, Xcode a écrit le répertoire du plugin sur mon Mac quand la commande s’est exécutée.12
Comment installer le plugin Xcode dans Claude Code ?
Exécutez claude plugin install xcode@claude-plugins-official dans votre propre terminal et acceptez la commande qui s’affiche. À l’intérieur d’une session, l’endroit où accepter est le volet de détails du plugin, sous /plugin, d’après le message qu’a affiché l’installation refusée.2 Un agent ne peut pas accepter la commande à votre place : Claude Code ignore -y à l’intérieur d’une session.6 Je n’ai pas mené l’installation à son terme moi-même. Avec la portée utilisateur, celle par défaut, vous obtenez le plugin, et ses descriptions de skills toujours en contexte, dans chaque projet de la machine. --scope local le réserve à vous seul dans un seul dépôt, et --scope project l’inscrit dans .claude/settings.json, que vous commitez. Le plugin est ainsi activé pour tous ceux qui travaillent dans le dépôt, sans que rien ne soit téléchargé sur leurs machines : chaque collaborateur exécute donc tout de même l’installation une fois par clone. L’acceptation se fait par utilisateur : chaque personne accepte la commande que Claude Code lui montre. Ma propre tentative utilisait --scope local.26 Pour retirer le plugin par la suite, la même référence donne claude plugin uninstall xcode@claude-plugins-official, avec --scope si vous l’avez installé ailleurs que dans la portée utilisateur par défaut.6
Que contient le plugin ?
Sur Xcode 27.2 (27B52) : 16 skills, un .mcp.json qui déclare un serveur exécutant xcrun mcpbridge, et un manifeste à trois champs. L’inventaire de Claude Code indique zéro agent, zéro hook et zéro serveur LSP.2
Ai-je besoin du plugin si j’ai déjà exécuté claude mcp add pour xcrun mcpbridge ?
Vous en avez besoin pour les skills. Claude Code traite le serveur du plugin comme un doublon du vôtre et l’écarte : les outils ne changent donc pas. Les skills, eux, sont nouveaux, et quatre outils du bridge, ceux de String Catalogs et de localisation, demandent à l’agent d’activer d’abord un skill du plugin.28
Pourquoi Claude Code liste-t-il 15 skills alors que le dossier en contient 16 ?
translation-coordinator définit user-invocable: false. Claude Code masque un tel skill dans le menu / et laisse tout de même le modèle l’invoquer.9 La liste de skills de la session en montrait 15, et le modèle en a déclaré 16.2
Quelle quantité de contexte le plugin utilise-t-il ?
La commande plugin details de Claude Code estime à environ 4 463 tokens, dans chaque session, le coût des 16 descriptions de skills. Invoquer un skill coûte davantage, d’environ 380 tokens pour xctrace à environ 21 700 pour audit-xcode-security-settings. L’estimation exclut les schémas d’outils du serveur MCP.2
Qu’est-ce qui s’exécute sur mon Mac une fois le plugin installé ?
D’après la documentation et le répertoire : la commande acceptée, à l’installation puis normalement une fois par session en arrière-plan tant que le plugin est activé, et le processus du serveur xcrun mcpbridge quand une session s’y connecte. Le répertoire n’a aucun hook.25 Tout le reste est soit un appel à l’un des outils du bridge, que couvrent vos règles d’autorisation, soit du texte de skill, dont la page de sécurité dit qu’il entre dans le contexte de Claude en tant qu’instructions et qu’il oriente ce que Claude fait des outils dont il dispose déjà.7 L’unique script Python, dans audit-xcode-security-settings, ne s’exécute que si un agent l’exécute, et c’est là encore un appel d’outil que couvrent vos règles d’autorisation.
De quel Xcode ai-je besoin ?
xcrun agent plugin a répondu dans les trois builds présents sur mon Mac : la release candidate 27.1 (27A9275), une bêta 27.2 (27B5019j) et la 27.2 (27B52). Je n’ai essayé aucun Xcode antérieur, et aucune des notes de version de Xcode 27 publiées par Apple ne mentionne la commande.211
Ce que j’ai mesuré
Un seul Mac, les 10 et 11 novembre 2026. Considérez ces chiffres comme les observations d’un seul développeur, pas comme la documentation d’Apple ou d’Anthropic.2
- Mac et outils : macOS 27.0 (26A428), Xcode 27.2 (27B52) sélectionné, Claude Code 2.1.322. Le mode MCP headless de Xcode était activé.
- Catalogue :
anthropics/claude-plugins-officialau commit43fd1f9, la tête de branche les deux jours. - Lu sans session : le répertoire qu’affiche
xcrun agent plugin path --plugin-format claude,claude --plugin-dir <dir> plugin details,claude plugin validateet un décompte des fichiers par type. - Sessions : quatre sessions
claude -pà prompt unique dans un projet vide, aucune enregistrée. Trois ont chargé le plugin avec--plugin-dir. Une n’avait que mon bridge ajouté à la main et a demandé à la recherche d’outils de Claude Code les outils du bridge. Aucune session n’a appelé d’outil du bridge. - Installation : refusée par conception dans un shell sans terminal. Je n’ai jamais accepté la commande.
- Descriptions d’outils : les 54 schémas d’outils tels qu’une session Claude Code interactive les a chargés depuis mon bridge ajouté à la main, par la recherche d’outils. La session n’a appelé aucun outil.
- Vérifications d’absence : les flux d’Apple consacrés aux actualités pour les développeurs, aux versions et à la newsroom, la page Xcode d’Apple, la page d’actualités d’Anthropic et le blog de Claude, consultés le 11 novembre et parcourus à la recherche du plugin.
- Non vérifié : l’invite interactive et le volet de détails ; tout ce qui suit une installation depuis la marketplace, y compris l’exécution en arrière-plan, le rechargement après une mise à jour de Xcode et la chaîne de version ; le serveur propre au plugin fonctionnant sans entrée ajoutée à la main ; ce que demande Xcode quand le bridge du plugin est le premier agent qu’il voit ; tout Xcode autre que le 27B52 pour les mesures en session ; un Mac où le mode headless est désactivé.
Les skills eux-mêmes, la seconde voie de sortie de Xcode (xcrun agent skills export) et le blocage que j’ai rencontré sur Xcode 27.2 se trouvent dans Xcode 27 livre des agent skills exportables partout. Deux serveurs MCP ont fait de Claude Code un système de build iOS couvre le bridge ajouté à la main, et Les serveurs MCP sont la nouvelle surface d’attaque explique pourquoi la liste d’outils d’un serveur mérite d’être lue. La configuration dans son ensemble figure dans le guide du développement iOS avec agents.
Références
-
Anthropic,
anthropics/claude-plugins-official,.claude-plugin/marketplace.jsonau commit 43fd1f9, lu le 10 novembre 2026 puis de nouveau le 11 novembre, alors que ce commit était toujours la tête de branche. Source pour l’entréexcodeet pour les décomptes : 317 plugins, dont 163 ont une sourceurlet 99 une sourcegit-subdir, tous dotés d’un champsha, 54 sont des chemins à l’intérieur du dépôt, et un est une sourcecommand. La pull request #6338 a ajouté l’entrée : ouverte le 30 septembre 2026, fusionnée le 6 novembre 2026 à 00:55 UTC, 15 lignes dans un seul fichier, avec une description indiquant qu’elle reporte la modification de la #6259 sur une branche à l’intérieur du dépôt afin que ses vérifications puissent s’exécuter, et un commentaire du 9 novembre demandant ce qu’apporte le référencement par rapport au serveur MCP de Xcode existant. Pull request #6259, « Add Xcode plugin (xcode) » : ouverte le 18 septembre 2026 à 23:12 UTC, une réponse automatisée indiquant que le dépôt n’accepte que les contributions des membres de l’équipe d’Anthropic, une revue d’approbation à 23:31 UTC, fermée comme doublon le 6 novembre 2026 à 00:58 UTC. ↩↩↩↩↩↩↩↩↩↩↩ -
Mesures et vérifications de l’auteur, 10 et 11 novembre 2026, sur la machine et les versions listées sous « Ce que j’ai mesuré ». Sources : la sortie de
xcrun agent plugin path, declaude plugin install(avec et sans--json), declaude --plugin-dir <dir> plugin details, declaude plugin validate, declaude --helpet dexcrun mcp-server status; le contenu du répertoire du plugin, y compris l’en-tête de chaque skill et une recherche des 54 noms d’outils du bridge dans chaque fichier de skill ; l’événement d’ouverture et le journal de débogage de quatre sessions Claude Code à prompt unique ; les 54 descriptions d’outils du bridge telles qu’une session interactive les a reçues ; un SHA-256 de la chaîne de la commande ; et des copies enregistrées des pages nommées sous « Vérifications d’absence ». Les décomptes sont des nombres de fichiers, de dossiers et de noms d’outils tirés de ces sources. Les chiffres en tokens sont les estimations de Claude Code. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Anthropic,
anthropics/claude-plugins-official, pull request #7015, « ci(validate-plugins): re-pin validator and allow the xcode command source », ouverte et fusionnée le 6 novembre 2026 (00:49 et 00:53 UTC). Source pour les trois échecs du validateur sur l’entrée Xcode, le paramètrecommand-exempt: "xcode"et le commentaire du workflow qui qualifie chaque nom exempté de « listing decision » requérant l’aval de l’équipe chargée des opérations de la marketplace. ↩↩↩↩ -
Anthropic, documentation de Claude Code, Marketplace reference, sections « command plugin source » et « Copy mode and link mode », consulté le 11 novembre 2026. Source pour les cas où utiliser une source
commandet son exemple d’IDE, le contrat de sortie sur une seule ligne, letimeoutpar défaut de 60 secondes, les conditions dans lesquelles une installation ou une mise à jour échoue, le mode link qui charge le répertoire sur place avec une version dérivée de son chemin et de ses entrées de premier niveau, et le paramètredisableCommandPluginSources. ↩↩↩↩↩↩↩↩ -
Anthropic, documentation de Claude Code, Plugin loading reference et Host and maintain a marketplace, consultés le 11 novembre 2026. Source pour les moments où une source command s’exécute de nouveau (à chaque installation ou mise à jour, et une fois par session en arrière-plan), le rechargement quand sa sortie change, la différence entre le nom d’entrée d’un plugin et le nom de son manifeste, et la règle selon laquelle Claude Code n’exécute que la commande exacte qu’un utilisateur a acceptée. ↩↩↩↩↩↩
-
Anthropic, documentation de Claude Code, Plugin commands reference, consulté le 11 novembre 2026 : l’invite
Run this command now? [y/N], le fait que-yest ignoré à l’intérieur d’une session Claude Code, le refus quand aucun terminal n’est attaché, et--accept-command <sha256>avec l’objetshownCommand. Versions et dates tirées du changelog de Claude Code : les sourcescommanddans la 2.1.229 (12 août 2026) et--accept-commanddans la 2.1.271 (14 septembre 2026). Ce que couvre chaque portée d’installation provient de Install and manage plugins, consulté le même jour. ↩↩↩↩↩↩↩↩↩↩↩ -
Anthropic, documentation de Claude Code, Plugin security and trust, consulté le 11 novembre 2026. Source pour ce qu’un plugin peut exécuter de lui-même, pour le fait que les règles d’autorisation couvrent les appels d’outils de Claude et non les processus propres à un plugin, pour l’exécution des serveurs MCP en dehors de la sandbox, et pour les étapes d’examen, dont
claude --plugin-dir <plugin directory> plugin details <plugin name>. ↩↩↩↩↩↩ -
Anthropic, documentation de Claude Code, Connect Claude Code to tools via MCP, section « Scope hierarchy and precedence », et Add components to a plugin, consultés le 11 novembre 2026. Source pour l’ordre de priorité, pour le fait que les plugins sont reconnus comme doublons d’après leur endpoint, et pour les noms du serveur et des outils d’un plugin. ↩↩↩↩↩
-
Anthropic, documentation de Claude Code, Extend Claude with skills, consulté le 11 novembre 2026. Source pour
user-invocable: false, qui masque un skill dans le menu/tout en laissant Claude l’invoquer, et pour le fait que les skills de plugin sont placés dans un espace de noms sous la forme/plugin-name:skill-name. ↩↩↩ -
Apple, Giving external agents access to Xcode, consulté le 11 novembre 2026 et inchangé par rapport à ma copie du 10 novembre. Source pour le réglage « Allow External Agents to Use Xcode Tools » et ses trois choix, l’alerte quand un agent externe se connecte, et
claude mcp add --transport stdio xcode -- xcrun mcpbridgeen tant que configuration documentée. À cette date, la page ne mentionnait aucun plugin. ↩↩↩ -
Apple, Xcode 27 Release Notes, consulté le 11 novembre 2026. Source pour l’aperçu d’un serveur MCP qui fonctionne sans espace de travail Xcode ouvert,
sudo xcrun mcp-server enable, et l’octroi d’autorisations à des agents dont le code est signé au sein d’une arborescence de répertoires. J’ai cherchéxcrun agentdans cette page et dans les notes de version de Xcode 27.1, de Xcode 27.2 et de la bêta 27.3, sans trouver aucune occurrence. ↩↩ -
Anthropic, documentation de Claude Code, Publish and distribute a plugin, consulté le 11 novembre 2026. Source pour le fait que la marketplace officielle n’accepte pas de soumissions par le portail de l’annuaire de plugins. ↩