Reviewer
先看 PR 目的,再在 Files changed 逐段閱讀差異。
檢查設定預設值、保存方式、狀態管理、空白與失敗情境,以及驗證是否涵蓋改動。
意見寫出「位置、問題、觸發情境、建議驗證」。提交 Comment、Approve 或 Request changes,讓作者知道審查結論。
第 07 課 / 讓修改可以被審查
把第六週的功能分支送到 GitHub,建立 PR,請同學審查,回應意見並修正,再合併到主分支。用 SwiftFormat 與 GitHub Actions,讓同一套檢查隨每次更新執行。
功能分支 → Commit 與 Push → 建立 PR → Review 與 CI → 修正並再次 Push → Merge → 更新本機主分支
01 / 分支與遠端
沿用第六週已有的功能分支;若開始另一項改動,從乾淨且已更新的主分支建立新分支。將範例的檔案路徑、分支及 origin 換成專案實際值。
git status
git branch
git remote -v
# 若是新任務,先從主分支開始
git switch main
git pull --ff-only
git switch -c feature/feedback-settings
# 完成修改並驗證後
git diff
git add path/to/changed-file
git diff --staged
git commit -m "Improve settings from user feedback"
git push -u origin feature/feedback-settings若分支已存在,使用 git switch feature/feedback-settings,從差異檢查接續操作。--ff-only 無法更新時,先查看本機與遠端差異,再決定處理方式。
02 / 建立 PR
在 GitHub repository 開啟 Pull requests → New pull request,或使用 Compare & pull request。base 是要接收修改的主分支,compare 是你的功能分支。
確認檔案與 commit 範圍符合任務;移除不相關的改動。尚未準備好時建立 Draft PR,完成後再標示可審查。
標題描述成果,內文說明原因、行為變化與證據。邀請同學 Review;私人 repository 需先由擁有者提供必要存取權。
問題:用戶無法理解「只顯示未完成」設定。
修改:調整文案,加入設定狀態與空白清單說明。
驗證:建置通過;在 iPhone 切換設定並重新開啟 App。
證據:操作畫面/測試結果。
限制:尚未驗證其他裝置尺寸。
請協助審查:設定值的保存與清單更新是否一致。若已安裝並登入 GitHub CLI,也可用 gh pr create --base main --head feature/feedback-settings。Git 的 Push 是同步 commit;建立 PR 是 GitHub 上提出合併與審查的步驟。
03 / Review 與回應
先看 PR 目的,再在 Files changed 逐段閱讀差異。
檢查設定預設值、保存方式、狀態管理、空白與失敗情境,以及驗證是否涵蓋改動。
意見寫出「位置、問題、觸發情境、建議驗證」。提交 Comment、Approve 或 Request changes,讓作者知道審查結論。
逐項回應意見,說明接受、修改或採取其他做法的理由。
請 Agent 處理選定意見,自己審查 diff、建置與操作,再追加 commit 並 Push 同一分支。
PR 會更新;請 Reviewer 看最新修改,確認討論已處理。
04 / 合併與同步
檢查 Review、未處理意見與 CI 結果,確認是目前最新 commit。若有衝突,理解雙方改動後修正,再重新驗證與審查。
依專案約定選擇 Merge commit、Squash 或 Rebase merge。課堂可用 Squash 將此 PR 的修改整理成一個 commit;先確認 base 分支與結果。
切回主分支並 Pull,重新建置與操作,確認本機取得 GitHub 的合併結果。完成後才依需要刪除功能分支。
git status
git switch main
git pull --ff-only
git log --oneline -5本課在 GitHub PR 完成合併,以保留 Review 與 Checks 紀錄。Sublime Merge 可用來切回 main、Pull 與查看 commit graph。
05 / SwiftFormat
本課使用 nicklockwood/SwiftFormat。先在小範圍試跑,查看差異,再把專案規則存進 repository 的 .swiftformat。
# 已安裝 Homebrew 時
brew install swiftformat
swiftformat --version
# 檢查格式,不改檔案
swiftformat --lint .
# 套用格式後查看差異
swiftformat .
git diff最小 .swiftformat 範例(依專案調整排除路徑):
--indent 4
--exclude .build,Pods,CarthageSwiftFormat 可調整語法形式,修改後仍需建置與測試;大批格式化可獨立成一個 commit,方便功能 Review。
記錄使用的 SwiftFormat 版本,讓同學與 CI 使用相同版本和規則。將 .swiftformat 一起提交;語言版本選項應符合專案設定。
一般執行會修改檔案;--lint 只檢查,發現格式問題會回傳失敗狀態。CI 先用 lint,把修正留在本機提交。
06 / GitHub Actions
在學生 App repository 新增 .github/workflows/swift-checks.yml。以下是格式檢查起步範例,使用 macOS runner 的 SwiftFormat;主分支名稱與工具版本要配合專案。
name: Swift checks
on:
pull_request:
branches: [main]
push:
branches: [main]
permissions:
contents: read
jobs:
format:
runs-on: macos-latest
steps:
- uses: actions/checkout@v7
- name: Check SwiftFormat version
run: swiftformat --version
- name: Check formatting
run: swiftformat --lint . --reporter github-actions-log
Commit、Push workflow 與 .swiftformat,在 PR 的 Checks 或 repository 的 Actions 看執行結果。確認 log 中有實際執行 swiftformat。
在練習分支製造一個格式差異,確認檢查失敗;本機格式化、審查、Commit、Push,再確認新一輪成功。
請 Agent 先列出 workspace/project、共享 scheme、runner 可用的 Xcode 與 Simulator。把本機已成功的 build/test 指令調整成 CI steps,再執行驗證。
# 在 runner 上先確認可用環境與目的地
xcodebuild -version
xcrun simctl list devices available
xcodebuild -list -workspace YourApp.xcworkspace
xcodebuild -showdestinations -workspace YourApp.xcworkspace -scheme YourScheme
# 將路徑、scheme 與 UDID 換成實際值,才加入 workflow
xcodebuild -workspace YourApp.xcworkspace -scheme YourScheme -destination "platform=iOS Simulator,id=YOUR_SIMULATOR_UDID" build
xcodebuild -workspace YourApp.xcworkspace -scheme YourScheme -destination "platform=iOS Simulator,id=YOUR_SIMULATOR_UDID" test純 project 使用 -project YourApp.xcodeproj。記錄並固定合適的 Xcode、runner 與 SwiftFormat 版本;保留 Xcode 預設 DerivedData。格式 job 綠燈只代表格式通過,建置與測試需各自確認;iPhone 實際操作證據仍要提供。
07 / 本週交付
08 / 官方參考