Baby Monitor Timmy 源自一個簡單的想法:打造一款尊重居家隱私的嬰兒監視器。 不將影像錄製到雲端,也不讓資料循不必要的路徑離開嬰兒房。許多人不知道的是:我在蘇黎世獨自開發 Timmy,而 GitHub Copilot 就是我效率極高的程式設計搭檔。
人與 AI 的工作流程
分工很明確:我定義功能、安排優先順序,並做出架構決策。 Copilot 協助實作,包括撰寫程式碼、加入測試、縮小錯誤範圍,以及準備發布流程。
我平常一個開發衝刺大致是這樣:
- 功能說明: 我會描述功能該怎麼運作,包括邊界情況與限制。
- 實作: Copilot 提出程式碼建議,並遵循專案既有的規範。
- 測試: 自動化端對端測試會在兩個模擬器上執行,檢查實際的寶寶端/家長端連線。
- 發佈: 測試通過後,就會針對適當的應用程式商店與測試發布管道準備 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 分析了程式碼庫,並找出 六個問題 需要我修正:
- 信令資料缺少輸入驗證
- 處理 ICE candidates 時可能出現競態條件
- 未妥善清除過期的工作階段資料
- Firestore 安全性規則過於寬鬆
- 未考量憑證釘選
- TURN 認證資訊流程的錯誤處理不足
六項問題都在同一個衝刺中修正完成。這正是 Copilot 擅長的地方:閱讀大量檔案、比對模式,並標出我需要仔細檢查的位置。
迭代式開發衝刺:App 如何演進
Timmy 透過快速但範圍明確的衝刺逐步成長。幾個里程碑如下:
- v1.8: 完整重新設計配對機制——以透過 Firebase 交換的 4 字元配對碼和 ECDH P-256,取代舊有的直接金鑰方式。
- v1.10: 安全強化衝刺——完成六項漏洞的稽核與修正循環。
- v1.11: 所有畫面均加入深色模式,並新增你目前正在瀏覽的首頁與部落格。
- v1.12: 大幅改版家長端畫面、加入夜視模式,並透過分析相機畫格實現動態偵測。
每次衝刺都遵循相同的基本模式:描述目標、審查建議、執行自動化測試,接著發布給測試人員。
跨裝置端對端測試
嬰兒監視器無法只用一台裝置妥善測試。我需要一台寶寶端裝置和一台家長端裝置。 專案一開始是同時執行兩個 Android 模擬器,現在也會搭配本機 iOS 模擬器和實機檢查。自動化 Android 測試 腳本仍會:
- 在兩個模擬器上安裝 App
- 在兩台裝置上完成配對流程
- 確認音訊與視訊連線已建立
- 測試按住說話、相機控制及其他功能
由於兩個模擬器共用相同 IP 位址(10.0.2.15),無法透過 STUN 建立直接的點對點連線。每次測試都必須經過 Cloudflare TURN 中繼。這雖然麻煩,但很有用:最複雜的連線路徑每次都會被測到。
我學到的事
和 AI 程式設計搭檔一起打造完整 App,讓我學到幾件事:
- 架構比以往更重要。 清楚的規範與文件完善的 程式碼庫,能幫助 AI 提出一致的程式碼建議。模糊不清很快就會帶來高昂代價。
- 測試絕不能省略。 AI 產生的程式碼需要和人工撰寫的程式碼一樣嚴謹 地測試。自動化端對端測試找出了許多手動檢查時很容易遺漏的問題。
- 人始終要參與其中。 每一項架構決策、每一個安全性 取捨,以及每一條產品界線,都由我負責。AI 能加快實作,但無法取代判斷。
- 速度能帶來品質。 由於功能能在幾小時而非幾天內推出, 因此可以進行更多輪的打磨與錯誤修正。但速度快並不代表成果自然就會好。
展望未來
Baby Monitor Timmy 持續演進中。iOS 版本即將推出;之後還會加入更多感測器功能,並持續強化安全性。 工作流程依然相似:我設定方向與界線,Copilot 協助快速實作與檢查。
現在,與安全性相關的基礎元件已有 清楚的 界線 ,並存放在公開的 baby-monitor-timmy-core 儲存庫。 配對、信令與後端介面相關的架構決策也都記錄在那裡。