Screen Prank Locker: Eine macOS-Prank-App in Swift
Die Idee
In unserem Team gibt es eine ungeschriebene, aber knallhart durchgesetzte Regel: Wer seinen Platz verlässt und sein Notebook nicht sperrt, zahlt die nächste Runde Bier. Meistens schnappt sich dann jemand das verwaiste Gerät und setzt einen gönnerhaften Post im Team-Chat ab: “Bier geht heute auf mich!”. Eigentlich eine ganz nette Tradition, die ganz nebenbei auch die gängigen Compliance- und Clean-Desk-Richtlinien forciert.
Beim letzten Teamevent hat es mich dann aber auch erwischt, und zack durfte ich für sieben Kollegen die Getränke übernehmen. Habe ich natürlich gerne gemacht. Dennoch ist es schon etwas frech, sich an ein fremdes Notebook zu vergreifen. Das schreit nach Vergeltung. Auftritt: SlashGordons große Rache.
Screen Prank Locker ist eine macOS-App, die alle Bildschirme mit unsichtbaren Overlays überzieht, rigoros jedes Tastatur- und Mausereignis abfängt und jeden bestraft, der es wagt, den Rechner anzufassen. Stell dir eine Bildschirmsperre vor, nur eben mit einer leicht sadistischen Persönlichkeit.
Was die App macht
Die App lauert lautlos im Hintergrund, bis man sie scharfschaltet. Einmal aktiviert, legt sie transparente Vollbild-Fenster über jeden angeschlossenen Monitor und schluckt jegliche Eingaben. Die Falle schnappt zu: Der Desktop sieht völlig normal und ungesperrt aus wie ein offenes Honigglas für neugierige Kollegen. Das Opfer sieht den Screen, kann aber exakt gar nichts tun. Je nach gewähltem Schutzmodus lösen Interaktionsversuche dann zunehmend eskalierende und nervige Reaktionen aus.
Es gibt sechs verschiedene Schutzmodi:
| Modus | Was passiert |
|---|---|
| Silent | Nichts. Der Bildschirm ignoriert die Eingabe einfach. Maximale Verwirrung. |
| Flash | Der Bildschirm blitzt bei jedem Eingabeversuch aggressiv weiß auf. |
| Flash & Sound | Blitzlichtgewitter gepaart mit einem konfigurierbaren macOS-Systemsound. |
| Fart Prank | Spielt zufällige Furzgeräusche ab (mit Cooldown-Timer, damit die Audio-Engine nicht crasht). Stilvoll. Peinlich. |
| Custom MP3s | Feuert zufällige MP3-Dateien aus einem definierten Ordner ab. |
| Webcam Prank | Schießt heimlich ein Beweisfoto des Eindringlings und klatscht das verwirrte Gesicht riesig über den gesamten Screen. |
Der Webcam-Modus ist mein persönliches Highlight. Man kann sogar eine Telegram-Integration einrichten, damit das Foto des Übeltäters in Echtzeit direkt aufs eigene Handy gepusht wird.
Deaktivierung
Natürlich braucht der rechtmäßige Besitzer einen Weg zurück ins System. Dafür gibt es vier Auswege:
- Eine geheime Zeichenfolge blind eintippen (Standard:
unlock) - Touch ID (auf unterstützten Macs)
- Eine Notfall-Tastenkombination (Ctrl + Option + Cmd + Q)
- Ein Failsafe-Timeout, der die App nach 30 Minuten automatisch beendet
Die geheime Sequenz macht am meisten Spaß. Man muss das Passwort völlig ohne visuelles Feedback eintippen, während der Bildschirm komplett eingefroren wirkt. Es fühlt sich an wie das blinde Entschärfen einer Bombe in einem 90er-Jahre-Actionfilm.
Technische Details
Die App ist in Swift 5.9 geschrieben und zielt auf macOS 13+ ab. Unter der Haube nutzt sie die Accessibility-API, um globale Tastatur- und Mausereignisse abzufangen derselbe Mechanismus, den macOS für Bedienungshilfen verwendet. Dadurch kann Screen Prank Locker Eingaben abgreifen und blockieren, selbst wenn die App nicht den aktiven Fokus hat.
Die Multi-Display-Unterstützung war deutlich kniffliger als anfangs gedacht. Die App passt sich dynamisch an, falls während einer aktiven Sitzung Monitore verbunden oder getrennt werden, und erzeugt beziehungsweise zerstört die Overlay-Fenster on the fly.
Sämtliche Konfigurationen werden als JSON unter ~/.prank-locker/config.json abgelegt. So lässt sich alles von Aktivierungs-Hotkeys bis zu den Cooldown-Timern der Furzgeräusche bequem anpassen, ohne sich durch eine grafische Benutzeroberfläche klicken zu müssen.
Bauen & Installieren
Das Projekt basiert auf dem Swift Package Manager und liefert ein praktisches Makefile mit Targets für alle Build-Schritte mit:
make app # Build the .app bundle
make dmg # Create a distributable disk image
make pkg # Create a macOS installer package
Da die App nicht mit einem offiziellen Apple-Developer-Zertifikat signiert ist, wird macOS Gatekeeper zunächst meckern und den Start blockieren. Nach dem Download muss daher das Quarantäne-Attribut entfernt werden:
xattr -cr /Applications/ScreenPrankLocker.app
Danach lässt sie sich ganz normal aus dem Programme-Ordner oder via Spotlight starten.
Berechtigungen
Die App erfordert zwingend Accessibility-Zugriff, um Eingaben abzufangen. Der Kamerazugriff ist logischerweise optional (nur für den Webcam-Prank-Modus erforderlich), genau wie Touch ID. Beim ersten Start fordert Screen Prank Locker alle nötigen Rechte auf einmal an und leitet den Nutzer direkt in die Systemeinstellungen weiter, falls etwas fehlt.
Was ich gelernt habe
Beim Bau dieses kleinen Seitenprojekts habe ich einiges über die macOS-Entwicklung gelernt, das so nicht unbedingt auf der ersten Seite der Apple-Dokumentation steht:
- Strenge Berechtigungen: Die Accessibility-API ist extrem mächtig, aber das Sandbox-Modell verzeiht nichts. Die App muss explizit in den Systemeinstellungen autorisiert werden, und es gibt keinen Weg, dies programmatisch im Hintergrund zu erzwingen.
- Globale Events & Displays: Das Abfangen globaler Events über mehrere Bildschirme hinweg erfordert ein sehr genaues Management von Bildschirmkoordinaten und Display-Zuständen.
- AVFoundation Timing: Die Kameraerfassung ist an sich simpel, aber im exakt richtigen Moment ein scharfes Standbild abzugreifen, während der Nutzer tippt, erfordert etwas Feingefühl beim Timing.
Ausprobieren
Den kompletten Quellcode findet ihr auf GitHub. Schnappt euch ein Release-DMG, entfernt das Quarantäne-Flag und prankt eure Kollegen. Vielleicht solltet ihr sie aber vorher dezent auf die Furzgeräusche hinweisen.
Hinweis: Screen Prank Locker ist ein reines Hobby-Projekt. Verantwortungsvoll nutzen oder eben nicht, ich bin schließlich nicht euer Chef.