iPhone 远程测量麦克风客户端。iPhone 用 AVAudioSession(.measurement) 录制设备端播放的扫频信号并上传,
Android 设备端负责播放扫频、离线分析、写入 HAL 校准。是 Android phone-app 的 iOS 迁移。
- 权威约束:CONSTRAINTS.md
- 功能移植对照:PORTING_MATRIX.md
- 协议/录音开发规范:
.claude/skills/
- Xcode 13.3.1 / Swift 5.6 / iOS SDK 15.4(本机构建环境)
- 最低目标:iOS 15,状态管理用
ObservableObject(非@Observable)
本机无 xcodegen,工程用 xcodeproj gem 程序化生成。增删源文件后重新生成:
ruby project.rb
open RoomEqRemote.xcodeproj# 构建(模拟器)
xcodebuild -project RoomEqRemote.xcodeproj -scheme RoomEqRemote \
-sdk iphonesimulator -configuration Debug build CODE_SIGNING_ALLOWED=NO
# 单元测试(先启动一个模拟器,再指定其 UDID)
xcodebuild -project RoomEqRemote.xcodeproj -scheme RoomEqRemote \
-sdk iphonesimulator -destination "id=<SIMULATOR_UDID>" test CODE_SIGNING_ALLOWED=NORoomEqRemote/
├─ App/ # SwiftUI 入口、Info.plist、live() 组合根、场景前后台
├─ Protocol/ # 协议消息模型 + JSON 编解码(对齐 roomeq.remote.v1)
├─ Transport/ # length-frame 编解码 + NWConnection TCP 客户端
├─ Session/ # 配对 URI、工作流规则、UI 状态、局域网诊断、ViewModel 状态机
├─ Audio/ # 音量算法/WAV 头 + AVAudioSession(.measurement) 会话/采集/音量计/录音器
└─ UI/ # 主流程界面:顶栏/5步导航/任务面板/电平条/动作条
RoomEqRemoteTests/ # 编解码、拆包、配对、音量数值、WAV 头、状态机流程(21 项)
全部功能已实现(编译通过 + 单测覆盖 + 模拟器启动渲染):
- 协议模型、JSON 编解码、length-frame 拆包、配对 URI、音量算法、WAV 头
NWConnection传输层、会话状态机(Hello/心跳 500ms/16 态/上传/返回/前后台)AVAudioSession(.measurement)会话、输入采集(→48k/mono/Int16)、音量计、WAV 录音器- SwiftUI 全流程界面,接
RemoteMeasureViewModel.live()
下一步:真机对真实 Android 设备端联调。音频采集/录音需真机验证(模拟器无麦克风), 其数值算法已单测。逐项对照 PORTING_MATRIX.md。