DSH 的 Xcode AI 集成:26 个 Xcode MCP 工具(mcpbridge)+ Apple 平台技能 + Xcode Intelligence 风格 persona(agent preset 或全局 bundle)。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:jihongboo/dsh-apple-mode
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
DeepSeek Harness(dsh)的 Xcode AI 集成模式 —— 一个 agent preset(模式)+ 安装脚本,让 DSH 会话获得完整的 Xcode AI 能力栈:
- 26 个 Xcode MCP 工具(
mcp__xcode__*),通过 Apple 官方mcpbridge桥接 - Xcode Intelligence 风格的 persona(Swift 优先、工具辅助、解释/改动分流),改编自
IDEIntelligenceChat提示词模板 - 10 个 Apple 平台技能(SwiftUI、App Intents、安全加固、bounds safety 等),安装时从你自己的 Xcode 本地生成
📌
dsh-plugin话题仓库。DeepSeek Harness 处于开发者预览阶段,自动化场景请锁定具体版本。
为什么用"模式(preset)"而不是全局接入 MCP?
三样能力在 DSH 里对应三个不同机制:
| 层 | 能力 | DSH 机制 |
|---|---|---|
| 执行 | 26 个 mcp__xcode__* 工具 |
dsh-mcp-client(挂在 preset 内) |
| 知识 | 10 个 Apple 技能 | dsh-skill-filesystem(全局、懒加载) |
| 行为 | Xcode Intelligence persona | agent preset(本仓库) |
若把 MCP 全局接入,26 个大工具 schema(约 6k+ tokens/请求)会常驻每一个会话。挂在 preset 内则只有选择该模式的会话背负成本——建会话时选 Apple Mode即获得全套能力,其他会话保持轻量。
环境要求
- macOS
- DeepSeek Harness 0.2.0+(插件安装路径;桌面端即 0.2.x)。DSH 0.1.x 请用
install.sh的旧版磁盘 preset——见版本兼容性。 - Xcode 26+(含
mcpbridge与xcrun agent skills export)。使用 MCP 工具时,需要保证 Xcode 已启动并打开了相应的项目,并且在 Xcode 弹出的 MCP 接入对话框中点击允许(见使用方法)。
安装
DSH 0.2.0+(桌面端 / 当前版本)——推荐
用插件管理器安装插件,其 bundle patch 会声明 Apple Mode agent preset:
dsh plugin --profile web add "github:jihongboo/dsh-apple-mode"
追加 tag 可锁定已发布版本——推荐这么做,因为不带 tag 的安装会跟随默认分支:
dsh plugin --profile web add "github:jihongboo/dsh-apple-mode#v1.1.1"
(桌面端:设置 → 插件 → 从 GitHub 安装。)重启 DSH,新建会话时选择 Apple Mode。
关于插件管理器的 pnpm 警告:本包是纯配置包——没有
scripts、没有依赖、没有构建步骤(见package.json)。如果市场页提示"pnpm ≥ 10 拒绝执行 git 依赖的prepare脚本,需要在pnpm-workspace.yaml里写allowBuilds",可以放心跳过:本包没有任何需要构建或执行的代码,授权只会无谓地扩大授权面。发布到 npm(见 docs/publishing.md)后该警告会彻底消失。
然后本地生成 Apple 技能——插件刻意不重新分发它们:
git clone https://github.com/jihongboo/dsh-apple-mode.git
cd dsh-apple-mode
./install.sh --skills-only
DSH 0.1.x——旧版磁盘 preset
git clone https://github.com/jihongboo/dsh-apple-mode.git
cd dsh-apple-mode
./install.sh
install.sh 会做三件事:
- 检测你机器上的 Xcode,并让你选择由哪个提供
mcpbridge(见下文)。 - 安装磁盘 preset →
~/.dsh/.agent-presets/apple/(已有副本自动备份)。 - 通过
xcrun agent skills export在你机器上本地生成 10 个 Xcode 技能到~/.agents/skills/。
为什么不直接打包技能? 技能是 Apple 官方内容。安装时从你自己的 Xcode 生成可以避免重新分发 Apple 内容——仓库只包含我们自己的代码、配置和文档。
版本兼容性
DSH 0.2 重做了 agent preset:preset 现在是 bundle patch 里声明的 @deepseek-ai/dsh-agent-preset 行,注册表不再扫描目录。
| DSH | preset 机制 | 如何获得 Apple Mode |
|---|---|---|
| 0.2.0+(桌面端) | bundle patch 声明 @deepseek-ai/dsh-agent-preset 行 |
dsh plugin --profile web add "github:jihongboo/dsh-apple-mode" |
0.1.x(旧版 npx/brew) |
~/.dsh/.agent-presets/<id>/ 磁盘目录 |
./install.sh |
技能在两个版本上都从 ~/.agents/skills 发现,所以 ./install.sh --skills-only 通用。
选择 Xcode(多版本共存)
如果装了多个 Xcode(如 Xcode.app、Xcode-beta.app、Xcode-26.2.app),mcpbridge 位于各自的 Contents/Developer/usr/bin——且只有 Xcode 26+ 才有。
DSH 0.2.0+:preset 的 MCP 行执行 xcrun mcpbridge,Xcode 由 xcode-select 决定:
sudo xcode-select -s /Applications/Xcode-26.2.app/Contents/Developer # 全局切换
DEVELOPER_DIR=/Applications/Xcode-beta.app/Contents/Developer dsh web # 或单次启动指定
要驱动某个正在运行的特定 Xcode 实例,在 preset 的 mcp-xcode 行加 env: { MCP_XCODE_PID: '<pid>' }(改本仓库的 cordis.patch.yml,或在 profile patch 里覆盖 preset-apple 行)。
DSH 0.1.x:install.sh 会扫描 /Applications 下所有包含 mcpbridge 的安装并提示你选择:
Found Xcode installs providing mcpbridge:
1) /Applications/Xcode-beta.app/Contents/Developer (xcode-select default)
2) /Applications/Xcode.app/Contents/Developer
Choose (1-2, default 1):
- 默认 =
xcode-select选中的 Xcode → preset 使用command: xcrun mcpbridge(可移植,跟随xcode-select变化)。 - 选择其他 → 所选
…/Contents/Developer/usr/bin/mcpbridge以绝对路径写进安装后的 preset。 - 非交互:
./install.sh --xcode /Applications/Xcode.app(或--xcode …/Contents/Developer);./install.sh --list-xcodes列出候选。 - 运行时切换、无需重装:
./install.sh --runtime-selectable安装bin/mcpbridge作为命令;启动dsh时设置DSH_XCODE_DEVELOPER_DIR=/Applications/…/Contents/Developer即可切换。(解析顺序:DSH_XCODE_DEVELOPER_DIR→xcrun→ 最新的/Applications/Xcode*.app。)
之后想改:重跑 ./install.sh、编辑 ~/.dsh/.agent-presets/apple/agent.cordis.yml 的 mcp-xcode 行,或用上面的运行时环境变量。
备选:全局接入 MCP(所有会话)
preset 把约 26 个工具 schema 限定在 Apple Mode 会话内。若希望所有会话都能用 Xcode MCP 工具,在你的 profile patch(~/.dsh/profiles/<profile>/cordis.patch.yml)里插入客户端行:
- insert:
- id: mcp-xcode
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: xcode
transport: stdio
command: xcrun
args: ['mcpbridge']
toolCallTimeoutMs: 120000
两种方式二选一:两个存活的 serverName: xcode 实例会冲突,后加载的会失败。详见 docs/global-mcp.md。
使用方法
- 重启
dsh(或直接新建会话——preset 只能在空白会话选择)。 - 建会话时选择 Apple Mode。
- 该会话即可使用:
mcp__xcode__*工具——直接操作打开的 Xcode 工作区:XcodeRead/Write/Update/MV/RM、XcodeGlob/Grep/LS、UpdateTargetBuildSetting/UpdateFileCompilerFlags、XcodeListNavigatorIssues、scheme/运行目标/测试计划切换、XcodeNewTarget、StringCatalogRead/Edit等- 全部 Apple 平台技能(按需懒加载)
- Apple 优先、工具辅助的工作方式
使用
mcp__xcode__*工具之前:
- 需要保证 Xcode 已启动,并且在其中打开了要操作的项目/工作区。
- 首次建立连接时,Xcode 会弹出 MCP 接入对话框——请点击允许。在点击允许之前,工具调用会被拒绝。
构建/运行/测试仍在终端进行(xcodebuild,建议管道到 xcsift 获得结构化输出);MCP 工具集负责工程手术、构建设置、诊断、运行目标与本地化。
内容清单
MCP 工具(26 个,命名空间 mcp__xcode__*)
| 分组 | 工具 |
|---|---|
| 工程读写 | XcodeRead XcodeWrite XcodeUpdate XcodeMV XcodeRM XcodeMakeDir |
| 检索 | XcodeGlob XcodeGrep XcodeLS |
| 目标与设置 | XcodeNewTarget XcodeListTemplates XcodeListTargets UpdateTargetBuildSetting UpdateFileCompilerFlags |
| Scheme/运行/测试 | XcodeListSchemes XcodeSwitchScheme XcodeListRunDestinations XcodeSwitchRunDestination XcodeListTestPlans XcodeSwitchTestPlan |
| 诊断 | XcodeListNavigatorIssues XcodeRefreshCodeIssuesInFile |
| 本地化 | StringCatalogRead StringCatalogEdit |
| 窗口 | XcodeListWindows XcodeGetCurrentFile |
技能(10 个,安装时生成)
swiftui-specialist · swiftui-whats-new-27 · app-intents-specialist · app-intents-whats-new-27 · audit-xcode-security-settings · adopt-c-bounds-safety · uikit-app-modernization · modernize-tests · device-interaction · building-document-based-swiftui-applications
仓库结构
.
├── presets/apple/ # agent preset:agent.cordis.yml + preset.yml(0.1.x 用)
├── bin/mcpbridge # 运行时切换用的 mcpbridge 启动器(--runtime-selectable)
├── cordis.patch.yml # bundle patch:声明 Apple Mode(DSH 0.2+)
├── package.json # bundle manifest(dsh.bundle.patch)
├── docs/
│ ├── XCODE_AI_INTEGRATION.md # 完整接入说明(中文)
│ ├── global-mcp.md # 全局 bundle 与 preset 的取舍
│ └── publishing.md # 发布到 npm 的步骤
├── install.sh # 安装 preset + 本地生成技能
├── uninstall.sh
└── LICENSE # MIT
自定义
- 更换 Xcode:重跑
./install.sh(选择器)、./install.sh --xcode <路径>(非交互)、--runtime-selectable+DSH_XCODE_DEVELOPER_DIR,或在mcp-xcode行加env: { MCP_XCODE_PID: '<pid>' }指定某个正在运行的实例。详见选择 Xcode(多版本共存)。 - persona:编辑同文件的
persona行文本。 - Xcode 升级后同步技能:重跑
./install.sh(技能整体替换,preset 自动备份)。 - 对齐上游 standard preset:与
node_modules/@deepseek-ai/dsh/config/agent-presets/standard/agent.cordis.yml做diff。
安全说明
- MCP 工具调用不经过 DSH 文件沙箱,走工具级审批流程。
XcodeUpdate/XcodeWrite会直接修改真实 Xcode 工程文件(含project.pbxproj)。 - preset 仅在你主动选择时激活;
install.sh不触碰任何全局配置。
参与贡献
欢迎 PR 与 issue。如果你发布自己的 DSH 扩展,请打上 dsh-plugin 话题,并考虑提交到 awesome-dsh-plugin。
许可证
MIT。Xcode AI 技能由安装脚本在你的机器上从你自己的 Xcode 生成,仍受 Apple 许可约束;persona 提示词风格改编自 Xcode Intelligence 模板(行为指导,非 Apple 源码文本)。
链接
同类插件
DayuanJiang/next-ai-draw-io#dsh-plugin★ 36802
dsh 的 draw.io 绘图插件:通过 next-ai-drawio MCP 服务器作图,点回复里的链接在右侧栏打开实时预览,可以手动修改图,AI 的每次修改都是可以恢复的版本。需 Node.js 18+,首次使用由 npx 下载 MCP 服务器。
Tencent/WeKnora#dsh-weknora★ 36302
把 WeKnora 知识库接入 dsh 的四个只读工具:列出知识库、混合检索原文片段、按顺序还原单篇文档,以及直接取用 WeKnora 自己带引用的 RAG 或 ReAct agent 回答(含可续聊的 session id)。
superdesigndev/treg★ 7042
给 Agent 的工具目录:按「要做的事」检索约 2,600 个外部接口(SEO 与 SERP、外链、社交、人物与公司信息补全、广告库、抓取),查看参数与单次调用价格后直接调用,凭据由服务端注入。附带技能,MCP 行在未设置 TREG_TOKEN 前保持禁用。
T-Auto/dsh-ops★ 5074
为 Windows 的 DSH 提供 bash、PowerShell 7 及 Rust 高性能工具,减少 token 消耗。
sixtysevenlf/dsh-blender-plugin★ 1575
让 DSH agent 通过直连 TCP 通道驱动本地 Blender,提供 15 个工具:视口帧、自定义视角渲染、Python 执行、无头与作业卸载、事务回滚,以及 34 个 family / 228 个 op 的规划层。
TencentCloudBase/CloudBase-AI-Toolkit#dsh-plugin★ 1155
把腾讯云 CloudBase 后端接入 DeepSeek Harness——在对话里搭好并部署全栈应用,查询结果渲染为表格卡片(分页、排序、导出 CSV),部署后可预览真实域名,并提供 CloudBase MCP 工具集(`mcp__cloudbase__*`),登录走 device-code 流程。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。