Apple 为 Claude Code 提供的 Xcode 插件:它会安装什么
Apple 为 Claude Code 提供的 xcode 插件,在 Anthropic 的官方 marketplace 里只有 15 行,没有任何文件:条目里存的是一条命令 xcrun agent plugin path --plugin-format claude,这条命令运行时,由您自己 Mac 上的 Xcode 写出插件。12 该条目于 2026 年 11 月 6 日(UTC)合并。在我查过的地方,没有找到 Apple 或 Anthropic 的任何公告。2 在 Xcode 27.2 上,这条命令打印出的目录里有 160 个文件:16 个 skills 和一个 MCP 服务器条目,没有 hooks,也没有 agents。Claude Code 自己的清点结果估算,每个会话会因此增加约 4,463 个 token;该服务器条目指定的桥接程序命令,在我的一个会话里列出了 54 个工具。2 我读了这个目录,并用 --plugin-dir 把它加载进了几个用完即弃的会话。marketplace 的安装,我没有接受;各节都会说明哪些说法出自哪里。
要点速览
- marketplace 条目里放的是一条命令,而不是一个插件。其他凡是从插件列表之外获取内容的条目,都带有一个提交 SHA。
xcode没有什么可固定的,它也是 marketplace 校验器豁免名单上唯一的名字。13 - 安装,意味着由人来接受那条命令。Claude Code 会把它打印出来并询问;当 agent 在会话内部运行安装时,用来跳过这次询问的标志不起任何作用。6
- 一切都可以事先读到。这条命令会打印出目录,而
claude --plugin-dir <dir> plugin details xcode-integration不必启动会话就能清点其中的内容。72 - 在 Xcode 27.2 上,清点结果是 16 个 skills、零个 agents、零个 hooks,以及一个运行
xcrun mcpbridge的 MCP 服务器。会话向您列出其中 15 个 skills。第 16 个的文件头把它标为仅供模型使用。29 - 如果您已经用
claude mcp add添加过桥接程序,Claude Code 会把插件里的那一份当作重复项抑制掉。在我的 Mac 上,插件增加的是这些 skills,除此之外什么都没有。28 - 接受所覆盖的是命令字符串。命令打印出什么,取决于您选中的那个 Xcode,而插件列表中不会有任何改动来标示这种差别。45
进入 marketplace 的是什么
整个条目就是一个 JSON 对象。下面是它在 2026 年 11 月 11 日 anthropics/claude-plugins-official 中的样子,自合并以来未曾改动: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/"
}
当天该插件列表中有 317 个插件。我按内容的来源给它们分了类:1
| 来源类型 | 条目数 | 是否固定到某个提交 SHA |
|---|---|---|
| 一个 git 仓库,按 URL | 163 | 全部 163 个 |
| git 仓库中的一个子目录 | 99 | 全部 99 个 |
| marketplace 仓库内的一个文件夹 | 54 | 不适用;该文件夹就在插件列表自身的历史之中 |
| 在您的机器上运行的一条命令 | 1(xcode) |
否;没有什么可固定的 |
这个条目是怎样进来的,这段记录本身就说明了它有多不寻常。2026 年 9 月 18 日,一位贡献者发起了 pull request #6259,标题为“Add Xcode plugin (xcode)”。一个机器人回复说,该仓库只接受 Anthropic 团队成员的贡献;一位维护者则在它发起 19 分钟后批准了这项改动。9 月 30 日,第二个 pull request #6338 把同一个提交带到了仓库内部的一个分支上,好让它的检查能够运行。1
这些检查并没有照原样通过。第三个 pull request #7015 说,marketplace 的校验器在三处判定 Xcode 条目不合格:它没有 SHA;它的命令里的空格被算作 shell 元字符;它也没有可供克隆的 URL。修复办法是把工作流换到一个带有新输入项 command-exempt 的校验器版本,并把该输入项设为 "xcode"。这一行上方的注释把名单上的每个名字都称为一项“listing decision”,需要 marketplace 运营方面签字同意。3 三个 pull request 都在 11 月 6 日(UTC)关闭,前后不出九分钟:#7015 于 00:49 发起、00:53 合并,#6338 于 00:55 合并,#6259 于 00:58 作为重复项关闭。13
就我所能找到的范围而言,两家公司都没有就此说过什么。11 月 11 日,我查看了 Apple 的开发者新闻订阅源、版本发布订阅源和 Newsroom 订阅源,Apple 的 Xcode 页面,Anthropic 的新闻页面,以及 Claude 博客,都没有发现提到这个插件。Apple 面向外部 agent 的文档讲的仍然是用 claude mcp add 手动添加桥接程序,没有提到任何插件。210 之所以把这个插件称为 Apple 的,依据是条目中的作者字段,以及这条命令随 Xcode 内置这一事实。
条目里存的是命令,不是插件
Claude Code 在 2026 年 8 月 12 日的 2.1.229 版中加入了 command 来源类型。6 文档说,当用户机器上的某个工具负责生成插件目录时,就该用这种来源;它举的例子是 IDE 为用户所选的工具链渲染出一个插件。4 这份约定很小:
- 命令打印一行内容,即某个插件目录的绝对路径,然后以 0 退出。默认时限为 60 秒,Xcode 条目没有另设自己的时限。41
- Claude Code 在您安装或更新插件时运行这条命令;对于已启用的插件,此后每个会话还会在后台再运行一次,时间在会话启动后不久。如果设置了
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC,它会跳过这些后台运行。5 - 在
link模式下,也就是 Xcode 条目所用的模式,Claude Code 什么都不复制。它链接到该目录的各个顶层项,并在文件原本所在的位置加载它们。版本取自目录的真实路径及其顶层项,而不是文件的内容。4 - Claude Code 只运行人接受过的那条一模一样的命令。如果 marketplace 日后改了命令或其模式,后台运行就会停止,直到每位用户接受新的命令为止。5
- 组织可以用托管设置
disableCommandPluginSources把整个来源类型关掉。4
这些规则与 Xcode 所用的目录名正好吻合。在我的 Mac 上,这条命令打印出的路径里带有 Xcode 的构建号(用户名已替换):
$ xcrun agent plugin path --plugin-format claude
/Users/<you>/Library/Developer/Xcode/CodingAssistant/ExportedPlugins/27B52/claude
新的 Xcode 构建版本意味着新的路径,而 Claude Code 正是凭新的路径得知插件变了。在目录已经生成、且没有任何 Xcode 应用运行的情况下,这条命令在三次计时运行中都在约 0.2 秒内返回。我的 Mac 开着 Xcode 的无头 MCP 模式,也就是由 sudo xcrun mcp-server enable 启动的那项预览功能,后面有一节会讲到它。在这里,针对每个 Xcode 构建版本的首次调用是经由 Xcode Service 写出目录的,那是 Xcode bundle 内的一个后台辅助程序,而不是经由 Xcode 应用。我只对目录已经存在时的调用计了时,也没有在关闭该模式的情况下运行过这条命令。2
同样是这些规则,也改变了审查所能覆盖的范围。Claude Code 的安全文档要您在安装前阅读插件的源码:打开主页或 marketplace 仓库,在那里找到插件的目录。7 对 xcode 来说,主页是 Apple 的 Xcode 产品页面,仓库里放的则是上面那 15 行。插件的内容要等您的 Xcode 写出来之后才存在,所以审查发生在您的 Mac 上,针对的是您的 Xcode 构建版本。
Claude Code 请您接受的是什么
因为安装要运行一个程序,Claude Code 会先把命令打印出来并询问,然后才运行。在终端里,这个问题是 Run this command now? [y/N]。6 我在 Claude Code 2.1.322 上,从一个没有连接终端的 shell 里运行了安装,它没有询问,而是拒绝了。其输出的前四行: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.
这一步有三个细节值得注意。
agent 不能替您接受。 -y 是在您自己的终端里接受所显示的命令。CLI 参考文档说,当安装在会话内部运行时,无论是经由 Bash 工具还是经由 hook,Claude Code 都会忽略这个标志。6 如果您让 Claude Code 来安装这个插件,预计它会把命令交还给您。
脚本可以接受某一条确切的命令。 加上 --json 后,被拒绝的安装会报告一个 shownCommand 对象;2.1.271 新增的 --accept-command <sha256> 接受的就是那条命令,别的一概不接受。参考文档说要从您自己的终端传入它,因为这个标志在 Claude Code 会话内部不起作用,所以 agent 也无法凭哈希值来接受。文档把这个哈希值与命令、插件和 marketplace 的插件列表绑定在一起,并说三者中任何一项变了,Claude Code 都会重新显示命令。6 我这里的那个,摘自那条单行结果,并重新排了版: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"
}
请从您自己的 --json 运行结果中取这个值。上面的值与命令字符串的普通 SHA-256 并不相同,后者是我为了比较而算出来的;文档还说,插件列表一旦变化,哈希值就不再算数。从本文复制的值,Claude Code 可能会拒绝。26
会话有它自己的途径。 拒绝消息的其余部分指出了第二个可以接受的地方:/plugin 下该插件的详情面板。我没有为 xcode 打开过那个面板。2
接受之前,先读一读插件
marketplace 想要运行的那条命令,您自己也可以运行。三行命令就能让您看到安装会链接些什么:
# 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"
第 2 行是文档给出的做法,用来列出 Claude Code 在插件目录中找到的内容:它读取文件,而不启动会话。7 要传入的名称是插件清单文件里的那个,即 xcode-integration。若用插件列表中的名称 xcode,同一条命令的回答是 Plugin "xcode" not found.。2 在 Xcode 27.2(27B52)和 Claude Code 2.1.322 上,清点结果的第一部分如下: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
Claude Code 的安全页面列出了插件中会自行运行代码的部分,它们不受约束 Claude 工具调用的权限规则管辖:hooks、monitors、mods,以及 MCP 和 LSP 服务器进程。7 Apple 的目录里有其中一种,即 MCP 服务器。目录的顶层有三项:清单文件所在的文件夹、.mcp.json 和 skills/。这 160 个文件是 157 个 Markdown 文件、两个 JSON 文件和一个 Python 脚本。该脚本共 69 行,位于 audit-xcode-security-settings 这个 skill 之内,只导入了 argparse、json、re 和 pathlib;它自己的描述说,它把保存下来的构建设置输出筛减到与安全相关的条目。只有 agent 去运行它,它才会运行。2
claude plugin validate 判定这个目录通过校验,只给出一条警告:清单文件没有写明作者。同一次运行还套用了 Anthropic 的 claude.ai 名录的一部分提交检查,那份名录与官方 marketplace 是各自独立的两份列表。这些检查报告了两个会让那份名录拒收提交的问题,即没有 README 和没有 LICENSE,还有一条警告,即没有图标。它们与这个条目无关:发布指南说,官方 marketplace 不通过那份名录的门户接受提交。212 这个文件夹本身没有写明任何许可条款。我把它当作 Xcode 的一部分来对待。
会话得到了什么:16 个 skills,其中列出 15 个
我用 claude -p --plugin-dir "$DIR",在一个空项目里把这个目录加载进了几个单提示词会话。通过 --plugin-dir 加载的插件只在该会话内有效,不会安装任何东西。2
会话的起始事件把这个插件列为 xcode-integration@inline,版本 1.0.0,调试日志记录了从中加载的 16 个 skills。会话自己的 skills 和斜杠命令列表里有其中 15 个。缺少的那个是 translation-coordinator,它在文件头里设置了 user-invocable: false,这项设置会把 skill 从 / 菜单中隐藏起来,同时仍让 Claude 能够调用它。9 我在同一个会话里让模型打印出它拥有的 skills,它打印了 16 个名称,那个 coordinator 也在其中。最后这项检查,凭的是模型自己的报告。2
每个名称都带有前缀 xcode-integration:,例如 /xcode-integration:swiftui-specialist。插件列表把这个插件叫作 xcode,清单文件把它叫作 xcode-integration,而 Claude Code 的加载参考文档说,这两个名称各司其职:插件列表中的名称是安装键,清单文件中的名称是插件各组件的命名空间。5 这个前缀是我在 --plugin-dir 下观察到的。至于 marketplace 安装,我依据的是那个页面。
Claude Code 对每个 skill 开销的估算,取自同一份输出的其余部分;旁边一列是该 skill 的文件有没有点名桥接程序的任何工具:2
| Skill | 始终在上下文中 | 调用时 | 点名的桥接程序工具 |
|---|---|---|---|
app-intents-specialist |
~930 | ~2.2k | 无 |
app-intents-whats-new-27 |
~780 | ~3.3k | 无 |
swiftui-specialist |
~340 | ~1.5k | 无 |
swiftui-whats-new-27 |
~340 | ~1.6k | 无 |
adopt-c-bounds-safety |
~320 | ~740 | 无 |
building-document-based-swiftui-applications |
~310 | ~900 | 无 |
app-resizability |
~230 | ~6.9k | 无 |
audit-xcode-security-settings |
~210 | ~21.7k | 11 |
accessibility-voiceover-specialist |
~180 | ~6.9k | 1 |
xctrace |
~170 | ~380 | 无 |
translation |
~160 | ~9k | 4 |
translation-coordinator(仅模型) |
~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 | 无 |
这些数字的单位是 token,而且都是该工具的估算值。各行经过四舍五入,加起来约为 4,470;Claude Code 自己给出的总数就是上文的 ~4,463。两个 App Intents skill 占了其中约 1,710,因为它们的描述很长。这项估算没有计入 MCP 服务器的工具 schema,清点结果说它们要到运行时才解析。每个 skill 教些什么,见我那篇更长的文章:Xcode 27 随附的 skills,以及把它们取出来的两种办法。
MCP 这一半:一个服务器条目,在这里是 54 个工具
.mcp.json 声明了一个名为 xcode 的 stdio 服务器,其命令是 xcrun mcpbridge。Apple 的文档给出的手动接入桥接程序的命令与此相同:claude mcp add --transport stdio xcode -- xcrun mcpbridge。10 我的 Claude Code 会话原本就有这个条目。在一个只有手动添加的条目、没有插件的会话里,桥接程序用 339 毫秒连接成功,自报名称为 xcode-tools、版本为 25464,并列出了 54 个工具。2 我较早的一篇文章说 Xcode 26.3 中的桥接程序有 20 个工具,那篇文章给出这个数字,依据的是我当时的测试和它所链接的一篇第三方演练文章。
我按名称把这 54 个工具分了组:2
| 领域 | 工具数 | 示例 |
|---|---|---|
| 项目文件与结构 | 15 | XcodeRead、XcodeWrite、XcodeUpdate、XcodeRM、XcodeNewTarget |
| 构建、运行与诊断 | 11 | BuildProject、RunProject、GetBuildLog、XcodeRefreshCodeIssuesInFile |
| 构建设置、标志、entitlements、Info.plist | 6 | GetTargetBuildSettings、UpdateTargetBuildSetting、AddEntitlement |
| 测试 | 5 | GetTestList、RunSomeTests、RunAllTests |
| 设备与模拟器交互 | 5 | DeviceInteractionStartSession、DeviceInteractionSynthesize |
| String Catalog 与本地化 | 4 | LocalizationPlanner、StringCatalogEdit |
| 崩溃报告与现场性能报告 | 4 | GetTopCrashIssues、GetFieldPerformanceIssueLogs |
| 预览、代码片段与调试器 | 3 | RenderPreview、RunCodeSnippet、InvokeDebuggerCommand |
| 文档 | 1 | DocumentationSearch |
这份列表伸得比 marketplace 的描述所暗示的更远。XcodeRM 会把文件从项目中移除,并且默认把底层的文件移到废纸篓。InvokeDebuggerCommand 会向 Xcode 当前活跃的调试会话发送一条 lldb 命令。GetTopCrashIssues 对自己的描述是:从 Apple 的崩溃报告服务中取回您的应用的崩溃签名。2 这里的每一个都是一次工具调用,所以 Claude Code 的权限规则对它适用。服务器进程本身则在沙盒之外运行,每个插件的 MCP 服务器都是如此。7
skills 和工具相互引用。16 个 skills 中有 7 个用裸名称点名了桥接程序的工具。这 7 个里的 audit-xcode-security-settings 还给出了带前缀的通用形式 mcp__<server>__XcodeGlob,说服务器的名称因环境而异,并告诉 agent 不要把某个名称写死。这种依赖反过来也成立。String Catalog 与本地化的全部四个工具,其描述都让 agent 在调用工具之前先激活插件里的某个 skill:LocalizationPlanner 和 StringCatalogRead 点名的是 xcode-integration:translation-coordinator,StringCatalogContext 和 StringCatalogEdit 点名的是 xcode-integration:translation。其余 50 个描述没有点名任何 skill。2 一个只有手动添加的桥接程序、没有插件的会话,这四个工具都有,那两个 skill 却一个也没有。在已合并的那个 pull request 上,有位评论者问,既然 Xcode MCP 服务器早就能用,收录这个条目又增加了什么。1 在我的 Mac 上,答案是这些 skills,而且桥接程序自己的工具里有四个点名要其中的两个。
如果您已经手动添加过桥接程序
Claude Code 会给 MCP 服务器定义排定先后:本地、项目和用户作用域在先,其次是插件提供的服务器,再次是 claude.ai 连接器。组织通过托管设置提供的服务器,排在以上各项之前。Claude Code 按端点把插件的服务器与其他服务器比对,所以如果插件服务器的命令与您配置的某个服务器相同,它就算作重复项,Claude Code 只连接一次,用的是您的定义。8
我的会话显示的正是如此。把插件加载到我那个用户作用域的 xcode 条目旁边之后,会话的服务器列表里有 xcode,来源为 user,却没有插件服务器的条目,调试日志说明了原因(时间戳和日志级别已略去):2
Suppressing plugin MCP server "plugin:xcode-integration:xcode": duplicates manually-configured "xcode"
实际影响体现在名称上。只要手动添加的条目还在,工具就保持 mcp__xcode__BuildProject、mcp__xcode__XcodeRead 这样的名称。文档给插件服务器的名称是 plugin:<plugin>:<server>,给它的工具的形式是 mcp__plugin_<plugin>_<server>__<tool>,并说权限规则和 hook 匹配器里要用的就是这种工具形式。8 按这条规则,一个有插件、没有手动添加条目的会话,会把同一个工具叫作 mcp__plugin_xcode-integration_xcode__BuildProject。那种配置我没有测量,因为我的配置里有手动添加的条目。如果您有针对 mcp__xcode__ 名称写的允许规则或 hooks,那么按文档的命名规则,安装插件之后移除手动添加的条目,就等于一次改名。
两层权限,安装只触及其中一层
接受命令,了结的是 Claude Code 这一侧。Xcode 守着它自己的关卡,插件目录里没有任何东西能打开它:目录里没有 hooks,也没有安装步骤。
Apple 的文档讲的是 Xcode 正在运行时的这道关卡。在 Xcode 的 Intelligence 设置中,Model Context Protocol 之下,有一个名为“Allow External Agents to Use Xcode Tools”的弹出式菜单,提供 Always、“While Xcode is Open”和 Never 三个选项;有外部 agent 连接时,Xcode 会提醒您。10 Xcode 27 的发行说明描述了第二种安排,即一项预览功能:无需打开工作区即可运行的 MCP 服务器。它保持关闭,直到您运行 sudo xcrun mcp-server enable;它还让您可以授权经过代码签名的 agent 使用某个目录树内的项目。11
我的 Mac 用的是第二种安排。xcrun mcp-server status 报告权限已启用、有一个获准的 agent 和 11 个获准的文件夹。2 获准的 agent 就是 Claude Code 本身,以其代码签名来识别,所以我预计,由插件启动的桥接程序也会落在同一项授权之下。这一点我没有测试过。另外,在一台您尚未批准任何 agent、而插件又是第一个启动桥接程序的 Mac 上,Xcode 会问些什么,我也没有见过。
Xcode 变了,会跟着变的是什么
固定到提交 SHA 的 marketplace 条目,在插件列表变化时才变。Xcode 条目则在 Xcode 变化时变。我 Mac 上的三个 Xcode 构建版本,即 27.1 候选版本(27A9275)、27.2 beta(27B5019j)和 27.2(27B52),生成了三个目录,分别有 15、15 和 16 个 skills。另外两个构建版本叫作 app-resizability 的那个 skill,在 27.2 beta 中名为 uikit-app-modernization,而 xctrace 只存在于 27B52 中。2
其机制就是每个会话一次的那次运行。更新 Xcode,或选中另一份 Xcode,这条命令下次运行时就会打印出不同的路径;对已安装并启用的插件来说,下次运行通常就是下一个会话的后台运行。加载参考文档说,Claude Code 随后会把结果作为新版本安装,并在正在运行的交互式会话中重新加载它,同时给出通知;如果就地重新加载会使会话的提示缓存失效,则会提示您运行 /reload-plugins。5 您先前的接受仍然有效,因为命令字符串没有变。那次重新加载,我没有亲眼看到过,因为我没有安装这个插件。
随之而来的是两个习惯。Xcode 更新之后,把那三行审查命令重新运行一遍,就像读更新日志那样,并且从第一行开始,因为路径会随构建版本而变。另外,如果某条 agent 命令在 Xcode 更新之后什么都不打印,先找找有没有一个您没有打开过的 Xcode(pgrep -lx Xcode)。在我的 Mac 上,其他几条 xcrun agent 命令卡住时,有一个隐藏的 Xcode 正停在首次启动界面上等待;这是我在那篇更长的文章里追查出的很可能的原因。xcrun agent plugin path 在我的任何一次运行中都没有卡住。假如它哪次运行超过了 60 秒的时限,文档说安装或更新会失败。4
把 Xcode 接入 Claude Code 的三种方式
| 手动添加的桥接程序 | --plugin-dir,单个会话 |
marketplace 安装 | |
|---|---|---|---|
| 命令 | 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 |
| Apple 的 skills | 无 | Xcode 27.2 上 16 个 | Xcode 27.2 上 16 个,依据的是目录 |
| 桥接程序工具 | 这里是 54 个,名称为 mcp__xcode__<tool> |
有手动添加的条目时,用的是该条目的工具;否则是插件自己的服务器,这种情况我没有测量 | 相同,依据的是文档 |
| 持续多久 | 直到您移除它 | 一个会话 | 直到您卸载它;插件启用期间,命令通常每个会话都会再运行一次 |
| 您批准的是什么 | 您自己输入的命令 | 您自己输入的命令 | 插件列表向您显示的命令 |
| 是否为本文测量过 | 是 | 是 | 仅拒绝消息 |
关键要点
面向使用 Claude Code 的 iOS 开发者:
- 先运行那三行审查命令。在 Xcode 27.2 上,它们显示 16 个 skills、一个 MCP 服务器,没有 hooks。2
- 在您自己的终端里用 claude plugin install xcode@claude-plugins-official 安装,并把它显示的命令与插件列表中的那条比对一下:xcrun agent plugin path --plugin-format claude。16
- 按 Claude Code 的估算,在会话调用任何 skill 之前,每个会话里就会有约 4,463 个 token 的 skill 描述,请对此有所预期。2
面向已经在用手动添加的桥接程序的开发者: - 插件增加的是 Apple 的 skills。Claude Code 会把插件的服务器当作重复项抑制掉;只要手动添加的条目还在,您的工具名称就保持原样。28 - 翻译工具预期有这个插件:String Catalog 与本地化的全部四个工具,都让 agent 去激活两个 skill 中的一个,而这两个 skill 只有插件提供。2
面向先审查、后使用工具的团队:
- 没有任何提交把内容固定下来。请按 Xcode 构建版本逐一审查目录,并把 Xcode 更新当作一次插件更新来对待。14
- --accept-command <sha256> 把脚本化安装绑定到某一条审查过的命令和某一份插件列表上,disableCommandPluginSources 则为整个组织关掉这种来源类型。46
面向 marketplace 和插件的作者:
- command 来源让用户机器上的那个工具成了发布者。Anthropic 的官方 marketplace 按名称逐个准入这类来源,每一个都是其 SHA 固定规则的一项列明的豁免。3
常见问题
Apple 为 Claude Code 提供的 Xcode 插件是什么?
它是 Anthropic 官方的 Claude Code marketplace 中一个名为 xcode 的条目,作者写的是“Apple Inc.”。条目里不含任何插件文件。它存的是命令 xcrun agent plugin path --plugin-format claude;在我试过的三个 Xcode 27 构建版本上,命令运行时,Xcode 在我的 Mac 上写出了插件目录。12
如何在 Claude Code 中安装 Xcode 插件?
在您自己的终端里运行 claude plugin install xcode@claude-plugins-official,并接受它显示的命令。在会话内部,按被拒绝的安装所打印的消息来看,接受的地方是 /plugin 下该插件的详情面板。2 agent 不能替您接受这条命令:在会话内部,Claude Code 会忽略 -y。6 我自己没有完成安装。在默认的用户作用域下,这台机器上的每个项目都会有这个插件,以及它那些始终加载的 skill 描述。--scope local 让它只对您本人、只在一个仓库中生效,--scope project 则把它记录在 .claude/settings.json 中,而这个文件是您要提交的。这样就为在该仓库中工作的每个人启用了这个插件,却不会往他们的机器上下载任何东西,所以每位协作者仍要在每个克隆里运行一次安装。接受是按用户进行的:每个人接受的是 Claude Code 向其本人显示的命令。我自己的那次尝试用的是 --scope local。26 日后若要移除插件,同一份参考文档给出的是 claude plugin uninstall xcode@claude-plugins-official;如果当初安装的位置不是默认的用户作用域,还要加上 --scope。6
插件里有什么?
在 Xcode 27.2(27B52)上:16 个 skills、一个 .mcp.json(其中声明了一个运行 xcrun mcpbridge 的服务器),以及一份只有三个字段的清单文件。Claude Code 的清点结果报告零个 agents、零个 hooks 和零个 LSP 服务器。2
如果我已经为 xcrun mcpbridge 运行过 claude mcp add,还需要这个插件吗?
为了 skills,您需要它。Claude Code 把插件的服务器视为您那个服务器的重复项并抑制它,所以工具不会变。skills 是新增的,而且有四个桥接程序工具,也就是 String Catalog 与本地化那一组,会让 agent 先激活插件里的某个 skill。28
文件夹里有 16 个 skills,为什么 Claude Code 只列出 15 个?
translation-coordinator 设置了 user-invocable: false。Claude Code 会把这样的 skill 从 / 菜单中隐藏起来,同时仍让模型调用它。9 会话的 skill 列表显示 15 个,模型报告的是 16 个。2
插件占用多少上下文?
Claude Code 的 plugin details 估算,16 个 skill 描述在每个会话中约占 4,463 个 token。调用某个 skill 的开销更大,从 xctrace 的约 380 个 token 到 audit-xcode-security-settings 的约 21,700 个 token 不等。这项估算不含 MCP 服务器的工具 schema。2
安装之后,我的 Mac 上会运行些什么?
依据文档和目录:您接受过的那条命令,在安装时运行,此后在插件启用期间,通常每个会话在后台运行一次;以及 xcrun mcpbridge 服务器进程,在会话连接它时运行。目录里没有 hooks。25 其余的一切,要么是对桥接程序某个工具的调用,由您的权限规则管辖;要么是 skill 文本,安全页面说它会作为指令进入 Claude 的上下文,并影响 Claude 如何使用它已有的工具。7 唯一的那个 Python 脚本在 audit-xcode-security-settings 里,只有 agent 去运行它才会运行,而这同样是一次由您的权限规则管辖的工具调用。
我需要哪个版本的 Xcode?
xcrun agent plugin 在我 Mac 上的三个构建版本中都有应答:27.1 候选版本(27A9275)、一个 27.2 beta(27B5019j)和 27.2(27B52)。更早的 Xcode 我没有试过,Apple 的 Xcode 27 各版发行说明也都没有提到这条命令。211
我测量了什么
一台 Mac,2026 年 11 月 10 日和 11 日。请把这些数字看作一位开发者的观察,而不是 Apple 或 Anthropic 的文档。2
- Mac 与工具: macOS 27.0(26A428),选中的是 Xcode 27.2(27B52),Claude Code 2.1.322。Xcode 的无头 MCP 模式处于开启状态。
- 插件列表:
anthropics/claude-plugins-official,提交43fd1f9,这两天的 head 都是它。 - 未启动会话即读取的内容:
xcrun agent plugin path --plugin-format claude打印出的目录、claude --plugin-dir <dir> plugin details、claude plugin validate,以及按类型统计的文件数。 - 会话: 在一个空项目里的四个单提示词
claude -p会话,均未保存。其中三个用--plugin-dir加载了插件。另一个只有我手动添加的桥接程序,并向 Claude Code 的工具搜索查询了桥接程序的工具。没有哪个会话调用过桥接程序的工具。 - 安装: 在没有终端的 shell 里,按设计被拒绝。我从未接受过那条命令。
- 工具描述: 54 个工具 schema,是一个交互式 Claude Code 会话通过工具搜索,从我手动添加的桥接程序加载到的。该会话没有调用任何工具。
- 未见提及的检查: Apple 的开发者新闻订阅源、版本发布订阅源和 Newsroom 订阅源,Apple 的 Xcode 页面,Anthropic 的新闻页面,以及 Claude 博客,均于 11 月 11 日获取,并在其中搜索了这个插件。
- 未验证: 交互式提示和详情面板;marketplace 安装之后的一切,包括后台运行、Xcode 更新后的重新加载,以及版本字符串;在没有手动添加条目的情况下运行的插件自带服务器;当插件的桥接程序是 Xcode 见到的第一个 agent 时,Xcode 会问些什么;会话测量中 27B52 以外的任何 Xcode;关闭无头模式的 Mac。
这些 skills 本身、离开 Xcode 的第二条路径(xcrun agent skills export),以及我在 Xcode 27.2 上遇到的卡住问题,见 Xcode 27 内置可随处导出的 agent skills。两个MCP服务器让Claude Code成为iOS构建系统 讲的是手动添加的桥接程序,MCP服务器是新的攻击面 讲的是服务器的工具列表为什么值得一读。整套设置见 iOS agent 开发指南。
参考资料
-
Anthropic,
anthropics/claude-plugins-official,.claude-plugin/marketplace.json(提交 43fd1f9),读取于 2026 年 11 月 10 日,11 月 11 日再次读取,当时该提交仍是 head。此为xcode条目以及各项计数的来源:317 个插件,其中 163 个为url来源,99 个为git-subdir来源,每一个都带有sha字段,54 个是仓库内的路径,1 个是command来源。Pull request #6338 加入了该条目:发起于 2026 年 9 月 30 日,合并于 2026 年 11 月 6 日 00:55 UTC,在一个文件中新增 15 行,其描述称它把 #6259 的改动带到仓库内部的一个分支上,以便其检查能够运行;11 月 9 日有一条评论问,相比已有的 Xcode MCP 服务器,收录这个条目增加了什么。Pull request #6259,“Add Xcode plugin (xcode)”:发起于 2026 年 9 月 18 日 23:12 UTC,一条自动回复称该仓库只接受 Anthropic 团队成员的贡献,23:31 UTC 有一次批准的评审,2026 年 11 月 6 日 00:58 UTC 作为重复项关闭。 ↩↩↩↩↩↩↩↩↩↩↩ -
作者的测量与检查,2026 年 11 月 10 日和 11 日,所用机器和版本列于“我测量了什么”一节。来源:
xcrun agent plugin path、claude plugin install(带与不带--json)、claude --plugin-dir <dir> plugin details、claude plugin validate、claude --help和xcrun mcp-server status的输出;插件目录的内容,包括每个 skill 的文件头,以及在每个 skill 文件中对桥接程序 54 个工具名称所作的搜索;四个单提示词 Claude Code 会话的起始事件和调试日志;一个交互式会话收到的桥接程序 54 个工具描述;命令字符串的 SHA-256;以及“未见提及的检查”一项下所列页面的存档副本。计数为这些来源中的文件数、文件夹数和工具名称数。token 数字为 Claude Code 的估算值。 ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Anthropic,
anthropics/claude-plugins-official,pull request #7015,“ci(validate-plugins): re-pin validator and allow the xcode command source”,于 2026 年 11 月 6 日发起并合并(00:49 和 00:53 UTC)。此为以下内容的来源:校验器在 Xcode 条目上的三处不通过、command-exempt: "xcode"这项设置,以及工作流中的那条注释,它把每个获豁免的名字称为一项需要 marketplace 运营方面签字同意的“listing decision”。 ↩↩↩↩ -
Anthropic,Claude Code 文档,Marketplace reference,“command plugin source”和“Copy mode and link mode”两节,获取于 2026 年 11 月 11 日。此为以下内容的来源:何时使用
command来源及其 IDE 示例、单行输出的约定、默认 60 秒的timeout、安装或更新失败的条件、link 模式就地加载目录且版本由其路径和顶层项得出,以及disableCommandPluginSources设置。 ↩↩↩↩↩↩↩↩ -
Anthropic,Claude Code 文档,Plugin loading reference 和 Host and maintain a marketplace,获取于 2026 年 11 月 11 日。此为以下内容的来源:command 来源何时再次运行(每次安装或更新时,以及每个会话在后台运行一次)、其输出变化时的重新加载、插件的条目名称与清单文件名称的区别,以及 Claude Code 只运行用户接受过的那条一模一样的命令这一规则。 ↩↩↩↩↩↩
-
Anthropic,Claude Code 文档,Plugin commands reference,获取于 2026 年 11 月 11 日:
Run this command now? [y/N]提示、Claude Code 会话内部会忽略-y、没有连接终端时的拒绝,以及--accept-command <sha256>和shownCommand对象。版本和日期出自 Claude Code changelog:command来源见 2.1.229(2026 年 8 月 12 日),--accept-command见 2.1.271(2026 年 9 月 14 日)。各安装作用域覆盖什么,出自同日获取的 Install and manage plugins。 ↩↩↩↩↩↩↩↩↩↩↩ -
Anthropic,Claude Code 文档,Plugin security and trust,获取于 2026 年 11 月 11 日。此为以下内容的来源:插件能自行运行什么;权限规则管辖的是 Claude 的工具调用,而不是插件自己的进程;MCP 服务器在沙盒之外运行;以及审查步骤,包括
claude --plugin-dir <plugin directory> plugin details <plugin name>。 ↩↩↩↩↩↩ -
Anthropic,Claude Code 文档,Connect Claude Code to tools via MCP,“Scope hierarchy and precedence”一节,以及 Add components to a plugin,获取于 2026 年 11 月 11 日。此为以下内容的来源:优先顺序、插件按端点被比对为重复项,以及插件的服务器和工具的名称。 ↩↩↩↩↩
-
Anthropic,Claude Code 文档,Extend Claude with skills,获取于 2026 年 11 月 11 日。此为以下内容的来源:
user-invocable: false把 skill 从/菜单中隐藏起来,而 Claude 仍可调用它;以及插件的 skills 以/plugin-name:skill-name的形式带有命名空间。 ↩↩↩ -
Apple,Giving external agents access to Xcode,获取于 2026 年 11 月 11 日,与我 11 月 10 日的副本相比没有变化。此为以下内容的来源:“Allow External Agents to Use Xcode Tools”设置及其三个选项、外部 agent 连接时的提醒,以及
claude mcp add --transport stdio xcode -- xcrun mcpbridge作为文档所载的设置步骤。在该日期,页面没有提到插件。 ↩↩↩ -
Apple,Xcode 27 Release Notes,获取于 2026 年 11 月 11 日。此为以下内容的来源:无需打开 Xcode 工作区即可运行的 MCP 服务器预览、
sudo xcrun mcp-server enable,以及在某个目录树内对经过代码签名的 agent 的权限授予。我在此页面以及 Xcode 27.1、27.2 和 27.3 beta 的发行说明中搜索了xcrun agent,没有找到匹配。 ↩↩ -
Anthropic,Claude Code 文档,Publish and distribute a plugin,获取于 2026 年 11 月 11 日。此为“官方 marketplace 不通过插件名录的门户接受提交”这一点的来源。 ↩