Nucleus
Lifecycle

Cycle de vie, du démarrage à froid à la mise en veille

La surface OS d'une app Nucleus — verrou d'instance, deep links, login items, tâches de fond, énergie.

Une app desktop ne se résume pas à une fenêtre. Elle démarre depuis un binaire packagé, doit se comporter correctement quand on la lance deux fois, accepte des URL passées par l'OS, s'affiche dans le dock avec un badge, est relancée au login, exécute des cron jobs pendant qu'on dors, et lève le pied sur batterie. Le cluster lifecycle/ câble Nucleus à toute cette conversation.

TL;DR

  • SingleInstance garantit "une seule app à la fois" et redirige les args CLI vers l'instance primaire.
  • DeepLinkHandler + le bloc Gradle protocol { } gèrent les URL monapp://... sur Apple Events (macOS), registre (Windows) et MIME types .desktop (Linux).
  • NucleusApp expose bundle id, version, vendeur et AUMID injectés par le plugin au build.
  • ExecutableRuntime dit si l'app a été lancée depuis ./gradlew run, un DMG, MSIX, Flatpak, AppImage, etc.
  • Les modules launcher-* pilotent le menu du dock / la jump list / le quicklist Unity de chaque OS.
  • autolaunch active le démarrage au login ; scheduler enregistre des jobs cron qui survivent aux reboots ; service-management-macos fait la même chose pour des agents macOS compatibles sandbox.
  • energy-manager throttle le process quand la fenêtre est minimisée et garde l'écran allumé au besoin.
  • taskbar-progress peint la progression directement sur le dock / taskbar / Unity launcher.

Le cycle de vie, page par page

ÉtapeModulePage
Démarrage à froid, "y a quelqu'un ?"nucleus-application + core-runtimeSingle instance
URL et associations de fichierscore-runtime + DSL pluginDeep links
"Qui suis-je ?" au runtimecore-runtime (NucleusApp)App metadata
"Comment ai-je été packagé ?"core-runtime (ExecutableRuntime)Executable type
Menu du dock (macOS)launcher-macosLauncher : macOS
Overlays taskbar, jump list (Windows)launcher-windowsLauncher : Windows
Unity launcher, quicklist (Linux)launcher-linuxLauncher : Linux
Démarrage au loginautolaunchAuto-launch
Tâches périodiques / cronschedulerScheduler
Agents SMAppService (macOS)service-management-macosService management
Efficacité énergétique + keep-awakeenergy-managerEnergy manager
Progression dans le dock / la taskbartaskbar-progress (+ -tao)Taskbar progress

Modèle mental

Chaque page part du principe que le app survit à n'importe quelle fenêtre. L'utilisateur la quitte depuis le dock, la relance via une notification, dépose un .csv sur son icône, la programme pour se réveiller à 3h du matin, puis se plaint qu'elle a vidé la batterie. Chacun de ces modules est un wrapper opinionné au-dessus de l'API native correspondante — SMAppService, ITaskbarList3, NSDockTile, com.canonical.Unity.LauncherEntry, timers systemd, SetProcessInformation et compagnie — pour qu'on livre un seul code Kotlin et que l'OS reconnaisse quand même son rejeton.

Deux modules sont les primitives porteuses sur lesquelles le reste s'appuie : core-runtime (la fondation — Platform, NucleusApp, SingleInstanceManager, DeepLinkHandler, ExecutableRuntime) et nucleus-application (le point d'entrée nucleusApplication { } qui les amorce automatiquement). Commence par ces deux pages.