PlayNotch: Trasforma il Notch del tuo MacBook in un Controller Musicale multipiattaforma

Cosa c’è di meglio da fare durante il ponte del 2 giugno? Esatto. Mentre mezza Italia stava probabilmente in spiaggia o a fare un barbecue, io ero qui, sul divano, con il MacBook aperto e un’idea che mi ronzava in testa da settimane.
Avevo un problema banale ma fastidioso: uso YouTube Music come player principale, e ogni volta che volevo cambiare traccia, alzare il volume o mettere in pausa, dovevo tornare sul tab del browser, oppure cliccare sulla barra di sistema, oppure cercare la finestra giusta tra le dieci aperte… insomma, troppi gesti per qualcosa che dovrebbe essere immediato. E poi c’è quel notch — quella tacca nera in cima allo schermo dei MacBook — che Apple ha sempre trattato come uno spazio morto, un buco nero decorativo.
“E se ci mettessi dentro un controller musicale come negli iPhone?”
Detto, fatto. Benvenuti in PlayNotch.
La Prima App Swift: Ma sono sopravvissuto (a malapena)
Prima di andare avanti: non sono uno sviluppatore Swift. Lavoro principalmente con PHP e Python, e Swift per me era quella cosa che “prima o poi imparerò”. Beh, il ponte del 2 giugno è stato il “prima o poi”.
La notizia buona è che non serve Xcode. PlayNotch è costruito interamente con SwiftPM (Swift Package Manager) e i Command Line Tools di Apple. Nessuna interfaccia grafica di sviluppo da 30GB, solo codice e terminale. Per uno abituato a lavorare da CLI, questo è già un punto di partenza civile.
La notizia meno buona è che Swift è… peculiare. Il sistema di tipi è severo, il compilatore non perdona niente, e la prima ora l’ho passata a litigare con optional e closures come se fossero nemici di vecchia data. Ma poi scatta qualcosa, e cominci a capirne la logica. È come quella volta che ho imparato i generics in PHP 8: all’inizio sembrano inutili, poi non riesci più a farne a meno.
Cosa Fa PlayNotch (E Perché Dovresti Volerlo)
Quando avvii PlayNotch non vedi nessuna icona nel Dock — l’app gira in background come un’app di tipo “agent”. Quello che vedi è una piccola barra che occupa il notch. Ci passi il cursore sopra e boom: si espande in una card con tutte le informazioni sulla traccia in riproduzione.
Ecco cosa trovi nella card espansa:
- Artwork, titolo e artista della traccia corrente
- Pulsanti di trasporto: precedente, play/pausa, successiva
- Progress bar scrubbabile (si può dire vero?) — puoi trascinare per saltare a un punto specifico, con anteprima della posizione al passaggio del mouse
- Controllo volume: scrolla sul notch o usa lo slider
- Toggle shuffle e repeat (Apple Music e Spotify nativi; YouTube Music lo gestisce tramite la sua player bar)
- Like/Favorite della traccia corrente (Apple Music e YouTube Music; Spotify purtroppo non lo permette via AppleScript)
- Theming dall’artwork (opzionale): un colore “vibrante” viene estratto dalla copertina e applicato alla card, alla progress bar e ai toggle
- Sfondo con cover sfocata (opzionale): la copertina diventa lo sfondo della card, effetto liquid incluso
- Quick toggles di sistema (opzionali):
- Alterna tra modalità Light, Dark e Auto
- Tieni sveglio il Mac con
caffeinate - Manda il display in sleep
Tutto accessibile senza aprire nessuna app, senza toccare nessun menu. Un hover e hai il controllo completo.
Multi-Player: Il Gioco delle Precedenze
Una delle cose che mi piaceva meno delle soluzioni esistenti è che non gestivano bene il caso in cui hai più player aperti contemporaneamente. Spotify in background, Apple Music che parte per sbaglio, YouTube Music aperto nel browser…
PlayNotch risolve questo con una logica semplice: vince chi ha suonato per ultimo. Il player che hai avviato più di recente prende il controllo della card. Se lo metti in pausa, il controllo passa automaticamente a quello che sta ancora riproducendo. Nessuna configurazione manuale, nessun menu a tendina per scegliere la sorgente.
I tre player supportati funzionano in modo leggermente diverso sotto il cofano:
| Player | Come viene controllato |
|---|---|
| Apple Music | AppleScript diretto a Music.app |
| Spotify | AppleScript diretto a Spotify.app |
| YouTube Music | JavaScript iniettato nel tab del browser |
Proprio per YouTube Music — il mio caso d’uso principale, e probabilmente il più complicato da gestire — c’è un piccolo setup iniziale: bisogna abilitare “Allow JavaScript from Apple Events” nel browser. Il motivo è semplice: YouTube Music non ha un’interfaccia AppleScript come Apple Music o Spotify, quindi PlayNotch inietta JavaScript direttamente nel tab del browser per leggere e controllare il player. Si fa una volta sola, e funziona con Safari, Chrome, Brave, Edge e Arc.
Come Installarlo (È Più Facile di Quanto Sembri)
Devi avere macOS 14 o successivo e il Swift 6 toolchain (non Xcode, solo i Command Line Tools). Poi:
git clone https://github.com/MatteoAdamo82/PlayNotch.git
cd PlayNotch
./scripts/build_app.sh --run
Lo script fa tutto: compila in release, crea il bundle .app in build/, termina eventuali istanze precedenti e avvia l’app. Al primo avvio macOS chiederà i permessi di automazione per ogni player — è normale, basta cliccare OK.
Nota bene: PlayNotch è signed ad-hoc, non è notarizzato da Apple. Al primissimo avvio macOS potrebbe lamentarsi. La soluzione è aprirlo con tasto destro → “Apri”, oppure andare in Impostazioni di Sistema → Privacy e Sicurezza → “Apri comunque”. Succede una volta sola.
Se stai usando macOS 26 (in beta) come me, funziona anche lì.
L’Icona nella Barra dei Menu: Il Centro di Controllo
Dato che non c’è icona nel Dock, le impostazioni vivono nella barra dei menu — l’icona ♪ è il tuo punto di accesso. Da lì puoi:
- Attivare/disattivare Launch at Login
- Abilitare o disabilitare il Theme from Artwork e lo Sfondo con cover sfocata
- Mostrare o nascondere la riga dei Quick Toggles
- Scegliere la dimensione del notch (Compact / Default / Large)
- Selezionare su quale schermo mostrare il notch (Show on Screen)
- Aprire le impostazioni di Automazione di macOS
- Uscire dall’app
Struttura del Progetto
Per chi è curioso di come è organizzato il codice, la struttura è abbastanza leggibile:
Sources/PlayNotch/
main.swift
AppDelegate.swift
StatusItemController/ ← menu bar item
Media/
NowPlaying.swift ← modello dati + protocollo MediaSource
AppleScriptRunner/ ← helper NSAppleScript
AppleMusicSource/
SpotifySource/
YouTubeMusicSource/
MediaController/ ← sceglie il player attivo
Notch/
NotchViewModel/ ← stato, polling, artwork, colore accent
NotchView/ ← UI SwiftUI
NotchWindow/ ← NSPanel sopra la menu bar
NotchController/ ← geometria schermo, mouse tracking
PassthroughHostingView ← click pass-through fuori dal notch
ColorExtraction/ ← estrazione colore vibrante dall'artwork
Il polling avviene ogni secondo. La progress bar non “salta” tra un poll e l’altro perché la posizione viene interpolata localmente — un piccolo dettaglio che fa la differenza nell’esperienza d’uso.
E Adesso?
La roadmap è già sostanzialmente completata per questa prima versione:
- ✅ Progress bar + seek + volume
- ✅ Like / favorite e shuffle / repeat
- ✅ Theming dall’artwork
- ✅ Icona menu bar con launch at login e screen picker
- ✅ Sfondo artwork sfocato e animazioni “liquid”
- ✅ Preferenze (dimensione notch, quick toggles, schermo, theming)
- ✅ Riga Control Center (aspetto, keep-awake, sleep display)
Se hai idee, bug da segnalare o vuoi contribuire, il repository è pubblico su GitHub. Le PR sono benvenute — anche perché, ammettiamolo, il mio Swift è quello di uno che ha imparato durante un ponte.
P.S. Ok, la prossima volta valuterò seriamente l’ipotesi di invitare qualche amico per una sana sbraciolata in giardino e trascorrere un ponte come una persona normale. Forse.