UniApp per gli studenti dell'Universita degli Studi del Molise.
Sviluppata da Anto426 con Kotlin Multiplatform, Compose Multiplatform e Material 3.
UniApp nasce da un progetto indipendente con l'obiettivo di offrire agli studenti dell'Universita degli Studi del Molise un accesso piu semplice, ordinato e immediato ai principali servizi universitari. L'app riunisce in un'unica esperienza le funzioni piu utili per la vita universitaria:
- gestione della carriera e consultazione del libretto
- visualizzazione di esami, appelli e prenotazioni
- accesso alle informazioni dello studente e al QR badge
- consultazione di questionari e compilazione multi-pagina
- gestione delle prenotazioni e delle cancellazioni dei trasporti
- una base tecnica pensata per supportare l'evoluzione dell'app e le future distribuzioni
UniApp e sviluppata e mantenuta in modo indipendente e non e affiliata ufficialmente all'Universita degli Studi del Molise.
root@anto426: ~/UniApp (main⚡)$ stack --list
> language:
- Kotlin 2.4.20
> ui:
- Compose Multiplatform 1.12.0
- Material 3
> platform:
- Android (min SDK 29)
- iOS (arm64, simulator arm64)
- Desktop JVM (Linux, Windows, macOS)
> tools:
- Gradle
- Android Studio
- XcodeGli SDK vivono in repository separati. I loro workflow pubblicano le dipendenze Maven per Gradle su GitHub Packages e un archivio Maven nelle GitHub Releases, con AAR Android ottimizzati da R8, metadati Kotlin Multiplatform e KLIB iOS. Ogni push sul branch principale dello SDK produce una versione 1.0.<run_number>.
| Modulo | Funzione | Repository |
|---|---|---|
liquid-monet |
Componenti Compose, tema Monet e superfici optical glass | Anto426-Project/Liquid-Monet |
uni-sdk |
Client KMP per API Cineca, backend UniApp, aggiornamenti e trasporti | Modulo interno |
secure-storage-sdk |
Persistenza sicura multipiattaforma per credenziali e token | Modulo interno |
firebase-connector-sdk |
Push notification e integrazione Firebase/FCM | Modulo interno |
UniApp usa esclusivamente SDK precompilati, come normali dipendenze Maven con versione esplicita in gradle/libs.versions.toml. Ogni SDK ha un repository, una build e una versione indipendenti. Il resolver scarica la Release v<versione> dichiarata nel catalogo, verifica gli hash e prepara .sdk-binaries/maven; non seleziona mai latest e non include i sorgenti dei repository vicini. .sdk-binaries/resolved.properties registra le versioni e revisioni effettivamente installate, senza sovrascrivere il catalogo.
Per preparare un checkout, con Python 3.11 o successivo, JDK 21 e un GITHUB_TOKEN o GH_TOKEN che possa leggere i repository privati degli SDK:
python3 scripts/fetch_sdk_binaries.py
./gradlew :composeApp:testAndroidHostTest :androidApp:assembleDebugPer aggiornare uno SDK, cambiare soltanto la sua versione nella sezione [versions] del catalogo e rieseguire python3 scripts/fetch_sdk_binaries.py. Per Liquid Monet l'alias è liquid-monet-sdk (libs.liquid.monet.sdk in Gradle). Il download fallisce se quella Release non esiste o contiene una versione diversa. Dopo un cambio di versione, Gradle segnala eventuali binari locali obsoleti e richiede di ripetere il download.
Il contenitore generale AppNavigationHost applica una sola transizione Liquid Monet alle
pagine, alle sottopagine e al ritorno indietro. In Tema, la sezione unica
"Sfondo, fisica e animazioni" raccoglie sfondo Liquid, movimento ridotto e preferenze
di transizione. Si possono scegliere gli otto preset animati dell'SDK; la preferenza
è salvata per l'intera app. Dissolvenza orizzontale (DirectionalHorizontal) è il valore
predefinito. Il solo controllo globale "Riduci movimento" gestisce la disattivazione.
UniMotion distribuisce la scelta ai contenitori condivisi;
l'SDK gestisce temporizzazione e movimento ridotto. I cambi di sessione restano immediati
perché invalidano la pagina precedente. Le schermate e le sezioni usano layout statici;
gli indicatori e i controlli mantengono il movimento previsto dai componenti dell'SDK.
python3 scripts/check_motion_ownership.py verifica che non vengano introdotte nuove
animazioni locali o preset diversi nelle schermate. Tutto usa la scena Liquid Glass già
presente nell'app.
La guida alle build descrive toolchain, runner, integrazione Xcode e verifiche degli SDK indipendenti. La guida a badge e biglietti descrive generazione artistica, lettura dei codici e conservazione degli originali.
Nei runner Android e iOS il resolver usa il secret SDK_READ_TOKEN, oppure DEPLOY_TOKEN se il primo non è configurato. Il token deve avere accesso in lettura ai contenuti di tutti e quattro i repository; il GITHUB_TOKEN automatico di UniApp non basta per gli SDK privati. I checksum vengono verificati anche quando gli archivi sono già nella cache .sdk-downloads/.
La build dell'app si avvia manualmente da GitHub Actions. Il sito ha un workflow separato. Per usare gli SDK direttamente da GitHub Packages in altri progetti, configurare il repository https://maven.pkg.github.com/anto426-project/<repository-sdk>, credenziali con read:packages e una versione Maven pubblicata esplicita.
androidApp/ Launcher Android e manifest
composeApp/ Codice condiviso Compose Multiplatform
src/commonMain/ UI e logica condivisa
src/androidMain/ Integrazioni Android
src/iosMain/ Integrazioni iOS
androidApp/src/main/ Entry point Android
.sdk-binaries/ Repository Maven locale generato, escluso da Git
assets/ Asset grafici del README
scripts/ Utility di versioning e deploy
iosApp/ Host application iOS
docs/ Documentazione del progetto
Per segnalazioni, idee o problemi, consulta la guida al feedback. Prima di aprire una segnalazione verifica che il problema sia riproducibile sull'ultima build disponibile.
La versione PC usa desktopApp e binari JVM degli SDK con versioni indipendenti.
Vedi compilazione, avvio e funzioni disponibili.
Android, iOS, Windows, Linux e macOS hanno build e pubblicazioni indipendenti.
Build All avvia le build specifiche; ogni piattaforma pubblica una sola versione.