A giugno avevo scritto: «mettiamoci in conto un paio di settimane». Sono passati due mesi e mezzo, e questo devlog è rimasto fermo.

Non è successo niente di drammatico: nessun rifiuto, nessun muro tecnico. Semplicemente il tempo, che quando costruisci da solo è l'unica risorsa che non si ottimizza. Tanto vale dirlo invece di riprendere il filo facendo finta di niente.

Adesso l'app è caricata su Play Console ed è in revisione. Quando sarà approvata parte il test chiuso, con un gruppo di tester che si sono offerti nel frattempo. Questo post racconta cosa c'è dentro quel passaggio, che da fuori sembra un bottone e da dentro è un'altra cosa.


Un AAB, non un APK

La prima sorpresa, per chi arriva da Android come lo si conosceva, è che su Play non si carica più l'app.

Si carica un Android App Bundle: non un pacchetto installabile, ma un contenitore con dentro tutte le varianti possibili. È Google, al momento del download, a costruire il pacchetto giusto per quel telefono — la sua densità di schermo, la sua lingua, il suo processore. Chi scarica grain su un telefono moderno non si porta a casa il codice compilato per i processori vecchi.

Lo stesso vale per la firma. Con Play App Signing la chiave definitiva ce l'ha Google: tu firmi con una chiave di caricamento, che dimostra solo che quel file arriva da te. Se la perdi, si sostituisce; se perdessi l'altra, non potresti più aggiornare la tua app. Mai.

C'è un punto in cui questa comodità morde. Il bundle contiene il codice nativo compilato per le varie architetture dei processori, e se per errore ne includi solo alcune la revisione passa lo stesso — l'app è valida — ma sui telefoni con l'architettura mancante si chiude all'avvio. Un difetto che sul tuo dispositivo non vedi mai, e che scopri dalle recensioni.


La scheda è metà del lavoro

Poi c'è la parte che nessuno racconta, e che occupa più tempo del caricamento: la scheda.

Servono gli screenshot, in ogni lingua in cui pubblichi. Una descrizione breve che deve stare in ottanta caratteri — un limite che non perdona e ti costringe a scegliere l'unica cosa che conta. Una descrizione lunga. Un'immagine in evidenza. Un questionario sui contenuti, da cui esce la classificazione per età.

E la dichiarazione sui dati raccolti, che per grain è la più corta che si possa compilare: nessun dato raccolto, nessun dato condiviso. È l'unico momento in cui il modo in cui è fatta un'app si vede dentro la burocrazia invece che nonostante. Chi non ha account né telemetria non ha niente da dichiarare, e la scheda lo mostra a chiunque la apra.

Vale la pena prendersela comoda: è quello che le persone leggono prima di decidere. Il codice lo vedono dopo, se va bene.


Il numero di versione non torna indietro

Una cosa che ho imparato sbagliando, e che merita due righe perché costa a tutti la stessa mezz'ora.

Ogni caricamento porta un codice di versione, un numero intero che deve crescere a ogni pubblicazione. Se carichi un bundle e poi lo cancelli dalla console, quel numero resta bruciato: non lo puoi riusare. Il file è sparito, il numero no.

Quindi il conteggio non racconta quante versioni hai pubblicato, ma quante volte hai premuto «carica». È un dettaglio minuscolo, e quando ti blocca non è affatto ovvio.


Adesso si aspetta

Una pubblicazione su Play attraversa degli stati: bozza, pronta per l'invio, in revisione, e infine pronta per la pubblicazione — oppure respinta, con la motivazione.

Per un account nuovo la revisione può richiedere fino a sette giorni, e in casi eccezionali di più. grain è lì adesso.

La trappola sta in un dettaglio che si legge poco: modificare la scheda mentre l'app è in revisione può far ripartire la revisione da capo. Quindi la tentazione di sistemare una virgola, o di sostituire uno screenshot venuto storto, va tenuta a bada. Si aspetta senza mettere mano — e per chi è abituato a correggere le cose la sera stessa, è la parte difficile.


Poi comincia il test chiuso

Play ha quattro corsie: test interno, test chiuso, test aperto e produzione. L'interno è immediato e non passa dalla revisione, ma serve a poco più che far girare l'app sui propri dispositivi.

Il test chiuso è un'altra cosa, e non è una formalità. Per un account personale, prima di poter chiedere l'accesso alla produzione, serve un gruppo di tester che si iscrivano e ci restino per due settimane consecutive. Chi entra, prova un giorno e se ne va non viene conteggiato: non conta quante persone hanno toccato l'app, ma quante l'hanno tenuta sul telefono abbastanza a lungo da farsene un'idea.

Detto altrimenti, Google chiede la stessa cosa che chiederei io. Non un numero da esibire, ma persone che la usano per un tempo sufficiente a sapere cosa si rompe.

Quando la revisione sarà chiusa, il test parte. E questa volta le due settimane sono scritte nel regolamento, non nelle mie previsioni.


Per mesi il collo di bottiglia è stato il codice. Adesso è una coda, e si aspetta il proprio turno come tutti.

Come nasce grain. Lo costruisco da solo, con l'IA come strumento di lavoro: le idee, le scelte e i «no» restano miei; l'esecuzione la acceleriamo insieme — questo devlog compreso. Come lavoro con l'IA →