feat(ios,p0): iOS P0 platform, audio fixes, channel UX
This commit is contained in:
@@ -14,7 +14,7 @@ build from rc.8.
|
||||
|
||||
Source: this checklist mirrors the macOS, Linux, and Windows
|
||||
acceptance documents. Auto-test sign-off lives in this document's
|
||||
"Auto-test sign-off" section. SDD references: SDD-094..097 (v1
|
||||
"Auto-test sign-off" section. SDD references: SDD-094..097, SDD-098..104 (v1
|
||||
audio + PTT lifecycle), DEC-025 (target environment), DEC-027
|
||||
(diagnostic privacy invariant), SRS-197 (iOS audio routing
|
||||
contract), SRS-198 (honest capability advertising under runtime
|
||||
@@ -48,7 +48,7 @@ session-level event tap analogue.
|
||||
|---|---|---|
|
||||
| 1.1 | Enter a reachable TS3 server address, a nickname, blank password | Connect button enabled |
|
||||
| 1.2 | Tap Connect | Server snapshot appears |
|
||||
| 1.3 | Quit (background) + relaunch with the same nickname | Server-visible UID is the same (identity persisted in `Documents/identity.tskey`) |
|
||||
| 1.3 | Quit (background) + relaunch with the same nickname | Server-visible UID is the same (identity persisted in the app-private support directory as `identity.tskey`) |
|
||||
|
||||
|
||||
## TC-2: Voice channel join (SRS-204, SDD-094)
|
||||
@@ -59,7 +59,7 @@ session-level event tap analogue.
|
||||
| 2.2 | Tap a different voice channel | Smooth move; no audio dropout. |
|
||||
|
||||
|
||||
## TC-3: PTT press / release (Focused only — iOS limitation)
|
||||
## TC-3: PTT press / release (Focused only — iOS limitation, SDD-103)
|
||||
|
||||
| # | Step | Expected |
|
||||
|---|---|---|
|
||||
@@ -68,7 +68,7 @@ session-level event tap analogue.
|
||||
| 3.3 | Touch and hold the PTT button | Mic indicator turns "Mic on" while held; releases on touch-up. |
|
||||
|
||||
|
||||
## TC-4: Release tail (SDD-097)
|
||||
## TC-4: Release tail (SDD-096)
|
||||
|
||||
| # | Step | Expected |
|
||||
|---|---|---|
|
||||
@@ -97,7 +97,7 @@ session-level event tap analogue.
|
||||
| 7.1 | Speaker mute | Other clients silenced locally. |
|
||||
|
||||
|
||||
## TC-8: Background audio (UIBackgroundModes = audio)
|
||||
## TC-8: Background audio (UIBackgroundModes = audio, SDD-102)
|
||||
|
||||
| # | Step | Expected |
|
||||
|---|---|---|
|
||||
@@ -106,13 +106,13 @@ session-level event tap analogue.
|
||||
| 8.3 | Lock the iPhone for 30 s, then unlock | Session still intact (provided you stayed in the channel and on cellular/wifi network). |
|
||||
|
||||
|
||||
## TC-9: AVAudioSession routing (SRS-197)
|
||||
## TC-9: AVAudioSession routing (SDD-098, SDD-100, SDD-101)
|
||||
|
||||
| # | Step | Expected |
|
||||
|---|---|---|
|
||||
| 9.1 | With voice connected, place an iPhone phone call to yourself (or have someone call). | Chanora's audio session yields to the phone call (iOS owns the audio focus). |
|
||||
| 9.2 | End the phone call | Chanora resumes audio without manual reconnect. |
|
||||
| 9.3 | Connect AirPods / Bluetooth headset; talk on Chanora | Audio routes to the headset (`.allowBluetooth` + `.allowBluetoothA2DP` are set in `AppDelegate.swift`). |
|
||||
| 9.3 | Connect AirPods / Bluetooth headset; talk on Chanora | Audio routes to the headset (`.allowBluetoothHFP` + `.allowBluetoothA2DP` are set in `AppDelegate.swift`). |
|
||||
|
||||
|
||||
## TC-10: Reconnect
|
||||
@@ -129,7 +129,7 @@ session-level event tap analogue.
|
||||
| 11.1 | Export a diagnostic bundle | Allow-listed fields only; no raw key labels, no audio bytes. |
|
||||
|
||||
|
||||
## TC-12: Capability badge labels
|
||||
## TC-12: Capability badge labels (SDD-103)
|
||||
|
||||
| # | Step | Expected |
|
||||
|---|---|---|
|
||||
@@ -146,7 +146,7 @@ These rows do not require human interaction.
|
||||
| `cargo test --workspace --lib` on macOS host | unchanged (iOS-specific Rust code is `#[cfg(target_os = "ios")]`-gated and not exercised in host tests) |
|
||||
| `cargo build --release --target aarch64-apple-ios -p chanora_bridge` | clean — produces `libchanora_bridge.a` |
|
||||
| `flutter build ios --release` | clean — produces `Runner.app` |
|
||||
| `~/chanora/apps/chanora_flutter/ios/Runner/AppDelegate.swift::application(_:didFinishLaunchingWithOptions:)` configures AVAudioSession before Flutter starts | Log line `chanora_flutter: AVAudioSession configured (playAndRecord/voiceChat)` in device console (Xcode → Window → Devices and Simulators). |
|
||||
| `AppDelegate.swift` registers `AVAudioSession.routeChangeNotification` and `AVAudioSession.interruptionNotification` observers (SDD-100, SDD-101) | Log lines `chanora_flutter: route change reason=…` and `chanora_flutter: audio interruption began/ended` in device console. |
|
||||
|
||||
|
||||
## Sign-off form
|
||||
|
||||
Reference in New Issue
Block a user