Competenza · Applicazioni desktop
Applicazioni che si installano sul computer. Su macOS ne abbiamo costruite due; per Windows e Linux questa pagina è un’offerta, non una storia.
Costruiamo applicazioni native per macOS, con il nucleo della logica separato dallo schermo, così la stessa logica può funzionare anche sul telefono. Per Windows e Linux/Ubuntu non abbiamo ancora nulla consegnato e lo scriviamo come tale, con le condizioni in cui accetteremmo il lavoro. La prima domanda resta se ti serve davvero un'applicazione installata.
Offerta, con condizioniLa regola è meccanica e la applico meccanicamente. Su macOS abbiamo due implementazioni proprie, costruite ed eseguibili: un’applicazione da barra dei menu con 25 file Swift, che riutilizza 15 file dal nucleo di un progetto per iPhone, e una seconda applicazione, più semplice, che è un involucro WebKit sopra un’applicazione web. Entrambe hanno un binario compilato su questa macchina. Ma il servizio, così come è chiamato, copre tre famiglie di sistemi, e per due di esse — Windows e Linux/Ubuntu — abbiamo cercato seriamente e trovato zero: nessun progetto .NET o Qt proprio, nessun `tauri.conf.json`, nessun Electron scritto da noi, nessun `.desktop`, nessun pacchetto deb, rpm o AppImage. Inoltre, nessuna delle due applicazioni macOS è mai stata confezionata in un installer distribuibile. Con solo una su tre piattaforme coperta e zero distribuzioni, la pagina si scrive come offerta con condizioni. Quando consegneremo la prima applicazione per Windows o per Linux, cambia il valore, non il testo.
La prima domanda che Le facciamo non è per quale sistema, ma se Le serve davvero un’applicazione installata. Vale la pena installarla quando ha bisogno di qualcosa che il browser non le dà: accesso diretto ai sensori o alle periferiche, presenza permanente nella barra di sistema, funzionamento senza internet, accesso ai file sul disco senza che la persona li carichi ogni volta, oppure esecuzione in background quando la finestra è chiusa. Se nessuno di questi casi è richiesto, un sito che si apre da un link è più economico da costruire, aggiornare e mantenere — e glielo diciamo, anche se il lavoro risulta più piccolo.
Su macOS abbiamo due applicazioni costruite. La prima è un’applicazione per la barra dei menu: 25 file Swift proprietari, più 15 file di nucleo presi direttamente dal progetto iPhone dello stesso prodotto — gli stessi file, non una copia. Si costruisce con uno script che richiama direttamente il compilatore Swift, target `arm64-apple-macosx14`, collegando undici framework di sistema, tra cui SwiftUI, AppKit, CoreMotion, Vision e UserNotifications. Il binario risultante ha 6.516.128 byte. La seconda è molto più semplice ed è corretto dire quanto: tre file Swift, un involucro WebKit sopra un’applicazione web, con sandbox e runtime rafforzato attivati, compilato universalmente per processori Intel e Apple. Sono due cose diverse e le chiamiamo diversamente.
Ciò che non abbiamo, detto chiaramente. Windows: zero. Ho cercato progetti .NET, WPF, WinForms, WinUI, file `.xaml`, `.appxmanifest`, `.msi`, `.wxs` — tutto ciò che ho trovato sul disco appartiene a una libreria C di terze parti, vendorizzata in un altro progetto, che non abbiamo scritto noi. Linux desktop: zero — nessun file `.desktop`, nessun pacchetto deb o AppImage costruito qui. Electron o Tauri scritti da noi: zero. E, altrettanto importante: nessuna delle due applicazioni per macOS è mai stata impacchettata in un installer. Esistono come pacchetti `.app` costruiti localmente, firmati ad-hoc, senza identificatore di team.
Ciò che invece trasferisce l’esperienza finora acquisita, ed è la parte che conta per un nuovo progetto: la disciplina di tenere il nucleo logico separato dall’interfaccia. Nel progetto macOS, i file di calcolo e di policy non importano l’interfaccia, quindi si compilano ed eseguono su Mac come programma normale, senza simulatore; la loro suite logica gira in pochi secondi. La stessa separazione fa sì che il porting su un altro sistema sia un problema di involucro, non di riscrittura. Su questo ci basiamo quando diciamo che potremmo fare Windows o Linux — non su un’esperienza che non abbiamo.