ZON
Decision Memo

语音实时转写:本地优先 + 手表一键开录可行性评估

iOS + watchOS · 中文识别 · 音频保留 10 天 · 文本永久保留
2026-01-30
关键冲突点(crux):你要“锁屏放口袋也能手表一键开录”,同时不想付 Apple Developer Program 年费、也不想依赖 Xcode。 在这个约束组合下,watchOS 自定义 App 基本无法安装;手表触发 iPhone 的方案只能做 best-effort(不保证 100% 成功)。
Local-first iOS + watchOS No paid dev No cloud (MVP) Retention: audio 10d Transcript: forever Risk: lockscreen trigger
Audience: Self · Scope: feasibility + options + links

TL;DR

结论:在“不付费 + 不碰 Xcode”的前提下,几乎无法让 Apple Watch 安装你的自定义 watchOS App;因此要满足“锁屏口袋一键开录”,最现实的路线是:

  • 路线 A(可靠录音):改成“手表本地录音(系统或现成 App)→ 回到 iPhone 转写并归档”。牺牲:实时转写/统一体验。
  • 路线 B(保留实时转写):只做 iPhone 端实时转写,手表触发只做 best-effort(Focus/Shortcuts/Siri),不承诺锁屏口袋 100% 唤起录音。
  • 路线 C(换平台):Wear OS + Android 通常更容易做“手表按钮 → 手机锁屏后台录音”(前台服务/Tile/Data Layer)。代价:换硬件/生态。

下面给出限制解释、方案对比、开源/文档链接清单(详见 Details 页)。

你的诉求(当前已确认)

Trigger
Watch → Phone
锁屏放口袋也要“一键开录”
Transcription
实时
中文为主;允许网络识别兜底
Storage
本地
MVP 不做云端;未来可接 GitHub/R2/Vercel
Retention
音频 10 天
文本永久保留

你真正要的是“可抓住的瞬间”

  • 无需掏手机、无需解锁
  • 1 秒内开始录音(越确定越好)
  • 录音后能快速检索/回看文字

你不想要的成本

  • 不买 Apple Developer Program(通常 $99/年,具体以 Apple 当前为准)
  • 不想为了“装到设备上”而安装/依赖 Xcode
  • MVP 先不做云端

关键限制(为什么“看起来简单”但很卡)

1) watchOS 安装与分发

  • 要把“你自己的 watch App”装到手表,本质需要 Apple 的签名/安装通道。
  • 不付费且不使用 Xcode:基本没有可行安装路径(即使只给自己用)。
  • iPhone 侧载比 watch 容易;watch 侧载链路通常不可用/不稳定。

2) 锁屏 + 后台启动录音

  • “开始录音”属于高敏感权限行为,系统会限制从自动化/后台无感启动。
  • 要在锁屏持续录音,通常需要 iOS App 以 Audio Background Mode 运行,并正确配置音频会话。
  • 从手表触发 iPhone 端“唤起 + 立即开始录音”的可靠性很难做到 100%。

3) 实时转写的实现边界

  • Apple Speech 可实时输出 partial 结果;on-device 能力因机型/语言而异。
  • 你已接受网络兜底:可先尝试 on-device,失败后切换网络识别。
  • 若未来要更强离线:可引入 Whisper/whisper.cpp(耗电/包体/性能成本上升)。

4) 留存策略(你要“删音频不删文本”)

  • 音频 10 天清理:能做成“每次启动/每次停止录音后清理”,保证最终会删。
  • “定点每天清理”在 iOS 只能尽力(BGTask 不保证准时执行)。
触发源(手表/快捷键) iPhone App 音频采集(AVAudio) 实时识别(Speech) 本地存储 start / toggle 麦克风流 audio buffers partial/final text 音频写盘(10 天后删除)
结构图:你要的 MVP 里,录音与实时识别是一条连续管线;难点在“触发”与“锁屏后台启动”的系统限制。

方案对比(按你的约束排序)

Option 能否“锁屏口袋一键开录” 实时转写 是否需要 $99 / Xcode 主要代价 / 风险
1) iPhone-only + 快捷键 中(取决于唤起/后台权限) 不需要 $99;安装方式仍要解决(侧载/开发安装) 没有 watch 触发;你要的“掏手机”问题仍在
2) Watch 无 App:Focus/Shortcuts 触发 iPhone 低~中(best-effort) 不需要 $99;不需要安装 watch App 无法承诺 100%:锁屏/自动化/唤起行为受系统限制
3) Watch 直接录音(系统/现成 App)→ iPhone 转写归档 否(转写在录后) 不需要 $99;不需要你的 watch App 牺牲实时转写与统一体验;转写延后
4) 自定义 watch App(Xcode 直装,免费账号) 高(可做“表端录音”或更稳触发) 可做(看方案) 需要 Xcode;不一定要 $99 你当前明确不想碰 Xcode;且可能要定期重装/签名
5) Wear OS + Android(换生态) 可做 不需要 $99;分发更自由 换设备/换系统;开发与维护双平台成本
Heuristic heatmap (higher is better) 分数仅用于快速比较(0–3),不是承诺。 Option Pocket record Real-time text No $99 / no xcode Overall fit 1) iPhone-only + 快捷键 2/3 3/3 2/3 2/3 2) Watch 无 App 触发 iPhone 1/3 3/3 3/3 2/3 3) Watch 录音 → iPhone 转写 3/3 1/3 3/3 2/3 4) 自定义 watch App(Xcode) 3/3 3/3 1/3 3/3 5) Wear OS + Android 3/3 2/3 3/3 2/3
数据图:热力图对比了你的关键指标。核心矛盾是“Pocket record”与“No $99 / no Xcode”在 Apple Watch 上难以同时拉满。

相关开源与可复用资产(MVP 视角)

本项目(你当前仓库里已有)

  • apps/voiceTranscribeMVP/VoiceTranscribeCore:文件存储 + 10 天音频清理 + 单测
  • apps/voiceTranscribeMVP/samples/ios:AVAudioEngine + Speech 实时转写(on-device 优先,失败切网络兜底)
  • apps/voiceTranscribeMVP/samples/watch:最小遥控(但需要自定义 watch App 才能装进表)

通用 ASR(未来增强)

  • Whisper(OpenAI)/ whisper.cpp:离线更强,但会带来性能/电量/包体成本
  • Vosk / sherpa-onnx:其它离线 ASR 方案(看中文效果与 iOS 集成成本)

详细链接与更多备选见 Details 页。

建议路线(按“你当前不付费/不装 Xcode”优先)

优先 1:先做 iPhone 实时转写(能用就先用)

  • 用快捷方式/Action Button 打开 voicetranscribe://toggle(体验最快成型)
  • App 开启 Audio Background Mode,保证锁屏仍在录
  • 再尝试“手表触发 iPhone”(Focus/Shortcuts/Siri)作为加成,而不是核心依赖

优先 2:如果你坚持“口袋 100% 一键开录”

  • 接受“手表端录音”,用系统/现成 watch App 来保证随时可录
  • iPhone 端负责:转写 + 永久存档 + 10 天音频清理
  • 实时转写改成“录完即转写”(或在后台尽快转写)
为什么这是“最强约束下最现实”的路径?
  • 你要的是“随时抓住语音”,这比“实时出字”更基础。
  • 在 Apple 生态里,可靠录音必须尊重权限与分发规则;绕不开时,就把“可靠录音”下沉到系统/现成 App(可用性最高)。
  • 一旦你愿意引入 Xcode(哪怕借一台 Mac),自定义 watch App 的空间会大很多。

Next Steps

One next action:先做一次“锁屏口袋录音”的现实验证:仅用 iPhone 端(不引入手表),把 App 做到锁屏持续录音 + 实时转写稳定,再决定是否需要手表端“绝对可靠”。

  • 你现在的代码骨架已具备:本地存储、音频 10 天清理、实时转写(on-device 优先,失败切网络兜底)。
  • 接下来最关键的是:在真机上验证后台录音 + 识别稳定性(权限、音频会话、锁屏状态)。

Details (Optional)

更完整的链接清单、开源方案、以及“手表触发 iPhone”的可行路径与失败模式,见:

Sources (selected)

  • Apple Speech Framework Docs
  • Apple WatchConnectivity Docs
  • OpenAI Whisper / whisper.cpp
  • Android SpeechRecognizer / Foreground services / Wear OS Data Layer

本页不联网核验;具体可点击链接在 Details 页。

先确保“随时可录”,再追求“实时出字”。
Closing Summary · One reliable step