Add managed UIKit iOS client
.NET port / test (macos-latest) (push) Canceled after 0s
.NET port / test (ubuntu-24.04) (push) Canceled after 0s
.NET port / test (windows-latest) (push) Canceled after 0s
.NET port / apple-client (push) Canceled after 0s
.NET port / cpp-conformance (push) Canceled after 0s

This commit is contained in:
2026-09-19 15:43:37 +02:00
parent d0a72176ba
commit c6715028c1
41 changed files with 1110 additions and 40 deletions
+6 -1
View File
@@ -497,7 +497,7 @@ The Swift AppKit code maps almost line-for-line:
NativeAOT for macOS app bundles is supported but adds a step. Nothing blocking; just not
free.
### 8.3 iOS — the SwiftUI gap
### 8.3 iOS — the SwiftUI gap (decision implemented 2026-09-19)
This is the only client with no mechanical path, because **SwiftUI has no C# equivalent.**
Three options:
@@ -512,6 +512,11 @@ Three options:
with the accessibility commitments already made twice in the docs. Budget it as the largest
single client task.
The decision is now implemented in `clients/apple/dotnet/VoiceCat.iOS`: a `net10.0-ios`
UIKit host uses the managed core, statically links the Opus/RNNoise shim through
`__Internal`, and embeds the retained Swift ReplayKit extension. The Swift app remains the
migration oracle until the UIKit client completes its device, live-call and VoiceOver gates.
What ports cleanly regardless:
- `IOSAudioRouter.swift` (31 KB) — `AVAudioSession` is fully bound. `SetPreferredDataSource`,
`SetPreferredPolarPattern`, `AllowBluetoothA2DP`, `MeasurementMode` all exist in C#. The