Copilot for Xcode
Copilot for Xcode 是一个 Xcode 源代码编辑器扩展,为 Xcode 提供 GitHub Copilot、Codeium 和 ChatGPT 支持。
功能
- 代码建议(由 GitHub Copilot 和 Codeium 提供支持)。
- 聊天(由 OpenAI ChatGPT 提供支持)。
- 从提示到代码(由 OpenAI ChatGPT 提供支持)。
- 自定义命令以扩展聊天和从提示到代码的功能。
目录
有关常见问题,请查看 FAQ。
关于开发说明,请查看 Development.md。
有关更多信息,请查看 wiki。
先决条件
- 公共网络连接。
有关建议功能:
- 对于 GitHub Copilot 用户:
- 安装 Node 以运行 Copilot LSP。
- 有效的 GitHub Copilot 订阅。
- 对于 Codeium 用户:
- 有效的 Codeium 账户。
- 访问其他 LLMs。
有关聊天和从提示到代码功能:
- 有效的 OpenAI API 密钥。
- 访问其他 LLMs。
所需权限
- 文件夹访问
- 辅助功能 API
如果您担心键盘记录并且无法信任二进制文件,我们建议查看代码并自行构建。为了应对任何担忧,您可以在代码中专门搜索
CGEvent.tapCreate
,AXObserver
,AX___
。
安装和设置
安装过程有点复杂。以下是快速概述:
- 将应用安装到应用程序文件夹中,打开一次。
- 启用源代码编辑器扩展。
- 授予扩展应用辅助功能 API 权限。
- 在主机应用中设置账户和模型。
- 可选地,更新主机应用中每个功能的设置,并设置键绑定。
安装
您可以通过 Homebrew 安装:
brew install --cask copilot-for-xcode
或手动安装,在最新的 release 下载 Copilot for Xcode.app
。
请确保应用在应用程序文件夹中。
打开该应用,应用将创建一个启动代理来设置后台运行的服务,以执行实际的工作。
启用扩展
在 系统设置.app
中启用扩展。
从屏幕左上角的 Apple 菜单点击 系统设置
。导航到 隐私和安全
,然后在底部点击 扩展
。点击 Xcode 源代码编辑器
并勾选 Copilot
。
如果您使用的是 macOS Monterey,请从 系统偏好设置.app
中的专用图标进入 扩展
菜单。
授予应用权限
第一次打开应用并运行命令时,扩展将请求必要的权限。
或者,您可以手动授予所需权限,方法是导航到 系统设置.app
中的 隐私和安全
选项卡。
- 要授予辅助功能 API 的权限,请点击
辅助功能
,并将CopilotForXcodeExtensionService.app
拖到列表中。您可以通过点击主机应用中的在 Finder 中显示扩展应用
找到扩展应用。
如果您遇到以前已授予权限的警报请求,请从列表中移除权限并重新添加以重新授予必要权限。
设置键绑定
如果使用键绑定,扩展将更好地工作。
看起来没有办法为命令添加默认键绑定,但您可以在 Xcode 设置 > 键绑定
中设置它们。您可以通过在搜索栏中输入 copilot
来过滤列表。
一个 推荐的设置 应该不会引起冲突:
命令 | 键绑定 |
---|---|
接受建议 | ⌥} 或 Tab |
取消建议 | Esc |
拒绝建议 | ⌥{ |
下一个建议 | ⌥> |
上一个建议 | ⌥< |
打开聊天 | ⌥" |
解释选择 | ⌥| |
基本上使用 ⌥⇧
作为所有绑定的“访问”组合键。
另一种方便访问命令的方法是使用 ⇧⌘/
快捷键在菜单栏中搜索命令。
设置全局热键
目前,您可以设置一个全局热键在主机应用的常规选项卡下显示/隐藏小部件。
当此热键没有设置为全局启用时,它只在服务应用或 Xcode 激活时工作。
设置建议功能
设置 GitHub Copilot
-
在主机应用中,导航到“服务 - GitHub Copilot”以访问您的 GitHub Copilot 账户设置。
-
点击“安装”以安装语言服务器。
-
可选地,设置 Node 的路径。默认值只是
node
。Copilot for Xcode.app 将尝试从以下目录中查找 Node:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
。如果您的 Node 安装位于其他位置,您可以从终端运行
which node
以获得正确路径。如果您使用提供虚拟执行文件的 Node 版本管理器,您需要找到实际可执行文件的路径。有关更多信息,请参阅 FAQ。
-
点击“登录”,您将被重定向到 GitHub 提供的验证网站。一个用户代码将被复制到您的剪贴板。
-
登陆后,返回应用并点击“确认登录”以完成过程。
-
转到“功能 - 建议”并将功能提供商更新为“GitHub Copilot”。
安装的语言服务器位于 ~/Library/Application Support/com.intii.CopilotForXcode/GitHub Copilot/executable/
。
设置 Codeium
- 在主机应用中,导航到“服务 - Codeium”以访问 Codeium 账户设置。
- 点击“安装”以安装语言服务器。
- 点击“登录”,您将被重定向到 codeium.com。登录后,将提供一个令牌。您需要将此令牌复制并粘贴回应用以完成登录过程。
- 转到“功能 - 建议”并将功能提供商更新为“Codeium”。
密钥存储在钥匙串中。当助手应用首次尝试访问密钥时,它将提示您输入密码以访问钥匙串。请选择“始终允许”以让助手应用访问密钥。
安装的语言服务器位于 ~/Library/Application Support/com.intii.CopilotForXcode/Codeium/executable/
。
设置聊天功能
- 在主机应用中,导航到“服务 - 聊天模型”。
- 更新 OpenAI 模型,或根据需要创建一个新模型。使用测试按钮验证模型。
- 可选地,在“服务 - 嵌入模型”中设置嵌入模型,这是聊天功能子集所需的。
- 转到“功能 - 聊天”,并使用您刚更新/创建的模型更新聊天/嵌入功能提供商。
管理 CopilotForXcodeExtensionService.app
每当您打开 Copilot for Xcode.app
或 Xcode.app
时,此应用程序将运行。您可以通过其菜单栏项目(看起来像触须)退出它。
您也可以设置自动退出,当上述两个应用关闭时。
更新
您可以使用应用内更新程序或从最新的 release 手动下载最新版本。
更新后,请打开 Copilot for Xcode.app 一次并重启 Xcode,以允许扩展重新加载。
如果发现某些功能不再工作,请先尝试重新授予应用权限。
功能
.gitignore 中的文件将不会收到建议。聊天和从提示到代码功能将无法访问这些文件,除非您手动选择其中的代码。
建议
该应用可基于您打开的文件提供实时代码建议。由 GitHub Copilot 和 Codeium 提供支持。
该功能提供两种呈现模式:
- 附近文本光标:此模式基于文本光标位置显示建议。
- 浮动小部件:此模式在圆形小部件旁边显示建议。 使用“邻近文本光标”模式时,建议将实时建议的去抖动时间设置为0.1。
如果您正在处理公司项目并且不希望启用建议功能,可以全局禁用它并选择仅在特定项目中启用。
每当您的代码更新时,应用程序会自动为您获取建议,您可以通过按 Escape 取消此操作。
*: 如果在辅助应用程序启动之前文件已经打开,您需要切换到这些文件才能发送打开文件通知。
命令
- 获取建议:在当前光标位置获取编辑文件的建议。
- 下一个建议:如果有多个建议,切换到下一个建议。
- 上一个建议:如果有多个建议,切换到上一个建议。
- 接受建议:将建议添加到代码。
- 拒绝建议:移除建议注释。
由应用程序调用的命令:
- 准备实时建议:仅供 Xcode 的 Copilot 调用。当成功获取建议时,Xcode 的 Copilot 会运行此命令以展示建议。
- 预取建议:仅供 Xcode 的 Copilot 调用。在后台,Xcode 的 Copilot 会偶尔运行此命令以预取实时建议。
聊天
此功能由 ChatGPT 提供支持。请确保在使用前已设置好您的 OpenAI 帐户。
聊天知道以下信息:
- 活跃编辑器中选定的代码。
- 文件的相对路径。
- 活跃编辑器中的错误和警告标签。
- 文本光标位置。
聊天面板当前有两个标签:一个可在Xcode中共享,另一个仅适用于当前文件。
您可以通过简单地拖动来分离聊天面板。分离后,即使Xcode处于非活动状态,聊天面板也会保持可见。要重新附加到小部件,请点击位于圆形小部件旁边的消息气泡按钮。
命令
- 打开聊天:打开一个聊天标签。
键盘快捷键
快捷键 | 描述 |
---|---|
⌘W | 关闭聊天标签。 |
⌘M | 最小化聊天,您可以通过任何聊天命令或单击圆形小部件将其恢复。 |
⇧↩︎ | 添加新行。 |
⇧⌘] | 移动到下一个标签 |
⇧⌘[ | 移动到上一个标签 |
聊天范围
聊天面板允许聊天范围暂时控制最新消息的对话上下文。要使用范围,只需在消息前加上 @scope
。
如果默认情况下开启了 在聊天上下文中默认使用@code范围
,那么@code
会默认开启。否则,@file
会默认开启。
要使用范围,您可以在消息前加上 @code
。
您可以使用简写表示范围,例如 @c
,并使用 @c+web
启用多个范围。
聊天插件
聊天面板支持可能不需要 OpenAI API 密钥的聊天插件。例如,如果需要使用 /run
插件,只需输入
/run echo hello
如果需要结束插件,可以输入
/exit
命令 | 描述 |
---|---|
/run | 在项目根目录下运行命令。 |
环境变量: - PROJECT_ROOT 获取项目根目录。 - FILE_PATH 获取编辑文件路径。 | |
/search | 在 Bing 上搜索并总结结果。在使用前,您需要在主应用程序中设置 Bing 搜索 API。 |
/shortcut(name) | 运行快捷方式应用程序中的快捷方式,并使用以下消息作为输入。 |
如果消息为空,将使用上一条消息作为输入。快捷方式的输出将被打印为来自机器人的回复。 | |
/shortcutInput(name) | 运行快捷方式应用程序中的快捷方式,并使用以下消息作为输入。 |
如果消息为空,将使用上一条消息作为输入。快捷方式的输出将作为用户消息发送给机器人。 |
自然语言生成代码
使用自然语言重构现有代码或编写新代码。
当您需要更新特定代码片段时,建议使用此功能。一些示例用例包括:
- 提高代码可读性。
- 修正代码中的错误。
- 为代码添加文档。
- 将大函数拆分为较小的函数。
- 通过自定义命令使用特定模板生成代码。
- 修饰和纠正文档中的语法和拼写错误。
- 翻译本地化字符串文件。
自然语言生成代码范围
聊天面板允许聊天范围暂时控制最新消息的对话上下文。要使用范围,只需在消息前加上 @scope
。
要使用范围,您可以在消息前加上 @sense
。
您可以使用简写表示范围,例如 @sense
,并使用 @c+web
启用多个范围。
命令
- 自然语言生成代码:打开自然语言生成代码窗口,您可以使用自然语言编写或编辑选定的代码。
- 接受自然语言生成的代码:接受自然语言生成的代码结果。
自定义命令
您可以创建自定义命令,通过个性化提示运行聊天和自然语言生成代码。这些命令可以通过 Xcode 菜单栏和圆形小部件的上下文菜单轻松访问。有三种类型的自定义命令:
- 自然语言生成代码:使用所选代码运行自然语言生成代码,并使用给定的提示更新或编写代码(如果提供)。您可以通过额外的系统提示字段提供更多信息。
- 发送消息:打开聊天窗口并立即发送消息(如果提供)。您可以通过额外的系统提示字段提供更多信息。
- 自定义聊天:打开聊天窗口并立即发送消息(如果提供)。您可以通过系统提示字段覆盖整个系统提示。
- 单轮对话:向临时聊天发送消息。当您想通过
/run
运行终端命令时,这很有用。
您可以在自定义命令中使用以下模板参数:
参数 | 描述 |
---|---|
{{selected_code}} | 编辑器中当前选定的代码。 |
{{active_editor_language}} | 活跃编辑器的编程语言。 |
{{active_editor_file_url}} | 活跃编辑器中文件的 URL。 |
{{active_editor_file_name}} | 活跃编辑器中文件的名称。 |
{{clipboard}} | 剪贴板中的内容。 |
限制
- 扩展使用各种技巧来监控 Xcode 的状态。可能会失败,可能会不正确,特别是当您运行多个 Xcode 窗口时,情况可能会更糟,尤其是在不同显示器上。我对此并不确定。
许可证
详情请查看 LICENSE。