鲸海语记(JingNote)App 模拟海外场景 ASR 测试指南

type
status
date
slug
summary
tags
category
icon
password
wechat_gate

背景

SpeechNote 根据设备地区(Locale.current.regionCode)自动选择 ASR 引擎:
地区
默认引擎
备用引擎
中国大陆(CN)
腾讯云 QCloud / SenseVoice
SenseVoice(限额超出时)
海外(非 CN)
Groq Whisper
Apple Speech(本地兜底)
在中国大陆开发环境中,默认走国内路径。以下方法可强制触发海外(Groq)路径,用于功能验证和回归测试。

方法一:修改设备地区(推荐,适用真机/模拟器)

步骤:
  1. 打开 设置 → 通用 → 语言与地区 → 地区
  1. 将「中国大陆」改为「美国」(或任意非 CN 地区)
  1. 运行 app,此时 Locale.current.regionCode 返回 "US",自动走 Groq 路径
  1. 测试完成后改回「中国大陆」
适用场景: 完整 E2E 测试,包括真机录音上传全链路。
注意: 修改地区会影响系统语言排序,建议测试后及时还原。

方法二:Xcode Scheme 启动参数(推荐,不影响设备日常使用)

步骤:
  1. Xcode → Product → Scheme → Edit Scheme...
  1. 选择左侧 Run → Debug
  1. 点击顶部 Arguments 标签
  1. Arguments Passed On Launch 区域点击 +
  1. 输入 AppleLocale en_US(注意有 前缀)
  1. 确保勾选该条目后关闭
适用场景: 真机和模拟器均有效,只在从 Xcode 启动时生效,不影响设备日常使用。
常见错误: 不要将 AppleLocale 放在 Environment Variables 区域,该方式仅对模拟器生效,真机无效。

方法三:代码级 Debug 开关(适用于自动化测试)

ViewController.swiftresolveRecognitionStartPlan() 方法中临时添加:
在测试代码或启动参数中设置:
适用场景: UI 自动化测试、CI 流水线中需要覆盖海外路径的测试用例。
注意: 此修改不应提交到主分支,仅用于本地测试分支。

验证方法

启动 app 后检查 Xcode 控制台,确认以下日志出现:
以及录音结束后:
如果看到 Non-CN:preferred=groq,说明已成功进入海外路径。

各方法对比

方法
真机有效
模拟器有效
需改代码
影响设备系统
修改设备地区
是(临时)
Xcode 启动参数
代码 Debug 开关

已知行为

  • Groq (Whisper) 自动语种检测:对中英混合语音,Whisper 会自动切换识别语言,属正常行为,无需处理。
  • 切片兜底机制:Groq 单片失败超过重试上限后,自动降级为 Apple Speech 本地识别。
  • VAD 分片:静音超过 0.6s 触发切片,单片上限 30s,超出后强制切片。

一个问题:测试后,如果不删除 -AppleLocale en_US,上线到正式环境,会有影响吗

不会影响正式环境
  • AppleLocale en_US 是在 Xcode Scheme 的 LaunchAction 下的 CommandLineArguments 中配置的,这类参数只在 Xcode 调试运行时生效,有以下特点:
  • 仅影响开发调试:这是 Xcode 模拟器/设备调试启动时传入的命令行参数,用于强制 App 以海外环境运行(方便测试英文 UI)。
  • 不影响 App Store 构建:通过 Archive → 导出 IPA → 上线 App Store 的流程,这些参数完全不会包含在最终的 App 包中。
  • 用户设备上不存在:正式用户安装 App 后,会根据设备的系统语言设置来显示对应语言,不受此参数影响。
简而言之,这个参数是纯开发工具配置,上线后对用户零影响。
2026.04.20 15:49 沪·汇金路KFC