跃迁引擎

空気を読んだ雨降らないでよ

iOS Research & Development


iOS 集成 Copilot 至 Xcode 实现智能化编程辅助

1. 前言

GitHub 推出了一个强大的 AI 代码工具 Copilot(副驾驶),它能提供很好的代码建议,大大加快编程的开发速度。

Copilot 支持许多编程语言,包括 Swift,并可以在IDE上安装相应的扩展插件,方便地在 IDE 上使用 Copilot。

2. CopilotForXcode

官方提到的 IDE 扩展并不包括 Xcode,令人高兴的是,Shx Guo 开发了 CopilotForXcode

只要安装 CopilotForXcode,然后再进行一些设置,就能在 Xcode 中使用 Copilot 了。

https://github.com/intitni/CopilotForXcode

3. 如何使用

接下来将一步步演示如何请 Copilo t在 Xcode 中帮忙写代码,和 Copilot 一起愉快地进行配对编程写 App:

  • 申请 GitHub Copilot 账户
  • 安装 Node
  • 安装和设置 Copilot for Xcode
  • 将 Copilot 加入 Xcode Source Editor 的扩展
  • 同意 Copilot for Xcode 所需的权限
  • 在 Xcode 中使用 Copilot 帮助编写代码
  • 配置 Codeium、OpenAI、Azure OpenAI

3.1 申请 GitHub Copilot 账户

进入 GitHub Copilot 网站。

https://github.com/features/copilot

选择 Get started with Copliot

选择 Start a free trial

选择 Get Access to GitHub Copilot ,每个人有30天免费试用期,30天 过后每个月费用为 10 美金/月。

你可以在 30 天到期前随时取消订阅,以免被意外扣费。

进入资料填写页面

绑定支付信息,信用卡(信用卡需支持外币)或 PayPal,点击 Save payment infomation 进行保存。

支付信息绑定成功后,选择 Allow,然后点击 Save and get started

然后就可以开始使用 Copilot 功能了。

3.2 安装 Node

⚠️ ⚠️⚠️ 有 Node 环境的可以跳过这一步 ⚠️⚠️⚠️

为了能使用 Copilot for Xcode,我们必须先安裝 Node。

https://nodejs.org/

下载对应 pkg 文件安装

3.3 安装和设置 Copilot for Xcode

下载 Copilot for Xcode 的安装包(注意:不是源码)。

将 Copilot for Xcode 移动到 Applications

启动 Copilot for Xcode,点击 Set Up Launch Agent for XPC Service

然后点击 Refresh 更新版本状态。

点击 Sign in 登录 GitHub 账号,点击后将打开 GitHub 的认证网页。

这个时候 user code 会自动复制到剪切板。

在认证网页 cmd + v 复制刚才的 user code,点击 Continue

点击 Authorize GitHub Copilot Plugin

连接成功。

回到 Copilot for Xcode,点击 Confirm Sign-in

完成 Copilot 的设置,Status 显示 OK

3.4 将 Copilot 加入 Xcode Source Editor 的扩展

我们必须将 Copilot 设置为 Xcode Source Editor 的扩展,之后才能在 Xcode 使用 Copilot 的相关功能。

打开 Settings App,进入 Extensions > Xcode Source Editor

勾选 Copilot

3.5 同意 Copilot for Xcode 所需的权限

为了让 Copilot 能在 Xcode 帮我们编程,我们还需要同意一些相关权限。

重新启动 Xcode 后,在菜单的 Editor > Copilot 可找到 Copilot 的相关命令,比方点击 Get Suggestions 可请 Copilot 给我们代码建议。

请先点击 Get Suggestions,让它出现权限不足的相关错误。比方下图显示无法访问 Accessibility API。

打开 Settings App,勾选 Privacy & Security > AccessibilityCopilot for Xcode

回到 Xcode,再次点击 Get Suggestions,然后同意 Copilot for Xcode 控制 Xcode 和访问桌面文件夹。

3.6 在 Xcode 中使用 Copilot 帮助编写代码

经历了千辛万苦,现在我们终于能在 Xcode 使用 Copilot 编程了。通常我们会通过两种方法请 Copilot 帮忙。

  • 输入注释说明需求,然后请 Copilot 帮忙。
  • 输入部分代码,请 Copilot 完成剩下的代码。

以下我们以实际的例子说明。

3.6.1 定义 array

3.6.1.1 方法1:输入注释
1
/// 定义十二星座的 array

将光标移到注释的下一行,然后点击 Xcode 菜单的 Editor > Copilot > Get Suggestions

Copilot 将十二星座的数组写在以下注释:

1
2
3
4
5
// 定义十二星座的 array

/*========== Copilot Suggestion 1/1
^let zodiacs = ["白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座", "水瓶座", "双鱼座"]
*///======== End of Copilot Suggestion

如果觉得 Copilot 的建议很好,请再点击 Xcode 菜单的 Editor > Copilot > Accept Suggestion,Copilot 将输入刚刚建议的代码:

1
2
// 定义十二星座的 array
let zodiacs = ["白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座", "水瓶座", "双鱼座"]
3.6.1.2 方法2:输入部分代码
1
let zodiacs = 

点击 Get Suggestions,Copilot 自动将十二星座的数组写在以下注释:

1
2
3
/*========== Copilot Suggestion 1/1
^["白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座", "水瓶座", "双鱼座"]
*///======== End of Copilot Suggestion

点击 Accept Suggestion,Copilot 输入刚刚建议的代码:

1
let zodiacs = ["白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座", "水瓶座", "双鱼座"]

3.6.2 定义 function

3.6.2.1 方法1:输入注释
1
// 检查是否为正确的 email 格式

将光标移到注释的下一行,然后点击 Get Suggestions,Copilot 将 email 格式检查的 function 写在以下注释。

1
2
3
4
5
6
7
8
/*========== Copilot Suggestion 1/2
^func isValidEmail(_ email: String) -> Bool {
let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
return emailPred.evaluate(with: email)
}

*///======== End of Copilot Suggestion

点击 Accept Suggestion,Copilot 输入刚刚建议的代码:

1
2
3
4
5
func isValidEmail(_ email: String) -> Bool {
let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
return emailPred.evaluate(with: email)
}
3.6.2.2 方法2:输入部分代码

输入

1
func isValidEmail

1
func isValidEmail(_ email: String) -> Bool { }

输入 func isValidEmail 后点击 Get Suggestions,Copilot 将 email 格式检查的 function 写在以下注释:

1
2
3
4
5
6
7
/*========== Copilot Suggestion 1/1
^(_ email: String) -> Bool {
let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
return emailPred.evaluate(with: email)
}
*///======== End of Copilot Suggestion

点击 Accept Suggestion,Copilot 输入刚刚建议的代码:

1
2
3
4
5
func isValidEmail(_ email: String) -> Bool {
let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
let emailPred = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
return emailPred.evaluate(with: email)
}

3.7 配置 Codeium、OpenAI、Azure OpenAI

Codeium、OpenAI 和 Azure OpenAI 的配置都相似,只要填入对应的 API Key 即可

具体说明参考:

https://github.com/intitni/CopilotForXcode/wiki/Frequently-Asked-Questions#codeium

4. 结论

优点

  • 安装难度较低,配置简单,对环境要求低。
  • 从示例可以看出,效果还是比较不错的,对开发效率的提升较为明显。
  • Github 账号直接捆绑,无需额外注册内容。
  • 对 Swift 支持力度较好。
  • 与 ChatGPT 相比的优势是响应速度更快,对编程来讲更智能。
  • 除了 Github Copilot 以外,还支持 Codeium、OpenAI 和 Azure OpenAI 等 AI 辅助工具。

缺点

  • 需要付费,且账号不共享,成本估算为 N * 10USD / 月
  • 鉴于过往插件的经验,Xcode 长时间使用的可能存在影响 IDE 响应速度的性能问题。
  • 根据作者描述,SwiftUI 预览版本对 Objective-C 的支持可能存在部分问题。
最近的文章

洋葱学园 iOS 端组件化重构之路[三]-重构完成

概述 以下数据均已脱敏 当前,洋葱学园移动端工程的组件化完成度较低,在影响工程师开发效率的同时,又难以兜住持续集成的影响范围,不利于整体工程的高质量建设,已无法满足日益增长的工程预期与精细化控制的需求,更是掣肘了对公司业务快速扩展的响应速度。 当前问题业务侧影响 业务组件独立度的低,难以快速部 …

, , 开始阅读
更早的文章

Rust 工程结构初探

Rust 项目的依赖管理机制 Rust 的依赖管理是基于项目的根 Cargo.toml 文件,而不是子目录中的 Cargo.toml 文件。如果再子目录的 Cargo.toml 文件中描述,即使同样在子目录中的.rs文件,也会出现识别不到的问题。 我们需要明确 Rust 项目的依赖管理机制。在 …

, , 开始阅读
comments powered by Disqus