Baby Monitor Timmy 源于一个简单的想法:打造一款尊重家庭隐私的婴儿监护器。 不在云端保存录音,也不会让数据通过不必要的路径传出宝宝房间。很多人不知道的是:我在苏黎世独自开发 Timmy,而 GitHub Copilot 是我反应非常快的编程搭档。
人机协作流程
分工很明确:我定义功能、设定优先级,并作出架构决策。 Copilot 协助完成实现工作:编写代码、补充测试、缩小排查 bug 的范围,以及准备发布步骤。
我一次典型的迭代大致是这样:
- 功能说明: 我会说明这个功能应该做什么,包括边界情况和限制条件。
- 实现: Copilot 提出代码建议,并遵循项目已有的规范。
- 测试: 自动化端到端测试会在两台模拟器上运行,检查真实的宝宝端与家长端连接。
- 分发: 测试通过后,会为相应的应用商店和测试渠道准备 Android 和 iOS 构建版本。
这个循环会不断用于新功能和 bug 修复。我不会亲自写下每一行代码,但我决定 做什么 , 为什么 要做,以及某个建议是否适合 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 加密。 我不会将配对密钥发送到后端;只会将它的 SHA-256 哈希用作 Firestore 文档标识符。
安全审计:发现并修复漏洞
对我来说,AI 辅助开发不只是打字更快,也能帮助系统地排查 bug。 在一次专门的安全审计迭代中,Copilot 分析了代码库,并发现了 六个问题 需要我修复:
- 信令数据缺少输入验证
- ICE 候选项处理可能存在竞态条件
- 未能妥善清理过期会话数据
- Firestore 安全规则过于宽松
- 缺少对证书固定的考量
- TURN 凭据流程的错误处理不足
这六项都在同一次迭代中修复了。这正是 Copilot 擅长的地方:阅读大量文件、比对模式,并标记出我需要仔细检查的位置。
迭代开发:应用如何演进
Timmy 通过快速但边界清晰的迭代不断成长。部分里程碑包括:
- v1.8: 全面重新设计配对流程——通过 Firebase 使用 4 字符代码和 ECDH P-256,替代了旧的直接密钥方案。
- v1.10: 安全加固迭代——完成六项漏洞的审计与修复。
- v1.11: 所有页面都加入深色模式,以及你正在阅读的首页和博客。
- v1.12: 大幅改版家长端界面,加入夜视模式,并通过分析摄像头画面实现动作检测。
每次迭代都遵循同样的基本模式:描述目标、审查建议、自动化测试,然后推送给测试人员。
跨设备 E2E 测试
无法只用一台设备就充分测试婴儿监护器。我需要一台宝宝端设备和一台家长端设备。 项目最初是在两台 Android 模拟器上同时运行,现在又补充了本地 iOS 模拟器和真机检查。 自动化 Android 测试脚本仍会:
- 在两台模拟器上安装应用
- 在两台设备上完成配对流程
- 验证音频和视频连接是否建立
- 测试按键通话、摄像头控制和其他功能
由于两台模拟器共享同一个 IP 地址(10.0.2.15),无法通过 STUN 建立直接的点对点连接。 每次测试都必须经过 Cloudflare TURN 中继。这确实麻烦,但也很有用:每次都会测试最复杂的连接路径。
我的收获
借助 AI 编程搭档开发一款完整应用,让我学到了几件事:
- 架构比以往任何时候都重要。 清晰的规范和文档完善的 代码库能帮助 AI 提出一致的代码建议。模糊不清很快就会付出高昂代价。
- 测试没有商量余地。 AI 生成的代码和人工编写的代码一样, 都需要经过严格测试。自动化 E2E 测试发现了一些手动测试很容易遗漏的问题。
- 人始终参与其中。 每一个架构决策、每一项安全 取舍和每一条产品边界都由我负责。AI 能加快实现速度,但不能取代判断。
- 速度为提升质量创造条件。 功能从数天缩短到数小时发布后, 就能有更多迭代空间来打磨体验和修复 bug。快并不自动等于好。
展望未来
Baby Monitor Timmy 仍在不断进化。iOS 版本即将发布;之后会加入更多传感器功能,并持续强化安全性。 工作流程仍然类似:我设定方向和边界,Copilot 协助快速实现和检查。
与安全相关的基础模块如今都置于 清晰的 边界 之下,并收录在公开的 baby-monitor-timmy-core 代码库。 配对、信令和后端接口相关的架构决策也记录在那里。