Stabilize iOS reconnect and screen audio sessions
Build and test / test (macos-latest) (push) Canceled after 0s
Build and test / test (ubuntu-24.04) (push) Canceled after 0s
Build and test / test (windows-latest) (push) Canceled after 0s
Build and test / apple-client (push) Canceled after 0s

This commit is contained in:
2026-09-26 20:30:24 +02:00
parent 5a2dddba89
commit 4cc13a27a0
11 changed files with 327 additions and 36 deletions
+36
View File
@@ -133,6 +133,42 @@ CoreDevice can also install the app successfully and then reject only the launch
deployment; rebuilding is unnecessary. Occasional CoreDeviceService initialization timeouts while
listing devices or processes do not imply that an already-confirmed install or launch failed.
## Simulator connection and audio gate
The Debug app has an opt-in simulator smoke gate. Start a local VoiceCat server and create an
account named `smoke`, then build the `iossimulator-arm64` app. The simulator build needs an
App Group entitlement for the saved-password and screen-ring checks; sign the built app
ad hoc with `clients/apple/VoiceCat.iOS/Entitlements.plist` before installing it. A clean
build avoids stale simulator AOT modules after managed code changes.
```bash
dotnet restore clients/apple/VoiceCat.iOS/VoiceCat.iOS.csproj \
-p:RuntimeIdentifier=iossimulator-arm64 -p:VoiceCatIosStatic=true --force-evaluate
dotnet clean clients/apple/VoiceCat.iOS/VoiceCat.iOS.csproj -c Debug \
-p:RuntimeIdentifier=iossimulator-arm64
dotnet build clients/apple/VoiceCat.iOS/VoiceCat.iOS.csproj -c Debug --no-restore \
-p:RuntimeIdentifier=iossimulator-arm64
codesign --force --sign - --entitlements clients/apple/VoiceCat.iOS/Entitlements.plist \
clients/apple/VoiceCat.iOS/bin/Debug/net10.0-ios27.0/iossimulator-arm64/VoiceCat.iOS.app
xcrun simctl install booted \
clients/apple/VoiceCat.iOS/bin/Debug/net10.0-ios27.0/iossimulator-arm64/VoiceCat.iOS.app
```
Grant microphone access with `xcrun simctl privacy booted grant microphone
me.iamtalon.voicecat`. Launch with `SIMCTL_CHILD_VOICECAT_SIM_SMOKE` set to
`127.0.0.1:<port>:<smoke-account-password>` and
`SIMCTL_CHILD_VOICECAT_SIM_SMOKE_MODE=share` using `xcrun simctl launch --console-pty booted
me.iamtalon.voicecat`. The `share` mode checks that a stale ring stays unmapped, then exercises
synthetic screen audio with the microphone off and during a voice call, voice join, disconnect,
and reconnect. Look for
`VC_SIM phase=screenSharePassed` and `VC_SIM phase=passed`. Terminate the app, then launch
again with mode `resume` to verify the saved account after a process restart. The simulator
does not validate Bluetooth hardware, the iOS 27 ScreenCaptureKit picker, or suspension on
a physical device.
The simulator restore can rewrite `packages.ios.lock.json`; retain both checked-in iOS
runtime entries when reviewing the diff.
## Verified hardware result
On 2026-09-22, the Debug build completed with .NET 10.0.401 and Xcode 27.0. The host and