Repository navigation
feat(ios): OpenLess iOS 语音输入法(初版工程 + 火山流式 ASR + Flow 语音面板) - #624
Merged
Merged
Conversation
新增 1-app/openless-ios/:独立 XcodeGen 工程(3 target:主App/键盘扩展/共享框架),与桌面端 openless-all/ 平级、互不混入。 - 数据模型对齐桌面 types.rs/persistence.rs(StylePack/Preferences/Credentials),camelCase JSON - 设置页:润色模式 + ASR/LLM provider 与 Key 录入(沙盒 JSON 持久化) - 云端 ASR:移植桌面火山 SAUC bigmodel 流式 ASR(WebSocket + 二进制分帧 + 16k 重采样),按配置选引擎(火山有 Key 走火山,否则退回 Apple Speech) - 键盘:Flow 式语音面板(非打字键盘),跳主App录音 + App Group 回插 - PiP 免跳转保活骨架(AVSampleBufferDisplayLayer 自定义画中画)+ VoiceBridge 进程间桥 已知约束:iOS 键盘扩展不能录音(语音走主App);PiP 仅真机;免费开发者账号不支持 App Group。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
User description
概述
新增
1-app/openless-ios/:OpenLess 的 iOS 端语音输入法(独立 XcodeGen 工程,与桌面端openless-all/平级、互不混入)。以语音输入为核心,复刻桌面云端 ASR,键盘做成 Flow 式语音面板。工程结构(3 target)
OpenLess(主 App / SwiftUI):录音 → ASR → 润色 → 配置/凭据OpenLessKeyboard(键盘扩展):Flow 式语音面板(非打字键盘)OpenLessShared(共享框架):数据模型 / 存储 / ASR 协议group.top.openless.ios;XcodeGenproject.yml为唯一真源(.xcodeproj不入库)已实现
types.rs/persistence.rs(StylePack / Preferences / Credentials),JSON camelCaseURLSessionWebSocket+ 二进制分帧VolcFrame+ 48k→16k Int16 重采样);按配置选引擎(火山有 Key 走火山,否则退回 Apple Speech),界面显示当前引擎PiPVoiceController(AVSampleBufferDisplayLayer 自定义画中画保活)+VoiceBridge(Darwin 通知 + App Group 进程间桥)关键平台约束(务必知悉)
isPictureInPictureSupported()==false)→ 免跳转语音只能真机验证状态 / TODO
测试
cd 1-app/openless-ios && ./scripts/run-sim.sh(adhoc 签名让 App Group 生效)🤖 Generated with Claude Code
PR Type
Enhancement
Description
New iOS voice input method project
Volcengine streaming ASR integration
Flow-style keyboard extension
Background PiP and inter-process bridge
Settings UI for providers and credentials
Diagram Walkthrough
flowchart LR K["Keyboard Extension"] -- "openless://dictate" --> A["Main App"] A -- "AVAudioEngine" --> V["Volcengine ASR"] V -- "PCM Audio" --> WS["WebSocket"] WS -- "Text" --> AG["App Group"] A -- "PiP Stay Alive" --> P["Picture in Picture"] K -- "Fetch Text" --> AG K -- "Insert" --> TI["Text Field"]File Walkthrough
6 files
Simulator build script with adhoc signingMain app plist with permissions and URL schemeApp Group entitlement for main appKeyboard extension plist with full accessKeyboard App Group entitlementXcodeGen project definition with 3 targets12 files
Volcengine streaming ASR clientFlow voice dictation UIApp entry point with shared store initBackground PiP controller for audioRoot view with dictation sheetSettings model with auto-saveSettings UI for preferences and credentialsSpeech dictator managing ASR enginesKeyboard extension with mic button and text insertBinary frame encoding for Volcengine ASRShared JSON store in App GroupInter-process bridge via Darwin notifications1 files
Project documentation and build instructions11 files