fix: avoid isolated volume setter reabstraction in Swift 6.3.3

This commit is contained in:
2026-10-22 10:23:02 +02:00
parent 419ac8d677
commit 4ac780de2a
3 changed files with 5 additions and 2 deletions
+2
View File
@@ -17,6 +17,8 @@ The first build downloads pinned dependencies. Build natively on Apple Silicon o
With the macOS 27 SDK, the player uses a private `ViewState` alias for the `SwiftUI.State<Value>` property wrapper to avoid selecting the same-named macro, whose `SwiftUIMacros` plugin is absent from standalone Command Line Tools. Full Xcode or an older SDK is not required. With the macOS 27 SDK, the player uses a private `ViewState` alias for the `SwiftUI.State<Value>` property wrapper to avoid selecting the same-named macro, whose `SwiftUIMacros` plugin is absent from standalone Command Line Tools. Full Xcode or an older SDK is not required.
Apple Swift 6.3.3 has been reported to abort during optimized `TerebiApp.swift` compilation with `SmallVector unable to grow` in an actor-isolated `Double` callback thunk. The volume binding uses an explicit setter closure instead of a method reference to avoid that conversion. The workaround was checked with Swift 6.4 and the macOS 26.5 SDK, but still needs confirmation on the affected 6.3.3 toolchain. Retry `make install` with the updated source; no dependency-cache reset is needed.
The resulting `.build/terebi.app` is self-contained: copy the whole app to a compatible Mac of the same architecture. No separate FFmpeg, Python, or yt-dlp installation is needed to run it. The resulting `.build/terebi.app` is self-contained: copy the whole app to a compatible Mac of the same architecture. No separate FFmpeg, Python, or yt-dlp installation is needed to run it.
### Apple SDK and UI API audit ### Apple SDK and UI API audit
+2 -1
View File
@@ -2480,7 +2480,8 @@ private struct PlayerContent: View {
HStack(spacing: 4) { HStack(spacing: 4) {
iconButton(model.volume == 0 ? "speaker.slash.fill" : "speaker.wave.2.fill", iconButton(model.volume == 0 ? "speaker.slash.fill" : "speaker.wave.2.fill",
model.volume == 0 ? "Unmute" : "Mute", action: model.toggleMute) model.volume == 0 ? "Unmute" : "Mute", action: model.toggleMute)
PlaybackSlider(value: Binding(get: { model.volume }, set: model.setVolume), // Avoid the actor-isolated method reabstraction implicated in a Swift 6.3.3 IRGen crash.
PlaybackSlider(value: Binding(get: { model.volume }, set: { model.setVolume($0) }),
range: 0...1, volume: true, enabled: model.canSetVolume, range: 0...1, volume: true, enabled: model.canSetVolume,
onEditingChanged: model.setControlsDragging) onEditingChanged: model.setControlsDragging)
.frame(width: 70, height: 14) .frame(width: 70, height: 14)
+1 -1
View File
@@ -20,4 +20,4 @@
- [x] check whether we're using appropriately new apple ui APIs / SDKs for the project. - [x] check whether we're using appropriately new apple ui APIs / SDKs for the project.
- we should strive to use modern and idiomatic SDKs and APIs including SwiftUI among others - we should strive to use modern and idiomatic SDKs and APIs including SwiftUI among others
- audited SDK 27.0 / Swift 6.4 with the macOS 15 minimum retained; migrated Cast discovery to NWBrowser and production activation to activate(). Real Bonjour identity/name/update/order/deduplication/removal/restart and routable-endpoint checks, loopback Cast transitions, focused startup-error alerts and a cooperating-launcher production smoke for cold start/CLI reuse/document handoff/keyboard playback passed. The existing full CLI snapshot-harness timeout remains; macOS 15 runtime and physical-Cast verification remain unverified. Observation, glass and the existing native bridges were left unchanged. - audited SDK 27.0 / Swift 6.4 with the macOS 15 minimum retained; migrated Cast discovery to NWBrowser and production activation to activate(). Real Bonjour identity/name/update/order/deduplication/removal/restart and routable-endpoint checks, loopback Cast transitions, focused startup-error alerts and a cooperating-launcher production smoke for cold start/CLI reuse/document handoff/keyboard playback passed. The existing full CLI snapshot-harness timeout remains; macOS 15 runtime and physical-Cast verification remain unverified. Observation, glass and the existing native bridges were left unchanged.
- [ ] fix the readme. it's currently bloated with irrelevant implementation detail and other such nonsense. - [ ] fix the readme. it's currently bloated with irrelevant implementation detail and other such nonsense. it should do the job of a readme only, nothing more.