Competenza · Applicazioni mobili
Applicazioni per telefono, costruite in modo che la logica possa essere verificata senza telefono.
Costruiamo applicazioni native iOS in Swift, con sensori e HealthKit, e applicazioni con un solo codice per iOS, Android e web quando il progetto non richiede sensori. Il nucleo della logica viene testato separatamente dallo schermo.
Già costruitoSono tre implementazioni proprie, non una. Un repository con cinque target di applicazione (quattro iOS e uno macOS) definiti in `project.yml`, i cui test di logica abbiamo eseguito oggi: 160 su 160 passano. Una seconda app iOS, in un altro progetto, con 40 file Swift e HealthKit. E una terza direzione, con un solo codice per iOS, Android e web, la cui variante web risponde oggi. La riserva che cambia la risposta alla domanda che ogni acquirente pone prima di tutto: nessuna delle nostre app è pubblicata su App Store o Google Play. Il motivo è uno solo e ha un nome — `DEVELOPMENT_TEAM` è vuoto nella configurazione del progetto, cioè manca l’identificatore del team dell’Apple Developer Program. La macchina ha un’identità di firma valida, sufficiente per l’installazione sul proprio dispositivo, insufficiente per la distribuzione nello store. È un problema di account, non di codice, ma resta un problema e lo scriviamo qui, non in fondo.
Un’app mobile ha due parti che si rompono in modo diverso. La parte che legge i sensori e calcola qualcosa — un angolo, un punteggio, uno stato — e la parte che disegna gli schermi. Le teniamo separate, e non per motivi estetici: nel nostro deposito principale iOS, i file del nucleo non importano l’interfaccia, quindi possono essere compilati direttamente con `swiftc` su Mac ed eseguiti come un programma normale, senza simulatore e senza telefono. La suite ha 160 verifiche raggruppate in 16 fasi; l’abbiamo eseguita oggi e passa integralmente. Questo è il motivo per cui possiamo dire esattamente cosa fa un algoritmo, invece di dire che «funziona bene».
Su iOS lavoriamo in Swift 6, con obiettivo minimo iOS 17. Lo stesso deposito definisce cinque applicazioni come target separati: quattro per iPhone e una per macOS, e quella per macOS riutilizza quindici file dal nucleo di iOS, senza copia. I sensori si leggono alla fonte: l’interfaccia Apple per i sensori nelle cuffie espone l’orientamento della testa, e l’app confronta l’angolo corrente con una posizione che l’utente calibra all’inizio della sessione. Le soglie non sono «regolazioni interne»: sotto 7° è diritto, tra 7° e 13° è inclinazione, oltre 13° mantenuto per tre secondi fa scattare l’allerta, e la smussatura usa una media esponenziale con coefficiente 0,15. Tutti e quattro i valori stanno in quattro righe consecutive di codice e possono essere mostrati.
Quando il progetto non ha bisogno di sensori, non raccomandiamo il nativo. La terza direzione nel portafoglio è un solo codice che si compila per iPhone, Android e browser — React Native con Expo — e la variante web è pubblicata e risponde oggi. La differenza pratica per il cliente: un questionario, un calcolatore o una dashboard non giustificano due team e due depositi; un’applicazione che ascolta un sensore a venti campioni al secondo, sì.
Ciò che non possiamo ancora fare. Nessuna delle nostre applicazioni è su App Store o Google Play. Non perché non compili — compila, si installa sul simulatore e passa i test — ma perché nella configurazione del progetto l’identificatore del team Apple è vuoto, cioè non esiste una registrazione nell’Apple Developer Program collegata a questi build. Su Mac esiste un’identità di firma valida, di tipo sviluppo, che basta per l’installazione sul proprio dispositivo e non basta per lo store. Per un progetto cliente, l’account sviluppatore si apre a nome della società cliente e resta suo — questa è la discussione che va fatta all’inizio, non alla fine.