ci / bun-nix (pull_request) Successful in 28s
ci / web (pull_request) Successful in 1m7s
ci / docs-site (pull_request) Successful in 1m20s
ci / rust-arm64 (pull_request) Successful in 1m32s
apple / swift (pull_request) Successful in 1m41s
apple / screenshots (pull_request) Skipped
ci / rust (pull_request) Successful in 12m36s
The reserved punktfunk://browse/<host-ref> route now routes on Apple: it
drives the same libraryTarget every internal surface writes, so the link
lands in whichever presentation the current mode owns — the gamepad
console's in-place library screen, the touch cover, the macOS sheet, or
tvOS's cover. Connect's posture minus the connect: a pin conflict
refuses, a live session is never preempted, an unsaved host gets a
notice (the library rides the paired mTLS identity, so there is nothing
to browse before the host is saved). browse ignores launch=/profile= —
nothing streams until a title is picked, and that connect resolves its
own profile.
On top of the route, the two new front doors:
- OpenLibraryIntent ("Open Game Library") beside Connect/Wake/End in
Shortcuts/Siri/Spotlight, host-parameterized like the others and
round-tripping through the URL — one router, no second path.
- A configurable library widget (kind "PunktfunkLibrary",
AppIntentConfiguration over HostEntity — the configuration the
HostEntity doc comment anticipated): pick a host, tap into its
library. Unconfigured it follows the most recent host; a configured
host that was removed shows the empty state rather than silently
following a different host. Same .never timeline + HostStore push as
the hosts widget, now reloading both kinds.
DeepLink.browse(host:) is the one emitter both doors share, covered by
a round-trip test beside connect's; the parse side was already in the
grammar and the vector file. Docs updated (clients, game-library,
profiles-and-links).
22 lines
860 B
Swift
22 lines
860 B
Swift
// The widget extension's entry point. ONE extension target (bundle id io.unom.punktfunk.widgets,
|
|
// iOS only) hosts both the launcher widgets and the Live Activity UI. It links PunktfunkShared and
|
|
// NOTHING else — never PunktfunkKit (Rust staticlib + presentation layer would blow the widget
|
|
// process's ~30 MB budget).
|
|
//
|
|
// These files are NOT part of the SwiftPM package (Package.swift doesn't declare a PunktfunkWidgets
|
|
// target, so `swift build` ignores the directory). They compile only in the Xcode widget-extension
|
|
// target you add pointing at this folder — see design/apple-live-activities-and-widgets.md §M1 and
|
|
// the GUI checklist.
|
|
|
|
import SwiftUI
|
|
import WidgetKit
|
|
|
|
@main
|
|
struct PunktfunkWidgetBundle: WidgetBundle {
|
|
var body: some Widget {
|
|
HostsWidget()
|
|
LibraryWidget()
|
|
PunktfunkSessionLiveActivity()
|
|
}
|
|
}
|