用老師 / 學生身份免費使用 GitHub Copilot

最近學生跟彼得潘說他可以免費使用 GitHub Copilot,因為他有學生身份。因此彼得潘也查了一下,發現老師也有這樣的福利耶。

以下為彼得潘一步步驗證老師身份,然後在 VS Code 免費使用 Copilot 的過程,有興趣以老師 / 學生身份免費使用 Copilot 的朋友也可以參考看看。

  • 註冊 GitHub 帳號,設定 Profile。
  • 驗證老師 / 學生身份。
  • 取得免費使用 GitHub Copilot 的權限。
  • 在 VS Code 安裝 GitHub Copilot extension。
  • 使用 GitHub Copilot 寫程式。

註冊 GitHub 帳號,設定 Profile

註冊 GitHub 帳號,然後設定 GitHub 的 Profile,填寫個人名字並在 Bio 做簡單的介紹,之後 GitHub 在驗證身份時會比對 Profile 的名字跟證明文件的名字是否一致。

驗證老師 / 學生身份

連到以下連結,選擇 Teacher 或 Student。

網站自動從 GitHub 帳號 apppeterpan@email.ntou.edu.tw 辨識出彼得潘是海洋大學的老師。如果 GitHub 帳號不是 edu 結尾的學校信箱,可點選 Add an email address 新增學校信箱,學校的 email 可加速審核的速度。

點選 Continue 後,進入身份證明的頁面,可選擇上傳教師 / 學生證或其它證明身份的文件。

彼得潘上傳海洋大學的聘書,然後點選 Process my application。

ps: 彼得潘原本點選 Upload an image 上傳圖片,不過身分驗證一直出問題,後來改用拍照的方式才成功通過審核。

等待 GitHub 的審核。

才等了幾分鐘,還來不及喝杯咖啡,彼得潘就從信箱收到通過審核的信。

取得免費使用 GitHub Copilot 的權限

連到 GitHub Copilot 的網站。

點選 Get started with Copilot。

點選 Start a free trial。

太棒了,真的可以免費使用耶,大大的文字寫著 Congratulations! You are eligible to use GitHub Copilot for free

點選 Allow 和 Save and get started。

在 VS Code 安裝 GitHub Copilot

打開 VS Code,從 Extensions 頁面安裝 GitHub Copilot。

詳細的 GitHub Copilot 說明可參考以下連結。

VS Code 必須連結 GitHub 帳號才能使用 GitHub Copilot,因此我們要先點選 Authorize Visual-Studio-Code。

點選 Allow。

點選 Open。

使用 GitHub Copilot 寫程式

現在可以開始免費使用 copilot 了。以下彼得潘請 copilot 用 SwiftUI 寫一個鬼故事 App。

先寫注解,然後按 enter 後 copilot 會提示可輸入的程式。

按 tab 可完成輸入。

如果提示消失,可按 Trigger Inline Suggestion 的快速鍵option 加 \ 觸發提示再次出現。

ps: 如果不想整段輸入,只想輸入部分內容,我們還有以下兩種選項。

  • Accept Word: 輸入一個單字,快速鍵 cmd + 向右鍵。
  • Accept Line: 輸入一行,預設無快速鍵,以下是彼得潘另外設定的 cmd + ctrl + 英文的 l。

以下是 copilot 精心創作的鬼故事 App。

import SwiftUI

struct ContentView: View {
var body: some View {
NavigationView {
List {
NavigationLink(destination: StoryView(story: Story(title: "鬼屋", content: "從前有一個鬼屋,裡面住著一個鬼,他的名字叫做小明,他很喜歡吃人,有一天,他吃了一個小孩,他的名字叫做小華,小華的爸爸很生氣,他去找小明算帳,小明說:「我不是故意的,我只是餓了,我會賠錢給你。」小華的爸爸說:「好吧,我就原諒你了。」", imageName: "鬼屋"))) {
Text("鬼屋")
}
NavigationLink(destination: StoryView(story: Story(title: "鬼娃", content: "從前有一個鬼娃,他的名字叫做小明,他很喜歡吃人,有一天,他吃了一個小孩,他的名字叫做小華,小華的爸爸很生氣,他去找小明算帳,小明說:「我不是故意的,我只是餓了,我會賠錢給你。」小華的爸爸說:「好吧,我就原諒你了。」", imageName: "鬼娃"))) {
Text("鬼娃")
}
NavigationLink(destination: StoryView(story: Story(title: "鬼媽媽", content: "從前有一個鬼媽媽,她的名字叫做小明,他很喜歡吃人,有一天,他吃了一個小孩,他的名字叫做小華,小華的爸爸很生氣,他去找小明算帳,小明說:「我不是故意的,我只是餓了,我會賠錢給你。」小華的爸爸說:「好吧,我就原諒你了。」", imageName: "鬼媽媽"))) {
Text("鬼媽媽")
}
NavigationLink(destination: StoryView(story: Story(title: "鬼爸爸", content: "從前有一個鬼爸爸,他的名字叫做小明,他很喜歡吃人,有一天,他吃了一個小孩,他的名字叫做小華,小華的爸爸很生氣,他去找小明算帳,小明說:「我不是故意的,我只是餓了,我會賠錢給你。」小華的爸爸說:「好吧,我就原諒你了。」", imageName: "鬼爸爸"))) {
Text("鬼爸爸")
}
NavigationLink(destination: StoryView(story: Story(title: "鬼奶奶", content: "從前有一個鬼奶奶,她的名字叫做小明,他很喜歡吃人,有一天,他吃了一個小孩,他的名字叫做小華,小華的爸爸很生氣,他去找小明算帳,小明說:「我不是故意的,我只是餓了,我會賠錢給你。」小華的爸爸說:「好吧,我就原諒你了。」", imageName: "鬼奶奶"))) {
Text("鬼奶奶")
}
NavigationLink(destination: StoryView(story: Story(title: "鬼爺爺", content: "從前有一個鬼爺爺,他的名字叫做小明,他很喜歡吃人,有一天,他吃了一個小孩,他的名字叫做小華,小華的爸爸很生氣,他去找小明算帳,小明說:「我不是故意的,我只是餓了,我會賠錢給你。」小華的爸爸說:「好吧,我就原諒你了。」", imageName: "鬼爺爺"))) {
Text("鬼爺爺")
}
NavigationLink(destination: StoryView(story: Story(title: "鬼姊姊", content: "從前有一個鬼姊姊,她的名字叫做小明,他很喜歡吃人,有一天,他吃了一個小孩,他的名字叫做小華,小華的爸爸很生氣,他去找小明算帳,小明說:「我不是故意的,我只是餓了,我會賠錢給你。」小華的爸爸說:「好吧,我就原諒你了。」", imageName: "鬼姊姊"))) {
Text("鬼姊姊")
}
NavigationLink(destination: StoryView(story: Story(title: "鬼哥哥", content: "從前有一個鬼哥哥,他的名字叫做小明,他很喜歡吃人,有一天,他吃了一個小孩,他的名字叫做小華,小華的爸爸很生氣,他去找小明算帳,小明說:「我不是故意的,我只是餓了,我會賠錢給你。」小華的爸爸說:「好吧,我就原諒你了。」", imageName: "鬼哥哥"))) {
Text("鬼哥哥")
}
NavigationLink(destination: StoryView(story: Story(title: "鬼弟弟", content: "從前有一個鬼弟弟,他的名字叫做小明,他很喜歡吃人,有一天,他吃了一個小孩,他的名字叫做小華,小華的爸爸很生氣,他去找小明算帳,小明說:「我不是故意的,我只是餓了,我會賠錢給你。」小華的爸爸說:「好吧,我就原諒你了。」", imageName: "鬼弟弟"))) {
Text("鬼弟弟")
}
NavigationLink(destination: StoryView(story: Story(title: "鬼妹妹", content: "從前有一個鬼妹妹,她的名字叫做小明,他很喜歡吃人,有一天,他吃了一個小孩,他的名字叫做小華,小華的爸爸很生氣,他去找小明算帳,小明說:「我不是故意的,我只是餓了,我會賠錢給你。」小華的爸爸說:「好吧,我就原諒你了。」", imageName: "鬼妹妹"))) {
Text("鬼妹妹")
}
NavigationLink(destination: StoryView(story: Story(title: "鬼姪子", content: "從前有一個鬼姪子,他的名字叫做小明,他很喜歡吃人,有一天,他吃了一個小孩,他的名字叫做小華,小華的爸爸很生氣,他去找小明算帳,小明說:「我不是故意的,我只是餓了,我會賠錢給你。」小華的爸爸說:「好吧,我就原諒你了。」", imageName: "鬼姪子"))) {
Text("鬼姪子")
}

}
.navigationBarTitle("鬼故事")
}
}
}

struct StoryView: View {
var story: Story
var body: some View {
VStack {
Image(story.imageName)
.resizable()
.scaledToFit()
Text(story.content)
.padding()
}
.navigationBarTitle(story.title)
}
}

struct Story: Identifiable {
var id = UUID()
var title: String
var content: String
var imageName: String
}

同時使用 VS Code GitHub Copilot 和 Xcode Preview 開發 App

--

--

彼得潘的 iOS App Neverland
彼得潘的 Swift iOS App 開發問題解答集

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com