Scarriffle 28b1b4270e Audiomixer zeigt Programme statt Prozesse
Core Audio meldet Prozesse, nicht Programme. Angezeigt wurden deshalb
Kennungen wie „com.apple.WebKit.GPU" und Dutzende Systemdienste, die
theoretisch Ton ausgeben könnten, es aber nie tun.

ProcessNaming fragt erst das laufende Programm, kürzt sonst bekannte
Hilfsprozess-Endungen weg und schlägt das übergeordnete Programm nach —
Chromes Ton kommt aus einem Helfer, angezeigt gehört Chrome. Symbole
gehen denselben Weg, sonst steht neben dem Namen ein Platzhalter.

ProcessVisibility zeigt, was klingt, kürzlich klang oder geregelt wird.
Die Nachlaufzeit von zwei Minuten ist der eigentliche Punkt: ohne sie
verschwindet Spotify beim Pausieren aus der Liste, und man kann die
Lautstärke genau dann nicht mehr einstellen, wenn man es will. Geregelte
Programme bleiben immer — wer etwas leiser gedreht hat, muss es auch
zurückdrehen können.

Die Prozentzahl wandert vom Namen zum Regler. Oben war sie genau die
Breite, die den Namen abgeschnitten hat.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 09:54:20 +02:00

Onyx

Notch-Erweiterung für macOS. Beim Überfahren der Notch fährt ein Panel mit eigenen Widgets aus — Kalender, Wetter, Medien, Hardware, Netzwerk, Audio-Mixer, Ablage und AirDrop.

Zielgerät: MacBook Pro mit Apple Silicon, macOS 26+.


Bauen

xcodegen generate          # erzeugt Onyx.xcodeproj aus project.yml
open Onyx.xcodeproj        # dann ⌘R

Voraussetzungen: Xcode 26, XcodeGen, Signierung mit Team PP34X97WS3.

Tests laufen ohne Xcode:

cd Packages/OnyxKit && swift test

Aufbau

Die Projektdefinition liegt als project.yml vor, nicht als handgepflegte .xcodeproj — so ist im Diff lesbar, was sich an den Build-Einstellungen ändert.

Onyx/                    App-Target (nicht sandboxed, Hardened Runtime)
Packages/OnyxKit/        Alle Module als lokales Swift-Package
  OnyxCore               Einzelinstanz-Sicherung
  OnyxDesign             Farben, Maße, Bewegung — einzige Quelle
  OnyxNotch              Panel-Fenster, Geometrie, Zustandsmaschine
  OnyxWidgetKit          Widget-Protokoll, Layout-Engine, Persistenz
  OnyxMenuBar            Modul-Protokoll für Menüleisten-Elemente
  CalendarProvider       EventKit (und später Calendarr)
  WeatherProvider        WeatherKit + CoreLocation
  MediaProvider          MediaRemote-Adapter, AppleScript, Medientasten
Vendor/                  Fremdcode im Quellzustand (siehe unten)
Spikes/                  Wegwerf-Werkzeuge zur API-Verifikation
docs/spikes/             Was dabei herauskam — auch die Sackgassen

Entscheidungen, die man sonst für Fehler hält

Keine App-Sandbox. Sie ist mit dem privilegierten Helper, mit IOKit und mit dem MediaRemote-Adapter unvereinbar. Der App-Group-Container für Calendarr bleibt trotzdem erreichbar — auf macOS ist er von der Sandbox unabhängig. Nachgemessen in docs/spikes/D-appgroup.md.

TCC-Entitlements trotz fehlender Sandbox. Bei aktivierter Hardened Runtime verlangt macOS com.apple.security.personal-information.* auch ohne Sandbox. Fehlt eine davon, erscheint der Berechtigungsdialog gar nicht erst — ohne Fehlermeldung. Das hat einen halben Abend gekostet: docs/spikes/E-tcc-hardened-runtime.md.

ENABLE_DEBUG_DYLIB = NO. Xcode lagert im Debug-Build den Programmcode in eine eigene dylib aus. TCC ordnet Berechtigungsanfragen dann dem verbleibenden Rumpf zu, der weder Info.plist noch Entitlements trägt.

Eigenes Einstellungsfenster. SwiftUIs Settings-Szene öffnet über einen privaten Selektor, der bei Apps ohne Menüleiste unzuverlässig ankommt.

Der MediaRemote-Adapter wird nicht gelinkt. Er wird von /usr/bin/perl geladen, einem berechtigten Systemprogramm — im eigenen Prozess greift Apples Entitlement-Prüfung und es käme nichts an.


Fremdcode

Vendor/mediaremote-adapterungive/mediaremote-adapter, BSD-3-Clause. Als Quellcode eingebettet und beim Bauen kompiliert, nicht als fertige Binary: so ist nachvollziehbar, was läuft. Stand siehe ONYX-VERSION.txt.


© 2026 Scarriffleservices

Description
No description provided
Readme 2 MiB
Languages
Swift 97.6%
Shell 2.4%