2026-09-21 00:11:01 +02:00
|
|
|
# Apple clients
|
2026-06-15 21:09:09 +02:00
|
|
|
|
2026-09-21 00:11:01 +02:00
|
|
|
`VoiceCat.Mac` and `VoiceCat.iOS` are .NET 10 AppKit and UIKit clients over the shared managed
|
|
|
|
|
core. The ReplayKit upload extension under `native/apple/broadcast` remains Swift because it
|
|
|
|
|
runs under the extension memory limit and writes the versioned shared audio ring.
|
2026-06-15 21:09:09 +02:00
|
|
|
|
2026-09-21 00:11:01 +02:00
|
|
|
Build on macOS with Xcode and the pinned .NET workloads:
|
2026-06-18 03:16:01 +02:00
|
|
|
|
|
|
|
|
```bash
|
2026-09-21 00:11:01 +02:00
|
|
|
./scripts/build-native.ps1
|
|
|
|
|
./scripts/build-native-ios.sh
|
|
|
|
|
dotnet restore clients/apple/VoiceCat.Apple.slnx
|
|
|
|
|
dotnet build clients/apple/VoiceCat.Apple.slnx -c Debug --no-restore
|
2026-06-18 03:16:01 +02:00
|
|
|
```
|
|
|
|
|
|
2026-09-21 02:14:24 +02:00
|
|
|
Use `publish-macos.sh --dry-run` to validate a local ad-hoc macOS bundle. The dry-run build does
|
|
|
|
|
not enable hardened runtime because ad-hoc signatures have no Team ID and cannot satisfy macOS
|
|
|
|
|
library validation. Distribution builds remain hardened and require `VOICECAT_CODESIGN_IDENTITY`;
|
|
|
|
|
optional notarization uses `APPLE_ID`, `APPLE_TEAM_ID`, and `APPLE_APP_PASSWORD`.
|
2026-06-18 14:20:38 +02:00
|
|
|
|
2026-09-21 00:11:01 +02:00
|
|
|
For a physical iOS device, use `build-ios-device.sh` and `deploy-ios-device.sh`. The host and
|
|
|
|
|
ReplayKit extension require signing profiles with App Group `group.me.iamtalon.voicecat`.
|
|
|
|
|
Hardware validation must cover VoiceOver, background and lock behavior, interruptions, route
|
|
|
|
|
changes, Bluetooth, ReplayKit, and iOS 27 ScreenCaptureKit audio.
|
2026-06-18 14:20:38 +02:00
|
|
|
|
2026-09-21 00:11:01 +02:00
|
|
|
The shared ring contract is documented in `docs/broadcast-ring-format.md`.
|