Créer des fonds d'écran vidéo natifs pour macOS Tahoe avec Phosphene

Découvrez comment Phosphene exploite les frameworks privés d'Apple pour proposer des fonds d'écran vidéo fluides et économes en énergie, intégrés directement dans les Réglages Système de macOS.

Pendant des années, les utilisateurs de macOS ont dû s'appuyer sur des applications tierces qui superposent des fenêtres ou modifient l'environnement de bureau pour afficher des fonds d'écran vidéo. Ces solutions sont souvent gourmandes en ressources, épuisent la batterie et sont sujettes aux clignotements. Voici Phosphene, un moteur open-source pour macOS Tahoe qui adopte une approche radicalement différente : il s'intègre directement dans le sélecteur de fond d'écran natif du système.

L'avantage du "natif"

Phosphene n'est pas une simple application de superposition. Il est construit sur le framework privé WallpaperExtensionKit d'Apple — la même technologie qui alimente les économiseurs d'écran « Aerial » d'Apple. En se greffant sur ce point d'extension au niveau du système, Phosphene permet à vos vidéos personnalisées d'apparaître directement dans Réglages Système → Fond d'écran aux côtés des options natives.

Comme le rendu s'effectue hors-processus au sein de l'agent WallpaperAgent du système, le fond d'écran persiste même si l'application principale Phosphene est fermée. Il respecte les cycles de vie de l'écran de verrouillage, de l'inactivité et de la mise en veille de l'OS, offrant un niveau de stabilité que les applications de superposition traditionnelles ne peuvent tout simplement pas égaler.

Sous le capot : Architecture et ingénierie

Phosphene divise sa charge de travail en deux composants distincts :

  1. Phosphene.app (Interface de la barre de menus) : Gère la bibliothèque, les métadonnées et le transcodage. Il utilise un VideoOptimizationService pour générer des variantes de vos vidéos à plus basse résolution ou avec moins d'images par seconde, garantissant que le système puisse basculer vers des ressources plus légères lorsque la batterie est faible ou que la pression thermique est élevée.
  2. PhospheneExtension.appex (Le moteur) : C'est lui qui fait le gros du travail. Il s'exécute dans le processus WallpaperAgent, utilisant AVSampleBufferDisplayLayer pour le rendu des images.

Résoudre le problème de la "boucle sans coupure"

L'une des prouesses techniques les plus impressionnantes de Phosphene est son approche du bouclage. Les implémentations standard de AVPlayerLayer provoquent souvent une micro-saccade ou un "flash" lors du redémarrage d'une vidéo. Phosphene évite cela en pilotant manuellement le pipeline de décodage. Il maintient un AVAssetReader pour la boucle actuelle tout en préchargeant la suivante, utilisant un décalage de Presentation Time Stamp (PTS) augmentant de manière monotone à travers les limites de la boucle. Cela permet d'obtenir des boucles parfaitement fluides, précises à l'image près.

Lecture économe en énergie

Phosphene ne se contente pas de lire de la vidéo ; il la gère en fonction de l'état du système. Sa PlaybackPolicy agit comme source unique de vérité, synthétisant des données telles que :

  • Le niveau de batterie par rapport à l'alimentation secteur
  • L'état thermique
  • Le statut du Mode Jeu
  • L'occlusion des fenêtres (mise en pause du rendu si le bureau est entièrement recouvert)

Cette logique garantit que votre fond d'écran ne devienne pas un goulot d'étranglement pour les performances lors de tâches intensives.

Une note sur les frameworks privés

Il est important de noter que Phosphene utilise dlopen pour charger WallpaperExtensionKit et s'appuie sur l'introspection d'exécution basée sur Mirror pour communiquer avec les types XPC. Comme il s'agit d'API privées, le projet est intrinsèquement lié aux structures internes de macOS Tahoe. Le développeur a mis en œuvre des solutions de contournement astucieuses, comme un swizzle de WallpaperSnapshotXPC, pour s'assurer que l'écran de verrouillage ne devienne pas gris pendant les transitions — un problème courant lorsque les encodeurs privés d'Apple attendent des types de classes spécifiques.

Pour commencer

Si vous êtes un développeur intéressé par le fonctionnement de ce projet, vous pouvez le compiler à partir des sources. Le projet nécessite Xcode 17+ et la concurrence stricte de Swift 6.

git clone https://github.com/kageroumado/phosphene.git
cd phosphene
open Phosphene.xcodeproj

Pour une compilation sans interface (utile pour l'intégration continue ou les tests locaux sans identités de signature), vous pouvez utiliser :

xcodebuild -project Phosphene.xcodeproj -scheme Phosphene -configuration Debug \
-destination 'generic/platform=macOS' \
CODE_SIGNING_ALLOWED=NO CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY='' build

Phosphene est une leçon magistrale de rétro-ingénierie et d'intégration système. Que vous souhaitiez l'utiliser pour personnaliser votre bureau ou étudier comment interagir avec les frameworks privés de macOS, c'est un projet qui mérite d'être exploré.

Source

kageroumado/phosphene: A video wallpaper engine for macOS Tahoe