在 Xcode 26 / 27 的 Intelligence 设置里把 Router One 加为 聊天 provider
Xcode 26 和 Xcode 27 都内置了编程助手:在会话里向 agent 或聊天模型提问,让它解释、生成和修复代码,项目上下文由 Xcode 自动收集。Xcode 27(27A266a,2026 年 9 月 14 日发布)把编程助手从导航栏移到了编辑区,添加聊天 provider 的方式与 Xcode 26 相同。除了内置的 ChatGPT 和 Claude 账号登录,Intelligence 设置还接受任何支持 Chat Completions API 的 provider,所以 Router One 只需加一次,作为 Internet Hosted 聊天 provider:它的 /v1/models 列表会把 GPT、Claude、Gemini、Grok 和 DeepSeek 系列填进 Xcode 的模型选择器,一把 Key 全覆盖,每次提问都在控制台 → 日志留下成本和延迟 Trace。本指南讲清对话框需要的两个值、为什么地址是不带 /v1 的主机根地址、如何在 New Conversation 里选模型,以及 Xcode 每轮重发对话记录和附件时一段对话会花多少。Agent(例如 Xcode 26.3 起的 Claude Agent 和 Codex、26.6 起的 Gemini,以及通过 Agent Client Protocol 添加的 agent)各自登录或配置,不在本指南范围内。按 Xcode 27(27A266a)与 Apple 编程智能文档核对(2026-09-29)。
确认 Xcode 版本,并为这台 Mac 单独建 Key
编程智能功能内置在 Xcode 26 和 Xcode 27 里。Apple 按版本给出 macOS 要求:Xcode 26 到 26.3 要求 macOS Sequoia 15.6 或更新版本,Xcode 26.4 到 26.6 要求 macOS Tahoe 26.2 或更新版本,Xcode 27 要求 macOS Tahoe 26.6 或更新版本;Xcode 27 的发布说明还写明它只能在 Apple silicon 的 Mac 上安装和运行。26.3 的发布说明修复了自定义模型 provider 在 Xcode 重启后消失的问题,能升级就用 26.3 或更新版本。然后为这台 Mac 单独创建一把设了 maxSpend 的 Router One Key,它只填进 Add a Chat Provider 对话框。SDK 和多数客户端用的带 /v1 的 base URL 不要拿来填 Xcode:这个对话框要的是主机根地址,下文说明。受管理的 Mac 上,如果 MDM 配置把 CodingAssistantAllowExternalIntegrations 设为 false,编程助手会整个关闭,也就加不了任何 provider。
把 Xcode 配置到 Router One base URL
选择 Xcode > Settings,在侧栏选 Intelligence,点 Chat 下方的 Add a Chat Provider。对话框里选 Internet Hosted;Locally Hosted 是给运行在你 Mac 上的模型服务用的,填的是端口和可选的描述,不是 URL。URL 填不带 /v1 的主机根地址 https://api.router.one:Apple 文档把 provider 必须提供的两个端点写成 {Model provider URL}/v1/models 和 {Model provider URL}/v1/chat/completions,也就是说 Xcode 会在你填的地址后面自己拼上 /v1/models 和 /v1/chat/completions,OpenAI 兼容 SDK 用的带 /v1 的 base URL 会让这一段重复出现。Key 那一行填为这台 Mac 创建的 Router One Key:Apple 文档对对话框其余内容只写了「the URL and other details」,WWDC25 的 What's new in Xcode 26 讲到接入其他 provider 时说的是「enter your API key」;网关按 Authorization: Bearer 校验这把 Key。点 Add。Xcode 通过 GET /v1/models 拉取模型列表,Router One 的这个端点需要 Key;选择器里显示的就是它返回的目录 ID,例如 anthropic/claude-sonnet-5 或 openai/gpt-5.5,你可以选择显示哪些模型并标记常用。使用时点 Coding Assistant 按钮或按 Command-0,点 New Conversation,在 Chat 下选这个 ID;消息输入框的占位文字会显示当前模型。之后每次提交的提问都会以这个 ID 发到 POST /v1/chat/completions:
- URL
- https://api.router.one
# Xcode → Settings → Intelligence → Chat → Add a Chat Provider
# Select Internet Hosted (Locally Hosted asks for a port on your Mac instead)
URL: https://api.router.one
API key: sk-your-router-one-key
# Xcode itself requests {URL}/v1/models and {URL}/v1/chat/completions
# Coding Assistant (Command-0) → New Conversation → Chat: <exact-model-id-from-/models>每个 值填在 哪里,怎么 验证
来自 Router One 的值只有两个,其余都是 Xcode 自己的行为;最后两行说明这个地址不负责配置什么:
| Xcode 字段 | 填什么 | 怎么验证 |
|---|---|---|
| Intelligence → Chat → Add a Chat Provider | Internet Hosted | Locally Hosted 要的是你 Mac 上的端口和可选描述,不是 URL;Router One 通过互联网访问 |
| URL | https://api.router.one | 点 Add 后选择器出现模型;地址以 /v1 结尾会让 Xcode 请求 /v1/v1/models,网关返回 404 not_found |
| API key(对话框里的「other details」) | 为这台 Mac 单独创建、设了 maxSpend 的 Router One Key | 第一次提问出现在控制台 → 日志里这把 Key 名下;Key 错误时是 401 invalid api key,选择器为空 |
| New Conversation → Chat(模型选择器) | /v1/models 返回的精确目录 ID,例如 anthropic/claude-sonnet-5 | 日志里每条 Trace 的模型与 /models 逐字一致;选择器列出的每个 ID 都在 /v1/chat/completions 上提供服务 |
| Project Context、@ 引用、附件 | Xcode 默认设置;聊天模型的 Project Context 默认开启 | 上下文随 Chat Completions 请求一起发送:日志里的输入 tokens 随对话记录和附件增长 |
| Agents(Claude Agent、Codex、Gemini 等) | 不由这个地址配置 | Apple 文档写的是:列出的 agent 用 Get / Install 和 Account 行登录,支持 Agent Client Protocol 的 agent 用 Add an Agent 添加;这些都不是聊天 provider 的 URL,本指南只覆盖 Chat 部分 |
给一台 Mac 的对话定 预算,并逐条核对
在会话里提交的每个提问至少是一个 POST /v1/chat/completions,源代码编辑器里的 coding tools 操作也一样:Explain、Document、Generate a Playground、Generate a Preview 和 Generate Fix for Issue 都发给当前聊天模型。Apple 的发布说明还提到编程助手使用的工具,例如「find text in file」;Xcode 用到这些工具时,模型的每一次往返都是又一个请求,有各自的 request_id 和费用。Chat Completions 不在服务端保存对话状态,Apple 也说明新消息会保留之前问答的上下文,所以每一轮都会重发对话记录,连同 Xcode 收集的项目上下文和你附加的文件;长对话的输入 tokens 一轮比一轮多,日志里某一行比上一行贵时先查这一点。Stop 按钮在 Xcode 侧结束回复:网关在回复完成前看到连接关闭,Trace 会记为 HTTP 499 client_cancelled,只按上游报告的用量计费;已经完成的回复照全额计费,而且 Apple 的 Xcode 26 说明列出了一个已知问题:状态栏的 Cancel 按钮有时不能停止正在执行的消息。给这台 Mac 单独一把设了 maxSpend 的 Key:失控的对话会在上限处收到 HTTP 402 停下,花费不会超过这个上限,你的其他 Key 也照常可用。按时间、模型和 request_id 对账;对话太长时新开一个会话来重置记录,不要一直续。Router One 只记录模型调用;应用改动、修改历史、Git 快照和 Xcode 的工具都在 Xcode 里运行。
Xcode 该填 哪个 模型 ID?
从 /models 页复制精确的模型 ID,保留大小写、连字符和版本后缀,不要用展示名称代替。打开该模型的详情页,核对支持的 API 端点、上下文窗口和工具调用等能力,再与 Xcode 当前选择的 provider 和功能对应。模型出现在目录里,不等于当前客户端能调用它的所有功能。建议为每个客户端或应用单独建 API Key,并设置 maxSpend 消费上限。
Xcode 用的是哪种 API 协议?
OpenAI 兼容描述的是接口格式,不能据此推断 Chat Completions(/v1/chat/completions)、Responses(/v1/responses)和 Anthropic Messages(/v1/messages)可以互换。先核对工具当前版本、provider 配置和实际请求路径,再查模型详情与 API 兼容性事实页。一次普通对话成功,也不能证明服务端工具、历史状态或文件编辑功能都受支持。
在请求日志里 核对 Xcode 的调用
先在 Xcode 发出一次简单文本请求,再到控制台 → 日志按时间、模型和 request_id 找到这条记录,核对 Token、花费、总耗时和状态码。成功后再分别验证流式输出、工具调用和多轮历史。失败时保留实际请求路径、完整错误消息及 request_id;没有对应日志时,要么请求没到达网关(客户端配置或网络问题),要么网关在调用模型之前就拒绝了它——Key 问题的 401、余额不足或 Key 达到 maxSpend 上限的 402、Key 或账户自身限额触发的 429,或模型 ID、端点不对的 400 / 404;在输出任何内容之前就失败的流式请求也可能没有日志。看客户端收到的状态码和错误消息就能区分是哪一种;先确认这一点,再判断是不是网关或上游故障。
常见 问题
provider 加好了,但模型 选择器里 没有 Router One 的模型,哪里出了 问题?
先查 URL。Apple 文档把 Xcode 期望的端点写成 {Model provider URL}/v1/models 和 {Model provider URL}/v1/chat/completions,所以 URL 字段只放主机根地址 https://api.router.one。填成 https://api.router.one/v1,Xcode 会去请求 https://api.router.one/v1/v1/models,网关返回 HTTP 404 not_found,消息里直接写明你的客户端会自己在 base URL 后拼 /v1/...,请去掉末尾的 /v1;选择器自然没有东西可显示。删掉 /v1,保存后重试。URL 正确但选择器仍为空,说明 Key 被拒绝:GET /v1/models 需要有效的 Key,Key 错误时返回 401 invalid api key 并附 request_id。另外注意版本:Xcode 26.3 修复了自定义模型 provider 在重启后消失的问题,昨天还在、今天不见了的 provider 是升级的理由。模型出现后,发一个简短提问,到控制台 → 日志按时间、模型和 request_id 核对。
能让 Xcode 通过 Anthropic Messages 端点 调用 Claude 系列 模型吗?
不能。Apple 写明加入的 provider「needs to support the Chat Completions API」,并且只列了 /v1/models 和 /v1/chat/completions 两个端点,所以 Xcode 里的自定义聊天 provider 都只讲 Chat Completions,没有切换到 Anthropic Messages 格式的设置;Chat 下的 Claude Sonnet & Opus 是 Apple 自己的账号登录,不是自定义 provider。在 Router One 上这不损失什么:/v1/chat/completions 服务目录里的所有聊天模型,保持同一个主机根地址,在模型选择器里选一个 Claude 系列 ID(例如 anthropic/claude-sonnet-5)即可,日志里的 Trace 会带这个 ID。网关的 /v1/messages 端点是给自己发送 Anthropic Messages 请求的客户端用的,例如 Claude Code;/v1/responses 只对已列出的 GPT 系列、DeepSeek ID 与 Grok 对话模型原生提供。这两个端点都不能从 Xcode 的对话框里选择。
Router One 这个 provider 需要 macOS 26 或 Apple silicon 的 Mac 吗?
Apple 的要求按 Xcode 版本给出,与 provider 无关:Xcode 26 到 26.3 要求 macOS Sequoia 15.6 或更新版本,Xcode 26.4 到 26.6 要求 macOS Tahoe 26.2 或更新版本,Xcode 27 要求 macOS Tahoe 26.6 或更新版本。Xcode 27 的发布说明还写明它只能在 Apple silicon 的 Mac 上安装和运行,所以 Intel Mac 上这套配置适用于 Xcode 26.x。对 Xcode 26,发布说明只在一种情况下提到 Apple silicon,就是下载并在本机运行本地模型;「Coding intelligence features in Xcode require Apple Intelligence」则列在已解决问题里。Router One 这样的 Internet Hosted provider 在 Apple 的描述里不带这两个条件。网关这一侧在任何 Mac 上都一样:主机根地址、Key 和目录 ID 不变。
Xcode 能通过 网关用 哪些 模型?
选用当前目录中同时支持 Xcode 所用端点和所需功能的模型。精确 ID、当前单价与能力以 /models 及模型详情为准;不要仅按 GPT、Claude 等系列名判断兼容性。客户端能列出模型,只说明它从自身配置或 GET /v1/models 读到了这个 ID,仍需验证实际调用。
能列出 模型,但调用报 400 或 404,怎么办?
先记录实际请求路径和错误消息,再核对精确模型 ID。400 可能是参数、工具类型或模型与端点不匹配;404 可能是请求路径或资源不存在,不能直接判定模型下线。若错误提示 must be called via,按它指明的端点调整客户端 provider,或换用支持当前端点的模型。不要在所有工具里统一增删 /v1 或 /chat/completions。
中国 大陆能 直连吗?
能。网关在大陆可直连、无需 VPN,配置与全球环境完全一致。
报 401/402/403/429 怎么 排查?
先看客户端收到的响应:状态码、错误消息和 X-Request-ID 响应头。401(Key 缺失、不存在、已吊销或已过期)、402(钱包余额不足,或这把 Key 达到 maxSpend 上限)以及 Key 或账户自身限额触发的 429,都在调用任何模型之前被拒绝,不会出现在控制台 → 日志里;模型 ID 或端点写错导致的 400 / 404 也一样。401 查 Key 是否完整传入、在控制台 → API 密钥里是否仍有效;402 充值或调高这把 Key 的 maxSpend;403 请保留完整错误消息。429 请退避后重试;日志里能查到的 429 是网关重试之后上游仍返回的。保留 request_id,再按错误码速查页逐项排查。