我为 DeepSeek Harness 写了一个 dsh-apple-mode 插件

iOS 开发者的 AI 工作流,终于不用在「Xcode 的智能」和「自己习惯的 Agent」之间二选一了。

DeepSeek Harness 终于在千呼万唤中推出了公开测试版。我也是第一时间下载体验了一下,讲真确实让我大吃一惊。它的完成度已经很高,虽然 UI 还略显质朴,但是底层理解、分析和完成任务的能力已经超越了 Antigravity,和 Codex、Cloude 在一个水平上。当前后者在易用性上更成熟,对新手更友好。不过对于开发者而言,对 Harness 进行调教已经是一个必备技能了,下面我就作为一个 iOS 开发者,分享一下我是如何对 DeepSeek Harness 进行调教,并最终开发了一个 dsh-apple-mode 插件,以更好的适配 iOS/Apple 开发。

如果你做 Apple 平台开发(iOS / macOS / watchOS / visionOS),又正在用 DeepSeek Harness(以下简称 DSH)这类 Agent 工具,下面这个场景你一定不陌生:

  • 想让 AI 直接改 Xcode 工程,但它只能读文件系统,看不懂 project.pbxproj 的组织方式;
  • 想让 AI 遵循 SwiftUI / App Intents 的最佳实践,但通用模型的知识总是落后于 WWDC 之后的新 API;
  • 想让 AI 像 Xcode Intelligence 那样「Swift 优先、先查后写」地干活,但每个工具都得自己拼 prompt。

自 Xcode 26 起,Apple 已经在 Xcode 中内置了大量的 AI 工具,直接使用内置的第三方模型插件,就能获得很好的效果。但是目前 Xcode 的 AI 插件只有 Codex 和 Cluade,Xcode 27 也仅仅是增加了 Gemini。对于其它 IDE/Harness,如何充分利用 Xcode 内置的 AI 能力,就成了我们调教的重点。

Xcode 26 其实已经把这三样「原材料」都给了我们------mcpbridge(官方 MCP 工具)、xcrun agent skills export(官方技能)、IDEIntelligenceChat 框架里的系统提示词。缺的只是一个把它们组合起来的载体。

于是有了 dsh-apple-mode:一个把「执行能力 + 知识能力 + 行为风格」打包成 DSH「模式」的插件,装完即可在会话里获得完整的 Xcode AI 能力栈。


1. 三样原材料,三个不同的层

在动手之前,先看清楚这三样东西各自是什么角色:

能力 来源 对应 DSH 机制
执行(手) 26 个 Xcode MCP 工具 mcpbridge(Xcode 官方 STDIO 桥) dsh-mcp-client
知识(脑) 10 个 Apple 平台技能 xcrun agent skills export 本地导出 dsh-skill-filesystem
行为(人格) Xcode Intelligence 提示词风格 IDEIntelligenceChat.framework agent preset 的 persona

MCP 工具 解决「AI 能不能操作 Xcode 工程」:读写文件走 Xcode 工程组织而非文件系统、改构建设置不用手碰 pbxproj、能读 Issue Navigator、能切 scheme / 运行目标 / 测试计划、能直接读写 String Catalog。

技能 解决「AI 知不知道正确姿势」:swiftui-specialist(SwiftUI 最佳实践)、app-intents-specialist(App Intents 权威指南)、audit-xcode-security-settings(构建安全加固)、adopt-c-bounds-safety(C 语言边界安全)......这些是 Apple 官方发布、明确写着「无条件取代模型先前训练知识」的权威内容,且按需懒加载,不占上下文。

提示词解决「AI 怎么干活」:Swift 优先、工具辅助推理、先分类「解释 vs 改动」再动手------把 Xcode Intelligence 的工作风格移植到 DSH 会话里。

这三样东西是互补的,不是二选一。所以插件的核心设计决策是:用 DSH 的 agent preset(模式)机制把它们组合起来

2. 核心设计决策:为什么是「模式」而不是全局接入

DSH 里最自然的组合单元是 agent preset(模式) ------本质上是一份 agent.cordis.yml 组合文件,可以自定义 persona、挂载工具、选择技能集,用户在新建会话时按需选择。

一开始我也想过把 MCP 直接全局接入(写进 profile 的 patch),但立刻被一个数字劝退了:26 个工具的大 schema 常驻上下文,每个请求大约多花 6k+ tokens。如果所有会话都背着这套 schema,等于让每一个无关任务都在为 Xcode 工具集买单。

挂在 preset 内则完全不同:

  • 选「Apple Mode」的会话 → 26 个 mcp__xcode__* 工具 + 10 个技能 + Xcode Intelligence 风格 persona,全套能力;
  • 其他会话 → 保持轻量,零额外负担。

这也是 DSH「一切皆插件、按需组合」哲学的实践:工具与行为跟着模式走,而不是跟着进程走。

3. 功能清单

26 个 Xcode MCP 工具(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

几个值得单独说的点:

  • 改构建设置不用碰 pbxprojUpdateTargetBuildSetting / UpdateFileCompilerFlags 是 Xcode 官方给出的正确姿势,工具描述里直接写着「不要直接编辑 project.pbxproj」;
  • 诊断即上下文XcodeListNavigatorIssues 能拿到 Issue Navigator 里当前的问题(含 fresh/stale 状态),AI 修 bug 时不用再靠猜;
  • 本地化一条龙StringCatalogRead 能按翻译状态(未翻译/需校对/已翻译)分桶取 key,StringCatalogEdit 直接写入。

10 个 Apple 平台技能

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

一个值得学习的合规设计

技能是 Apple 官方内容SKILL.md 里写着 "published by Apple")。直接把它们打进仓库重新分发有许可风险,所以仓库只包含我们自己的代码、配置和文档,技能由 install.sh 在用户机器上通过 xcrun agent skills export 本地生成------既保证内容最新,又零分发风险。

4. 多 Xcode 版本共存:安装时可以自己选

很多开发者机器上同时装着 Xcode.appXcode-beta.app,而 mcpbridge 只存在于 Xcode 26+ 的 Contents/Developer/usr/bin 下。插件给了三个层次的解决方案:

bash 复制代码
./install.sh --list-xcodes   # 列出所有含 mcpbridge 的 Xcode
./install.sh                 # 交互式选择(默认 xcode-select 选中项)
./install.sh --xcode /Applications/Xcode.app   # 非交互指定

安装时的选择会直接渲染进 preset:默认用 xcrun mcpbridge(可移植、跟随 xcode-select),选了其他 Xcode 则写入绝对路径。

进阶场景------运行时切换、不重装

ini 复制代码
./install.sh --runtime-selectable   # 安装 bin/mcpbridge 启动器
DSH_XCODE_DEVELOPER_DIR=/Applications/Xcode-26.2.app/Contents/Developer dsh web

如果想让 MCP 连接某个正在运行 的特定 Xcode 实例,还可以在 preset 里加 env: { MCP_XCODE_PID: '<pid>' }

5. 快速开始

bash 复制代码
git clone https://github.com/jihongboo/dsh-apple-mode.git
cd dsh-apple-mode
./install.sh

安装脚本做三件事:检测并让你选择 Xcode → 安装 Apple Mode preset → 本地生成 10 个技能。

使用:

  1. 重启 dsh(或直接新建会话------preset 只能在空白会话选择);
  2. 建会话时选择 Apple Mode
  3. 开始干活。

⚠️ 使用 MCP 工具前 :需要保证 Xcode 已启动并打开了相应的项目,并且在 Xcode 弹出的 MCP 接入对话框中点击「允许」------否则工具调用会被拒绝。这可能是新手最容易踩的坑。

如果希望所有会话都有 MCP 工具(不选模式),也有全局方案:

csharp 复制代码
dsh plugin --profile web add "github:jihongboo/dsh-apple-mode"

6. 一些真实使用场景

  • 修编译错误 :让 AI 先 XcodeListNavigatorIssues 拿到真实错误清单,再 XcodeRead 定位、XcodeUpdate 修复,最后 XcodeRefreshCodeIssuesInFile 验证------全程不用复制粘贴报错文本;
  • SwiftUI 新 API 迁移swiftui-whats-new-27 技能能处理 iOS 27 SDK 升级后 @State 宏化导致的「used before being initialized」这类编译错误(重排 init 是错误修法);
  • 本地化补全StringCatalogRead 拉出未翻译 key,AI 按 Apple 的引号规范批量 StringCatalogEdit
  • 安全审计audit-xcode-security-settings 技能 + UpdateTargetBuildSetting,逐步开启编译警告、静态分析器和 Enhanced Security,且每一步都有决策文档可回滚;
  • 新建扩展 targetXcodeListTemplates 查模板 → XcodeNewTarget 创建(自动处理 bundle id 前缀、嵌入宿主 app 等规则)。

7. 需要注意的边界

  • 审批边界 :MCP 工具调用不经过 DSH 的文件沙箱 ,走的是工具级审批流程------XcodeUpdate / XcodeWrite会直接改真实工程文件(含 project.pbxproj),审批时会看到对应工具名;
  • 构建/运行/测试仍走终端 :MCP 工具集负责工程手术和诊断,构建建议 xcodebuild 管道到 xcsift 获得结构化输出;
  • 兼容性:DeepSeek Harness 处于开发者预览阶段,接口可能变化;插件本身是内容型(配置 + 脚本),不依赖 DSH 内部 API,升级风险很低。

8. 资源链接


小结:dsh-apple-mode 做的事情很简单------把 Xcode 官方给出的 MCP 工具、技能和 Intelligence 提示词这三样「原材料」,用 DSH 的 preset 机制组装成一个开箱即用的模式。如果你既离不开 Xcode 的智能,又想在自己熟悉的 Agent 工作流里干活,值得一试。

相关推荐
mCell3 小时前
DeepSeek Harness 速览:“一切皆插件”意味着什么
typescript·agent·deepseek
答案—answer7 小时前
VibeCoding 能做到什么程度?我用它做了一座 3D 数字博物馆
3d·ai编程·threejs·vibecoding
2501_915921438 小时前
抓包鹰 Traceeagle 解除证书绑定,SSL Pinning 解除
网络·网络协议·网络安全·ios·adb·https·ssl
火云牌神8 小时前
前后端分离:约束 AI 分工,避免接口耦合与职责错乱
人工智能·系统架构·ai编程·前后端分离·vibecoding
岛雨QA9 小时前
Claude Code国内无障碍接入 DeepSeek使用指南
ai编程·claude·deepseek
ServBay10 小时前
DeepSeek V4 Pro 发布,1.6T 参数、1M 上下文,又有人坐不住了
aigc·ai编程·deepseek
文心快码BaiduComate14 小时前
文心快码能力扩展、记忆、代码可视化上线
人工智能·ai编程·vibecoding
梦想的颜色14 小时前
AI 时代小白 VibeCoding 做 APP:UniApp(含 Uni‑X)、Flutter 与 React Native+Expo全维度技术选型对比指南
flutter·react native·app·uniapp·vibecoding·unippx·app产品
我才是银古14 小时前
给 AI 编程代理做"减法":Token 经济学视角下的配置工程实践
deepseek·opencode