Vai al contenuto
Torna al blog
Tool

Il mio stack per una app mobile da solo

Otto strumenti per costruire e distribuire una app iOS e Android da solo, con React Native ed Expo sopra e la stessa base del web sotto.

Guglielmo Vaccaro
Una persona a un banco da lavoro che apre due telefoni con un cacciavite.

Questo è lo stack di CalAlly, l'app di tracking nutrizionale a voce che sto costruendo. È lo stesso di quello che uso per una web app sotto il cofano, e cambia solo il pezzo che disegna e consegna l'interfaccia.

Otto strumenti: due specifici del mobile e sei che restano identici. Il fatto che siano identici non è una coincidenza, è il punto: se avessi dovuto imparare un backend nuovo per fare una app, l'app non l'avrei fatta.

I due pezzi che rendono l'app una app

React Native: una base di codice per iOS e Android. Da solo non esiste l'alternativa di mantenere due app native, quindi la domanda non è se il nativo sia meglio, perché lo è: è quale delle due app riuscirei effettivamente a tenere aggiornata. La risposta onesta è nessuna delle due.

C'è anche un secondo motivo, meno nobile e più pratico: React Native è React. Il modello mentale dei componenti e dello stato è lo stesso che uso sul web, quindi il passaggio da un progetto all'altro non mi costa un cambio di testa.

Expo: la parte che rende React Native gestibile da una persona sola, ed è quella che sottovalutavo prima di provarci. Il codice dell'app è la parte facile. La parte che ti mangia le giornate è tutto quello che sta intorno: build per due piattaforme, certificati, profili di provisioning, versioni, caricamenti sugli store.

Expo prende quel pezzo e lo riduce a un comando. E soprattutto permette di mandare aggiornamenti senza ripassare ogni volta dalla revisione degli store, che quando sei solo è la differenza tra correggere un errore in mezz'ora e correggerlo la settimana dopo.

I sei che sono già quelli del web

Qui sta il vantaggio vero di aver ripetuto lo stesso stack per tre progetti: quando ho iniziato l'app, questa metà era già decisa.

Supabase: database, autenticazione e storage. Sul mobile conta una cosa in più rispetto al web: le regole di accesso stanno nel database, non nel client. Un'app la installi sul telefono di qualcuno, e qualunque controllo scritto solo nell'app è un controllo che si può aggirare. Con le regole a livello di database la superficie si riduce a un punto solo.

Resend: mail transazionali. Conferme, reimpostazione della password, tutto quello che parte da un'azione nell'app.

PostHog: prodotto e analytics. Sul mobile serve più che sul web, perché non puoi guardare qualcuno usare l'app da sopra la spalla: l'unica cosa che ti dice se qualcuno ha capito una schermata è il comportamento.

Featurebase: help center e raccolta feedback. In pre-lancio con dei tester è lo strumento che uso di più, perché tiene insieme richieste e segnalazioni in un posto pubblico invece che in venti messaggi separati.

Namecheap: domini. Anche una app ne ha bisogno: pagina di presentazione, link agli store, informativa privacy, che gli store chiedono e che deve stare da qualche parte.

GitHub: codice e cronologia, come su tutto il resto.

Cosa cambia davvero fra web e mobile

Il codice, meno di quanto pensassi. Il resto, parecchio.

  • La distribuzione non è più tua. Sul web pubblichi quando vuoi. Sugli store c'è una revisione in mezzo, e va messa in conto nella pianificazione invece che scoperta al primo rifiuto.
  • Le versioni vecchie restano in giro. Un sito lo aggiorni per tutti insieme. Un'app no: c'è gente che tiene la versione di due mesi fa, quindi il backend deve continuare a rispondere anche a quella.
  • Non vedi niente senza analytics. Sul web ho i log del server e la Search Console. Su un'app installata, senza strumentazione sei cieco.
  • Il primo utente costa di più. Aprire un link è gratis, scaricare un'app no. È il motivo per cui la pagina che spiega il prodotto conta ancora più che sul web.

Cosa non uso, di proposito

  • Niente notifiche push nella prima versione. Sono la cosa che tutti mettono per prima e che quasi nessuno merita. Finché non so cosa riporta indietro le persone, una notifica è solo un modo per farsi disinstallare.
  • Nessuna libreria di componenti pesante. Stessa ragione del web: da solo, il debito nascosto in una dipendenza costa più della riga in più.
  • Nessun abbonamento prima di aver capito cosa si paga. I pagamenti in-app hanno regole, commissioni e casi limite che non vuoi imparare mentre stai ancora cercando di capire se il prodotto serve a qualcuno.

Domande frequenti

Perché React Native e non nativo?

Perché da solo non riuscirei a mantenere due app native. Nativo è meglio, ma "meglio" vale solo su una cosa che riesci davvero a tenere aggiornata. La scelta vera non è tra React Native e nativo, è tra una app che esiste e due che non esistono.

Expo serve davvero o è un livello in più?

Serve. La parte che pesa di più su una persona sola non è scrivere l'app, è costruirla e distribuirla su due piattaforme. Expo toglie quasi tutto quel lavoro e permette di aggiornare senza passare ogni volta dalla revisione degli store.

Si può usare lo stesso backend per web e mobile?

Sì, ed è il motivo per cui questo stack ha senso. Database, autenticazione, mail, analytics e supporto sono gli stessi. Cambia solo quello che disegna l'interfaccia.

Quanto ci vuole a pubblicare la prima versione su uno store?

Molto più che a metterla online sul web, e non per il codice. Fra account sviluppatore, materiali richiesti dagli store e tempi di revisione, la parte burocratica è quella che decide la data.

Guglielmo Vaccaro

Startupper e solopreneur. Costruisco prodotti da zero, da solo e senza investitori. Racconto il processo mentre succede, errori compresi.

Chi sono

Ciao Builders

Il posto dove chi costruisce prodotti in Italia smette di farlo da solo. Ingresso gratuito.

Entra in Ciao Builders