部落格

我如何運用 GitHub Copilot 打造 Baby Monitor Timmy

AI 幫助我加快進度,但 Timmy 的產品責任仍由我承擔。

Baby Monitor Timmy 源自一個簡單的想法:打造一款尊重居家隱私的嬰兒監視器。 不將影像錄製到雲端,也不讓資料循不必要的路徑離開嬰兒房。許多人不知道的是:我在蘇黎世獨自開發 Timmy,而 GitHub Copilot 就是我效率極高的程式設計搭檔。

人與 AI 的工作流程

分工很明確:我定義功能、安排優先順序,並做出架構決策。 Copilot 協助實作,包括撰寫程式碼、加入測試、縮小錯誤範圍,以及準備發布流程。

我平常一個開發衝刺大致是這樣:

  1. 功能說明: 我會描述功能該怎麼運作,包括邊界情況與限制。
  2. 實作: Copilot 提出程式碼建議,並遵循專案既有的規範。
  3. 測試: 自動化端對端測試會在兩個模擬器上執行,檢查實際的寶寶端/家長端連線。
  4. 發佈: 測試通過後,就會針對適當的應用程式商店與測試發布管道準備 Android 和 iOS 版本。

功能開發與錯誤修正都會重複這個循環。我不會親自寫每一行程式碼,但我決定 什麼 要做, 為什麼 要做,以及某個建議是否符合 Timmy 的需求。

從概念到 WebRTC

核心技術任務從一開始就很清楚:在兩支手機之間即時傳送音訊與視訊。 WebRTC 是顯而易見的選擇,但要將它與 Flutter 整合並不簡單:ICE 候選項、 SDP 協商、TURN 備援和 DataChannel 都必須按照正確順序協同運作。

Copilot 協助我逐步整合這些環節:建立對等連線、 確保關鍵順序正確(先建立 DataChannel,再建立 offer;先設定 onTrack,再執行 setRemoteDescription), 並使用 Firebase Firestore 處理信令。每個部分都必須先在兩個模擬器上成功執行,我才會繼續下一步。

使用 ECDH 的安全配對

其中一項最關鍵的功能是 安全配對系統。 兩台裝置需要在不依賴中央伺服器為其身分背書的情況下建立互信。解決方案是透過 Firebase 進行 ECDH P-256 金鑰交換,並搭配可偵測中間人攻擊的視覺驗證碼(SAS)。

Copilot 協助實作完整的密碼學流程:產生金鑰、交換公開金鑰、 衍生共享祕密、計算 SAS,以及使用 AES-256-GCM 加密後續所有信令資料。 我不會將配對金鑰傳送到後端;Firestore 文件識別碼只使用該金鑰的 SHA-256 雜湊值。

安全稽核:找出並修正漏洞

對我而言,AI 輔助開發不只是讓打字更快,也有助於系統化地找出錯誤。 在一次專門進行安全稽核的開發衝刺中,Copilot 分析了程式碼庫,並找出 六個問題 需要我修正:

六項問題都在同一個衝刺中修正完成。這正是 Copilot 擅長的地方:閱讀大量檔案、比對模式,並標出我需要仔細檢查的位置。

迭代式開發衝刺:App 如何演進

Timmy 透過快速但範圍明確的衝刺逐步成長。幾個里程碑如下:

每次衝刺都遵循相同的基本模式:描述目標、審查建議、執行自動化測試,接著發布給測試人員。

跨裝置端對端測試

嬰兒監視器無法只用一台裝置妥善測試。我需要一台寶寶端裝置和一台家長端裝置。 專案一開始是同時執行兩個 Android 模擬器,現在也會搭配本機 iOS 模擬器和實機檢查。自動化 Android 測試 腳本仍會:

  1. 在兩個模擬器上安裝 App
  2. 在兩台裝置上完成配對流程
  3. 確認音訊與視訊連線已建立
  4. 測試按住說話、相機控制及其他功能

由於兩個模擬器共用相同 IP 位址(10.0.2.15),無法透過 STUN 建立直接的點對點連線。每次測試都必須經過 Cloudflare TURN 中繼。這雖然麻煩,但很有用:最複雜的連線路徑每次都會被測到。

我學到的事

和 AI 程式設計搭檔一起打造完整 App,讓我學到幾件事:

展望未來

Baby Monitor Timmy 持續演進中。iOS 版本即將推出;之後還會加入更多感測器功能,並持續強化安全性。 工作流程依然相似:我設定方向與界線,Copilot 協助快速實作與檢查。

現在,與安全性相關的基礎元件已有 清楚的 界線 ,並存放在公開的 baby-monitor-timmy-core 儲存庫。 配對、信令與後端介面相關的架構決策也都記錄在那裡。


更多文章