Phase 4: Medien-Widget mit dreistufiger Kaskade
Adapter für alles inklusive Browser, AppleScript für Spotify und Musik, Medientasten als letzte Reserve. Die Reihenfolge ist keine Vorliebe, sondern Absicherung: Apple hat die Now-Playing-Schnittstelle in macOS 15.4 schon einmal zugemacht. Fällt der Adapter aus, verliert das Widget seine Anzeige — aber nicht seine Funktion. Deshalb bleiben die Transporttasten auch dann bedienbar, wenn gar keine Metadaten da sind. Der Fortschritt zählt zwischen den Ereignissen selbst hoch. Spike B hatte gezeigt, dass elapsedTime nicht laufend nachgeliefert wird: ein Scrubber, der stur den letzten Wert anzeigt, steht still, während der Titel läuft. Gerechnet wird aus asOf und playbackRate, begrenzt auf die Titellänge — sonst zeigt die Anzeige nach dem Ende weiter steigende Zahlen. Teilmeldungen (diff = true) ergänzen den Stand, statt ihn zu ersetzen. Eine Meldung mit nur der Position würde sonst Titel, Interpret und Cover löschen. In AnyDecodable wird Bool vor Double geprüft. Andernfalls wird "playing": true zu 1 und die Wiedergabe gilt für immer als angehalten. Play/Pause schaltet sofort um, statt auf das nächste Ereignis zu warten. Ein Knopf, der eine halbe Sekunde später reagiert, fühlt sich kaputt an; das echte Ereignis korrigiert den Stand ohnehin. Der Adapter liegt als Quellcode unter Vendor/ (BSD-3, Stand in ONYX-VERSION.txt) und wird beim Bauen kompiliert, statt als fertige Binary eingecheckt zu werden. Er wird bewusst nicht gelinkt: geladen wird er von /usr/bin/perl, im eigenen Prozess greift Apples Entitlement-Prüfung. 124 Tests grün.
This commit is contained in:
17
project.yml
17
project.yml
@@ -49,7 +49,24 @@ targets:
|
||||
product: CalendarProvider
|
||||
- package: OnyxKit
|
||||
product: WeatherProvider
|
||||
- package: OnyxKit
|
||||
product: MediaProvider
|
||||
postBuildScripts:
|
||||
# Der MediaRemote-Adapter wird aus dem mitgelieferten Quellcode gebaut,
|
||||
# nicht als fertige Binary eingecheckt: so ist nachvollziehbar, was da
|
||||
# läuft, und die Ad-hoc-Signatur passt zum restlichen Bundle.
|
||||
#
|
||||
# Er darf NICHT gelinkt werden. Geladen wird er von /usr/bin/perl, einem
|
||||
# berechtigten Systemprogramm — im eigenen Prozess greift Apples
|
||||
# Entitlement-Prüfung und es käme gar nichts an.
|
||||
- name: MediaRemote-Adapter bauen und beilegen
|
||||
script: |
|
||||
OUT="$BUILT_PRODUCTS_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH/Vendor" \
|
||||
"$SRCROOT/Scripts/build-mediaremote-adapter.sh"
|
||||
inputFiles:
|
||||
- $(SRCROOT)/Scripts/build-mediaremote-adapter.sh
|
||||
outputFiles:
|
||||
- $(BUILT_PRODUCTS_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/Vendor/mediaremote-adapter.pl
|
||||
# Das Menüleistensymbol soll das Glyph aus dem App-Icon zeigen, nicht die
|
||||
# abgerundete Kachel mit Verlauf. actool kompiliert das .icon-Bündel zu
|
||||
# .icns und Assets.car und legt nichts Lesbares ins Bundle — und eine
|
||||
|
||||
Reference in New Issue
Block a user