3步完成AI助手自定义工具开发让Copilot for Xcode动手干活【免费下载链接】CopilotForXcodeAI coding assistant for Xcode项目地址: https://gitcode.com/GitHub_Trending/cop/CopilotForXcode凌晨一点半我的构建脚本又挂了。Copilot for Xcode 的AI助手在旁边只会说我可以帮你分析却什么忙都帮不上——直到我发现它其实藏着一整套 AI助手自定义工具 系统只是我从来没摸对门。后来我把这个开源项目从里到外翻了一遍又照着它写了一个专属工具才回过味来所谓AI不会干活多半不是模型不行而是没人给它装手。️今天这篇就把我怎么给它装上第一只手的过程原原本本讲给你听。想边看边动手的同学可以先把仓库拉下来git clone https://gitcode.com/GitHub_Trending/cop/CopilotForXcode上面这张图是AI在Xcode里一步步干活的实拍右侧模拟器跟着它的操作同步刷新——这就是能干活和只会聊天之间的鸿沟。深夜崩溃我对着只会聊天的AI干瞪眼那天晚上的报错长得能绕屏幕一圈。我试着让AI去终端重跑一遍、把报错抓回来分析它回我一句我建议你手动运行以下命令……手动我要是想手动还要它干嘛。第二天找同事吐槽他丢过来一句话你去看看项目里那个 ToolCalls 目录。我顺着这条线摸进去才发现自己一直在门外转悠。原来AI的手都藏在这个目录里Core/Sources/ChatService/ToolCalls/这层目录就是所有手的家。跑终端的、建文件的、抓网页的、收集报错的一应俱全RunInTerminalTool、CreateFileTool、FetchWebPageTool、GetErrorsTool……它们长相统一都遵循同一个协议ICopilotTool。这个协议只规定一件事怎么接请求、怎么把结果还回去。public protocol ICopilotTool { func invokeTool( _ request: InvokeClientToolRequest, completion: escaping (AnyJSONRPCResponse) - Void, contextProvider: ToolContextProvider? ) - Bool }这段代码解决的是工具的统一长相。你只要盯住completion这个回调工具干完活必须经由它把结果送回对话AI才知道是成功了还是报错了。换句话说实现这一个方法你就给AI装上了一只新手。第一关照着写文件这只手抄作业光看协议不过瘾。我们拿CreateFileTool当范本拆一遍它的活儿其实就四步校验参数、防覆盖、建目录写文件、把结果回报给AI。guard let filePath input[filePath]?.value as? String, let content input[content]?.value as? String else { completeResponse(request, status: .error, response: Invalid parameters, completion: completion) return true } let fileURL URL(fileURLWithPath: filePath) try FileManager.default.createDirectory( at: fileURL.deletingLastPathComponent(), withIntermediateDirectories: true, attributes: nil) try content.write(to: fileURL, atomically: true, encoding: .utf8)这段在解决AI说建文件怎么真的建出来。第一行的guard是守门员参数不齐直接报错返回别让AI瞎写中间那行createDirectory会自动补出父目录——新手工具十有八九就挂在路径的爸爸不存在这种破事上。顺带一提作者还留了个贴心小动作文件建好之后会自动调用 Xcode 打开让你一眼看到成果。第二关给它挂号AI才知道你有这只手工具写好了不注册等于没写。项目里有个CopilotToolRegistry注册表初始化时把所有工具塞进一个字典AI按名字来取。tools[ToolName.createFile.rawValue] CreateFileTool()就这一行工具就上架了。工具名也都定义在ToolNames.swift的枚举里给AI看的不是类名而是create_file、run_in_terminal这种下划线小名。第三关别让工具一崩到底我第一次自己写工具时天真地以为能跑就行结果AI建文件建到一半告诉我失败了又说不清为啥。翻完项目里的范本我才学乖一只称职的手至少要有三道保险。写之前先查文件在不在在就拒绝免得覆盖所有文件操作包进do-catch失败要带上原因回话写完再读一遍校验确认没写歪。每一步出错AI收到的都是一条带原因的报错而不是一个冷冰冰的 false。还有件容易被忽略的事让AI跑终端、写文件都属于有风险操作。项目在ToolCalls/AutoApproval/下备好了一整套审批机制敏感动作要不要弹窗让你确认可以按自己的习惯配置。上图是Xcode的扩展授权界面。勾选 GitHub Copilot 之后你的自定义工具才有资格操作编辑器——权限没给够再好的工具也只能回你一句权限不足。想更顺手还有两个小台阶工具不是孤岛。ToolContextProvider这个上下文提供者能让工具拿到当前打开的工作区路径、往聊天历史里追加执行记录还能把我改了哪些文件实时同步给AI。RunInTerminalTool就是靠它定位到你正在开发的项目目录命令才不会跑错地方。再往上走项目的设置界面里还有个内置工具列表BuiltInToolsListView支持搜索、开关还能按 Agent 模式单独配置。等你的工具多了就知道这个入口多省心了。想让AI干活先把手给它那天凌晨的事最后以我给AI加装了一个跑测试的自定义命令收场。现在它一看到报错就自己开终端重跑、抓回输出、逐行分析一气呵成。要不要也给 AI 加一条自定义命令试试让它自动格式化代码或者一键跑完单元测试。等你折腾完那一刻大概也会和我一样觉得那句我建议你手动运行特别可笑。【免费下载链接】CopilotForXcodeAI coding assistant for Xcode项目地址: https://gitcode.com/GitHub_Trending/cop/CopilotForXcode创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考