Nucleus
Lifecycle

Métadonnées de l'app au runtime

Lis l'id, la version, le vendeur et l'AUMID de le app depuis ce qu'on a configuré dans le plugin Gradle.

La boîte "À propos" veut 1.2.3. Le crash reporter veut com.example.monapp. L'updater veut le vendeur. Rien de tout ça ne devrait être hardcodé — ni relu sur disque au runtime. NucleusApp expose ce que le plugin Gradle a injecté au build, avec des fallbacks sensés pour ./gradlew run.

TL;DR

  • Le singleton NucleusApp expose appId, version, vendor, description, appName, aumid, startupTaskId, isConfigured.
  • Injecté par le plugin via system properties (en run) et une resource classpath (nucleus/nucleus-app.properties, builds packagés).
  • Toutes les valeurs sont String? sauf appId (qui tombe sur le nom de la main class) et isConfigured.
  • Plusieurs modules Nucleus le lisent implicitement — SingleInstanceManager, taskbar-progress, autolaunch, updater-runtime.

Installation

Fourni avec core-runtime.

Quickstart

import dev.nucleusframework.core.runtime.NucleusApp

@Composable
fun AboutDialog() {
    Column {
        Text(NucleusApp.appName ?: NucleusApp.appId)
        NucleusApp.version?.let { Text("Version $it") }
        NucleusApp.vendor?.let { Text("par $it") }
    }
}

if (NucleusApp.isConfigured) {
    // App packagée
    initAutoUpdater()
}

Comment ça marche

Le plugin donne à NucleusApp deux canaux d'injection :

  1. System properties pendant ./gradlew run : -Dnucleus.app.id=MyApp, -Dnucleus.app.version=..., etc.
  2. Resource classpath en build packagé : nucleus/nucleus-app.properties embarqué dans le jar de l'app.

La résolution est first-non-null-wins : system property, puis resource, puis fallback hérité pour appId (main class via sun.java.command, sinon "NucleusApp").

C'est la couture qui fait qu'une ligne dans build.gradle.kts se propage à tous les modules runtime sans câblage manuel. L'identifiant du verrou single-instance, l'AUMID utilisé par Windows pour les badges, le WM_CLASS GraalVM sur Linux, le dossier des marqueurs d'update — tout passe par NucleusApp et reprend ce qu'on a déclaré dans le plugin.

Référence

NucleusApp

PropriétéTypeSource
appIdStringpackageName du plugin. Fallback sur main class ou "NucleusApp".
appNameString?Nom d'affichage.
versionString?packageVersion du plugin.
vendorString?vendor du plugin.
descriptionString?description du plugin.
aumidString?Application User Model ID (Windows).
startupTaskIdString?Task id MSIX utilisé par autolaunch.
isConfiguredBooleantrue si au moins une source a fourni des valeurs.

Notes

  • Pattern fréquent : brancher sur NucleusApp.isConfigured pour gater l'auto-update, la télémétrie, tout ce qu'on ne veux pas voir partir en dev.
  • Voir ExecutableRuntime quand il faut distinguer DMG vs Flatpak vs ./gradlew run — c'est un autre sujet.