Going Public: due store, due rifiuti, zero calma
English Deutsch Español Français Português 中文 日本語 한국어 Русский Türkçe Polski Nederlands Bahasa Indonesia
Moneyflow è ora su App Store e su Google Play. Ci piacerebbe dirvi che è andato tutto liscio. Non è andata così. Per strada abbiamo collezionato due rifiuti da Apple, insegnato a uno script di build a dire di no, scoperto che una Lambo era in realtà una bandiera a scacchi e sistemato un bug che Google ha ignorato e Apple no.
Questa è la storia completa, ricostruita dalle nostre note di rilascio, dai nostri runbook e dai messaggi di commit scritti di fretta. È lunga, un po' impertinente, e se stai per lanciare un'app tua contiene consigli veri. Prendi un caffè, o un piccolo prestito sui tuoi asset.
La versione breve, per date
- La versione 1.2.8 va online su Google Play. L'annuncio segue quella sera, in sei lingue.
- iOS raggiunge Android alla 1.2.8, dopo che abbiamo salvato una schermata di avvio che nessuno riusciva a leggere.
- La prima richiesta arriva ad Apple senza i suoi acquisti in-app. La seconda parte con tutti e 39. Prima risposta di Apple: Information Needed.
- Una pulizia di primavera dei marchi, e la build 31 per rimettere nell'app una chiave mancante.
- Secondo rifiuto, da un iPad: entrambi i pulsanti di accesso mostrano un errore e il revisore non trova il Negozio.
- Il colpevole è un solo parametro mancante. Android lo perdonava in silenzio da sempre.
- Build 34, firmata come si deve. Accedi con Apple finalmente funziona.
- La versione 1.2.9 viene distribuita su Google Play.
- I giocatori ci dicono che i telefoni si scaldano troppo. Facciamo smettere il gioco di farlo.
- Cinque versioni in un solo weekend, dalla 1.2.10 alla 1.3.1.
- Il link dell'App Store approda sulla nostra homepage. Tu sei qui.
Pre-IPO: un gioco da browser con qualche problema di impegno
Moneyflow è nato come gioco da browser. Scegli un personaggio con un lavoro vero, bollette vere e uno stipendio vero, tiri i dadi e provi a costruire abbastanza reddito passivo da lasciarti alle spalle la routine 9-17 e permetterti due sogni. Riuscirci è l'unico modo per vincere, sia in single player sia in multiplayer. Ci sono anche un matrimonio, un accordo prematrimoniale e un divorzio, e ci arriveremo.
Poi abbiamo deciso che il suo posto era sul tuo telefono e abbiamo scoperto che un app store è tutto un altro gioco. Niente dadi, niente carte, solo moduli, questionari e un banco che vince sempre. La burocrazia di Google Play l'avevamo già raccontata in Come abbiamo pubblicato Moneyflow sul Google Play Store. Questo è il seguito: cosa è successo dopo, su entrambi gli store, e cosa diremmo a noi stessi se potessimo tornare indietro.
Primo round: Google Play dice sì (dopo aver chiesto tutto)
Google Play è partito per primo e si è comportato come una banca quando chiedi un mutuo: cordiale, scrupolosa e ansiosa di vedere ogni documento che possiedi. Il modulo sulla sicurezza dei dati, la classificazione dei contenuti, la pagina per eliminare l'account, il periodo di test chiuso. Il post precedente racconta tutto questo, quindi qui ti diciamo cosa abbiamo cambiato una volta pronta la prima scheda.
Abbiamo smesso di cliccare. Tutti i 39 acquisti in-app (18 pedine, 14 skin per i dadi, 4 temi del tabellone e 3 pacchetti, tutti rigorosamente estetici) sono stati creati con uno script invece che a mano, con RevenueCat in mezzo tra l'app e i due store in modo che la logica degli acquisti sia identica ovunque. Anche i rilasci passano dall'Android Publisher API. Uno script apre una modifica, carica il bundle, assegna il canale e conferma, e se un passaggio fallisce elimina la modifica, così un'esecuzione andata male non lascia traccia. È la cosa più ordinata di tutta questa storia.
Play ha le sue manie. Rifiuta qualsiasi numero di build che abbia mai visto, compresi quelli caricati e mai rilasciati, quindi i numeri di build si comportano come i contanti nel gioco: ne spendi uno e se n'è andato, che tu abbia ottenuto qualcosa o no. Abbiamo anche due account di servizio e uno solo può pubblicare. L'altro può aprire una modifica, caricare un bundle intero, assegnarlo a un canale e poi beccarsi un 403 all'ultimo passaggio. Tutta quella fatica, e un «no» secco quando la torta è già in tavola.
Il 7 settembre la versione 1.2.8 è andata online. Quella sera abbiamo pubblicato l'annuncio in sei lingue, perché se ti entusiasmi in pubblico tanto vale farlo anche in tedesco, spagnolo, francese, portoghese e cinese.
Google Play ha detto sì. Apple aveva altri piani.
Secondo round: Apple si fa desiderare
Mentre Android correva avanti, iOS era ancora fermo alla versione 1.2.1 in App Store Connect. Il 10 settembre ha recuperato: versione 1.2.8, build 30, dieci nuovi screenshot e testo promozionale in otto lingue. Prima di tutto questo c'era la piccola questione dell'accordo Paid Apps. Apple non ti lascia creare nemmeno un acquisto in-app finché non l'hai accettato e non hai inviato i tuoi dati bancari e fiscali. Fino ad allora ogni tentativo restituisce un 409, che è il modo di Apple per dire «non ancora, e non finché non avrò visto le tue carte».
Poi abbiamo automatizzato tutti i 39 acquisti con l'API di App Store Connect. Al primo giro 24 sono falliti con
UNEXPECTED_ERROR. L'abbiamo rilanciato ed è andato tutto liscio. Il runbook ora contiene la frase
più zen di tutto il repository: rilancia, non fare debug.
La schermata di avvio che non c'era
Su un telefono vero la nostra schermata di avvio era illeggibile, per due motivi diversi. Lo storyboard riempiva lo schermo con un'immagine quadrata, quindi su un telefono alto veniva scalata finché l'altezza combaciava e tagliava circa il 54% della larghezza. Il logotipo e tutta la cornice decorativa finivano fuori dal bordo. Peggio ancora, le versioni in modalità scura erano solo la figura nuda al 5% circa di una tela color crema, cioè un logo invisibile su ogni telefono impostato sul tema scuro.
Siamo passati a far stare l'immagine dentro lo schermo, sul suo sfondo crema, abbiamo eliminato le varianti scure e inserito il logo completo all'88% della tela. La cartella delle immagini è passata da 55 MB a 9,1 MB. Un primo impatto non dovrebbe pesare 55 MB.
Come inviare un'app il cui Negozio non vende niente
Ecco una trappola con un ottimo mimetismo. Gli acquisti in-app sono elementi di revisione separati e Apple non ne rivede uno che non sia nella tua richiesta. La prima volta che abbiamo inviato, l'app è andata in revisione con tutti i 39 prodotti lasciati a «Ready to Submit». Se fosse stata approvata, avremmo pubblicato un gioco sul comprare e vendere il cui Negozio non poteva vendere niente. Ritirarla ci è costato un Remove from Review e il nostro posto in coda.
La trappola è che Apple ti lascia avviare una bozza di richiesta dalla pagina degli acquisti in-app che non potrà mai essere inviata. Senza una versione dell'app al suo interno, ogni prodotto non riesce a essere aggiunto con «Unable to Add for Review», e l'invio della bozza fallisce con «add an app version for the selected platform». Nessuno dei due messaggi ti dice che la versione va messa per prima. Ovviamente abbiamo provato a risolvere con uno script. L'API non ha affatto una relazione tra acquisti in-app e richiesta. Abbiamo provato tre grafie prima di accettare che questa porta si apre solo dall'interfaccia, e il runbook ora lo dice, con garbo, perché nessuno ci riprovi.
Il numero che alla fine ci ha reso felici è stato quaranta: una versione dell'app, più trentanove cose da comprare per essa.
Rifiuto numero uno: Apple vuole conoscerti meglio
L'11 settembre Apple ha risposto. L'oggetto era Guideline 2.1, Information Needed. Non era un bug, un crash o una violazione. Apple non segnalava alcun difetto. Era il questionario che Apple manda agli account con poca storia di revisioni, e arrivava con la richiesta di una registrazione dello schermo. Più che un rifiuto, pensalo come una verifica dei precedenti.
L'elenco aveva sette punti: una registrazione dello schermo, a cosa serve l'app e per chi, come entrare e provare tutto, quali servizi esterni usa, se qualcosa cambia a seconda della regione, se è regolamentata o costruita su materiale di altri, e come funzionano gli acquisti. Erano domande ragionevoli, nel modo in cui sono ragionevoli le domande di un primo appuntamento. Il Resolution Center limita una risposta a 4.000 caratteri e la nostra ne contava 3.917, che è la cosa più lunga che abbiamo mai detto a qualcuno appena conosciuto.
Poi la registrazione. Apple voleva il flusso vero a velocità vera su un telefono vero: un avvio a freddo, una partita in single player, il Negozio con la sua schermata di acquisto, la registrazione, l'accesso, una sala multiplayer e di nuovo l'eliminazione dell'account. Quattro minuti di video da iPhone a 60 fotogrammi al secondo pesano circa 240 MB, troppo per allegarli, quindi ffmpeg li ha compressi sotto i 10 MB con l'interfaccia ancora leggibile. Abbiamo scritto tutta la scaletta delle riprese, perché se questo progetto ci ha insegnato una cosa è che dimenticheremo come abbiamo fatto qualsiasi cosa.
Le risposte sono andate in due posti: la risposta nel Resolution Center e le note di revisione nella scheda dell'app, così ogni invio futuro arriva con le domande già risposte. I revisori seguono quelle note alla lettera. Scrivile per qualcuno che non ha mai visto la tua app, ha quaranta secondi e ha in mano un iPad. Tutte e tre le cose si riveleranno vere.
Mentre facevamo le prove è saltato fuori un altro dettaglio. L'eliminazione di un account è rimasta una volta bloccata su «Eliminazione...» e poi ha funzionato al secondo tentativo. Sospettiamo che il server si fosse appisolato, cosa che per un revisore somiglia in tutto e per tutto a un pulsante rotto. Tieni sveglio il tuo server quando il revisore è in città.
La pulizia di primavera dei marchi
Visto che Apple aveva la nostra attenzione, abbiamo passato in rassegna il gioco cercando tutto ciò che suonasse come un marchio. Le regole di Apple sui diritti dei contenuti ci hanno spinto a controllare, e quello che abbiamo trovato non ci è piaciuto. Due personaggi possedevano una «BMW Serie 3 (CPO)» e una «Honda Civic». I nomi non aggiungevano nulla al gioco e invitavano un sacco di guai, quindi ora sono una «Auto sportiva (CPO)» e una «Berlina base». La parola «monopoly» è uscita dalle nostre parole chiave dell'App Store.
Poi c'era la Lambo. Si è scoperto che la pedina Lambo non è mai stata un'auto. Per tutto il tempo era l'emoji di una bandiera a scacchi, quindi il vecchio nome prometteva una supercar e consegnava una bandiera da gara. Dal punto di vista finanziario è solo marketing. Ora si chiama Bandiera a scacchi. Il tema del tabellone chiamato The Tank è diventato Shark Pool.
L'unica regola che non abbiamo infranto.
Abbiamo cambiato i nomi visualizzati e lasciato ogni ID di prodotto esattamente dov'era. La pedina a scacchi è
ancora pawn.lambo sotto il cofano e lo sarà sempre. Quegli ID sono attivi su entrambi gli store,
legati ai prezzi e citati nei pacchetti, e rinominarne uno avrebbe tolto l'oggetto a tutti quelli che già lo
possiedono. I nomi sono testo. Gli ID sono contratti.
Rifiuto numero due: l'incidente dell'iPad
Il 17 settembre Apple è tornata e questa volta aveva trovato problemi veri. Il revisore usava un iPad Air (11 pollici, M3) con iPadOS 27, perché le app solo per iPhone girano su iPad in modalità di compatibilità e vengono riviste lì. I rilievi erano due. Guideline 2.1(a): toccando Continue with Apple o Continue with Google compariva un errore. Guideline 2.1(b): il revisore non riusciva a trovare i nostri 39 acquisti in-app.
Erano entrambi colpa nostra e, in un certo senso, era la stessa colpa.
Il bug
Il plugin di accesso vuole un oggetto options a ogni chiamata. Su iOS, se manca, il plugin respinge
con «Missing provider or options» prima che qualsiasi schermata di accesso abbia la possibilità di comparire. Su
Android lo stesso plugin ne presume tranquillamente uno vuoto e va avanti. Così la stessa riga di codice ha
superato la revisione di Google Play ed è crollata al primo tocco dal lato di Apple, su ogni iPhone oltre che su
ogni iPad.
Un solo parametro mancante. Android lo perdonava. iOS no.
Il Negozio che nessuno trovava
Gli acquisti erano un equivoco a parte che si incastrava alla perfezione con il primo. Le nostre vecchie note di revisione dicevano al revisore che per comprare serviva accedere. L'accesso era rotto. Così il revisore non è mai arrivato al Negozio, in un circolo chiuso costruito da noi.
È peggiorato guardando meglio, perché il Negozio aveva altri tre modi per deludere. Se l'elenco dei prodotti si caricava senza pacchetti, il Negozio lo considerava «niente in vendita» e nascondeva ogni articolo che non possedevi già. I tre pacchetti (5 pedine, Temi e Personaggio iniziale) erano nascosti da giugno. E un ospite che comprava il Pacchetto 5 pedine avrebbe pagato senza sbloccare nulla, perché il nostro server espandeva i pacchetti nei loro articoli solo per i giocatori con un account. Un ospite, ovviamente, è esattamente ciò che è un revisore. Prendere i soldi a qualcuno e consegnargli una scatola vuota è un'ottima lezione di finanza. Solo che non era una lezione che volevamo impartire.
L'elenco delle correzioni, per la cronaca. Passare il parametro. Far agganciare entrambe le schermate di accesso alla finestra attiva dell'app su iPad, perché il plugin si ancorava alla prima finestra e su iPadOS non sempre è quella visibile. Insegnare al Negozio che zero prodotti caricati significa «non ancora caricato» e non «vuoto». Riportare i pacchetti. Insegnare all'app a espandere i pacchetti per gli ospiti. E riscrivere le note di revisione per dire, a parole semplici, che per comprare non serve accedere e che ecco il percorso esatto per arrivare al Negozio.
Il risultato è stato la 1.2.9. Le sue note di rilascio si aprono con le due frasi che ci sono costate di più: «Correzioni all'accesso: Continua con Google mostra il selettore di account su un tocco deliberato e l'accesso nativo non dà più errore. Il Negozio elenca sempre i suoi articoli, anche prima che i prezzi si carichino.» Due frasi, dieci giorni della nostra vita.
Build 32 e 33: quelle di cui non parliamo
Penseresti che bastasse rilasciare la correzione. L'abbiamo fatto, due volte, ed era sbagliata entrambe le
volte. Sulle build 32 e 33 di TestFlight l'accesso con Google funzionava, ma Accedi con Apple, il pulsante di
Apple nel programma di test di Apple, falliva con AuthorizationError 1000.
La causa è ovvia a cose fatte e invisibile prima. Gli entitlement viaggiano nella firma del codice. Il nostro script di caricamento archiviava l'app con la firma disattivata e lasciava la firma al passaggio di esportazione, che può firmare un'app ma non può darle entitlement che non ha mai avuto. L'entitlement di Accedi con Apple non è mai arrivato nella build. Detto in gergo da sviluppatori, l'app era uscita di casa senza pantaloni.
Ora lo script di caricamento firma al momento dell'archiviazione e rifiuta di caricare qualsiasi archivio la cui firma non contenga l'entitlement. Abbiamo costruito un buttafuori. Controlla i documenti. Le build 32 e 33 sono morte e la build 34, quella vestita come si deve, è quella che abbiamo rimandato ad Apple.
Poi Apple ha detto sì.
Qui scotta
Il 24 settembre i giocatori ci avevano detto che i telefoni si scaldavano. iPhone 15, iPhone 16 Pro Max e anche la versione web un po' tiepida. Ci piacerebbe dire che era il puro sex appeal dell'interesse composto. Era un timer.
Il gioco incrementava un contatore una volta al secondo, in ogni modalità, e a ogni tick ridisegnava l'intero gioco: il tabellone, ogni casella, ogni pannello. Per sempre. Nel frattempo le pedine animate si ridisegnavano fino a 120 volte al secondo sui telefoni con schermi veloci, per disegnare un'animazione a 30 fotogrammi al secondo. La sfocatura a schermo intero dietro ogni carta veniva ricalcolata a ogni fotogramma perché la pedina continuava a muoversi lì sotto. E i bagliori che facevano sembrare vivo il tabellone animavano le ombre dei riquadri, il che forza un ridisegno a ogni fotogramma.
Le abbiamo sistemate tutte e quattro. Il contatore è diventato un unico timeout. Le pedine disegnano solo fotogrammi interi e si fermano quando sono fuori schermo, con il movimento ridotto o coperte da una carta. I bagliori e gli anelli animano opacità e posizione invece delle ombre, e pulsano tre volte e poi riposano. Il lavoro a vuoto sul tabellone è sceso da 624 ms a 15 ms in dieci secondi di test senza interfaccia. Con una carta aperta e la pedina Drago sul tabellone è sceso da 1.188 ms a 11 ms. Le nostre animazioni ora mostrano più autocontrollo di quanto ne abbiamo mostrato in qualsiasi altro punto di questo progetto.
È uscita come 1.2.10, titolo «Telefoni più freschi», insieme a una regola dei licenziamenti più giusta. Quando vieni licenziato si ferma solo il tuo stipendio. Il reddito extra continua a pagare e le bollette restano da pagare. Essere licenziati deve far male. Non deve cancellare il tuo secondo lavoro.
Il registro: tutte le note di rilascio, lette una dopo l'altra
Teniamo le note di rilascio in un unico file, lo stesso che alimenta entrambi gli store. Lette in ordine formano uno strano tipo di diario, quindi eccolo con il sottotesto aggiunto. Le date sono quelle dei commit. Il file salta dalla 1.0.1 direttamente alla 1.2.6, quindi tutto ciò che è successo nel mezzo è successo senza un diario. Ogni numero di versione qui sotto rimanda al suo post.
1.0.0
Prima versione di Moneyflow. Costruisci il tuo impero finanziario tra immobili, azioni e attività. Lascia alle spalle la routine 9-17, raggiungi la Fast Track e insegui i tuoi sogni.
Sincera, breve e un po' terrorizzata. Guarda quanto era piccola.
1.0.1
Google Play Gli acquisti dal web sono ora disponibili su playmoneyflow.com. Miglioramenti di stabilità e di usabilità ovunque.
App Store Miglioramenti di stabilità e prestazioni. Diverse correzioni di bug nel pannello del prospetto finanziario e nelle animazioni dei dadi.
Stessa versione, due serie di note. Gli store hanno idee diverse su cosa si può dire alle persone, quindi ne teniamo una serie per ciascuno e cerchiamo di non confonderle.
1.2.6
Arrivano le tasse: imposta sul reddito sul tuo stipendio, 15% sul reddito extra, 15% di imposta sulle plusvalenze sulle vendite in guadagno. I personaggi ora guadagnano veri stipendi americani del 2025. Gli affitti e i rendimenti delle attività seguono l'economia — magri in recessione, generosi nel boom.
Arriva il fisco. Nessuno l'aveva chiesto e tutti ne avevano bisogno. Ogni rendimento nel gioco ora si giudica al netto delle tasse, perché è l'unico rendimento che conta.
1.2.7
Tratta su affari, offerte e proposte di prestito: un testa o croce 50/50, il 20% meglio o il 20% peggio. Scegli quale immobile vendere in un'Asta al rialzo e quali asset finiscono in un divorzio — oppure firma un Accordo prematrimoniale.
Il tira e molla nella sua prima forma innocente. È anche la prima apparizione dell'Accordo prematrimoniale, il che dice a cosa pensavamo.
1.2.8 7 set
Tratta due volte: negozia, poi rinegozia — ma l'altra parte può andarsene (10%, poi 15%). Le carte ora si adattano alla tua vita: niente divorzio prima del matrimonio, niente vendita di azioni senza azioni. Il divorzio divide il tuo patrimonio netto e il tuo ex può farsi carico di prestiti.
Quella romantica. Chiedi due volte e si offendono. Fino a questa versione il mazzo poteva darti un divorzio prima di esserti sposato, che è più caotico di una cappella di Las Vegas. È anche la versione che ci ha portati alla porta di Apple.
1.2.9 22 set
Correzioni all'accesso: Continua con Google mostra il selettore di account su un tocco deliberato e l'accesso nativo non dà più errore. Il Negozio elenca sempre i suoi articoli, anche prima che i prezzi si carichino.
Scritta sotto costrizione, da due rifiuti e da un parametro mancante.
1.2.10 26 set
Telefoni più freschi: il gioco non tiene più il tuo dispositivo sotto sforzo mentre giochi. Le animazioni a riposo pulsano alcune volte e poi si fermano, e il tabellone smette di ridisegnarsi ogni secondo. I licenziamenti sono più giusti: si ferma solo il tuo stipendio, il reddito extra continua a pagare e le spese restano dovute nei giorni di paga saltati.
Quella in cui abbiamo smesso di far venire la febbre al tuo telefono.
1.2.11 26 set
Novità nel menu Compra: un appartamento in città, una tintoria e un motel sulla statale. … Ogni carta ha la sua illustrazione e le tue scelte stanno proprio sotto la carta. Invita gli amici in una stanza multiplayer privata.
La versione più affollata e una delle più brevi, perché la 1.2.12 è arrivata la sera stessa. Le stanze private sono il titolo per chiunque abbia degli amici: un host, da due a quattro posti e un codice di sei caratteri.
1.2.12 26 set
Ti mancano i contanti? Ora scegli come coprire e vedi quanto sei vicino alla bancarotta: prestiti d'emergenza di fila, margine di indebitamento rimasto e giorni di paga mancanti. I prestiti d'emergenza ora costano meno di una carta di credito.
La bancarotta ora arriva con un conto alla rovescia, che è il modo più cordiale che conosciamo per insegnare la paura. I prestiti d'emergenza ora costano meno della carta di credito, che è più di quanto farà per te la vita vera. Corretto anche: i dadi si tiravano da soli dopo che chiudevi una carta, il che era o un bug o la nostra funzione più passivo-aggressiva.
1.3.0 27 set
24 nuove carte, da un motel sulla statale e un'azienda SaaS fino a La grande scommessa, più la rarità: ora compaiono carte non comuni e rare. Nascondi una carta per guardare il tabellone, poi tocca Torna alla carta. Licenziamenti ed emergenze non si possono più ignorare.
Ventiquattro nuove carte, un sistema di rarità e, senza troppo clamore, il cambiamento più importante del mese: le carte ora arrivano dal server. Ne parliamo meglio più sotto.
1.3.1 27 set
Prendi in prestito sui tuoi asset: qualsiasi immobile, attività o azione senza prestiti sopra può ora garantire un prestito più economico, a soli interessi, al tasso di mercato più 0,5%.
Di nuovo la leva. È un gioco di finanza e non riusciamo a farne a meno. È arrivata dopo la 1.3.0, più tardi lo stesso giorno.
1.4.0 1 ott
Nuovi bot Pro pianificano ogni mossa e leggono l'economia, e ora ogni bot può comprare sogni, vincere e prendere prestiti garantiti dai propri beni. L'economia pesa di più: i tassi d'interesse seguono il ciclo boom-crisi, le recessioni riducono le tue tasse, e gli affitti sui tuoi beni salgono nel boom e scendono in recessione.
Quella in cui i bot hanno imparato a vincere. Finora nessuno ci riusciva, perché nessuno aveva mai comprato un sogno. Sono arrivati i bot Pro, l'economia ha iniziato a muovere tassi, tasse e affitti secondo il suo umore, e l'app ha imparato altre otto lingue.
1.4.1 1 ott
… I mutui ora si rimborsano in 25 anni, i prestiti aziendali in 15 e quelli auto in 6; i prestiti bancari sono a soli interessi e puoi indebitarti finché le rate arrivano al 67% del reddito. …
I mutui hanno finalmente una data di scadenza. Il lavoro sui prestiti è arrivato dopo che la 1.4.0 era stata chiusa, quindi è uscito come 1.4.1 la stessa sera, insieme a una scheda di novità nella schermata iniziale.
1.4.2 1 ott
Un solo bug, corretto meno di venti minuti dopo la 1.4.1: il pulsante Prestito ponte ora propone l'importo che la banca approverà davvero. Non ha note di store tutte sue.
Il weekend delle cinque versioni.
Sabato 26 settembre
- 14:241.2.10Telefoni più freschi, licenziamenti più giusti
- 16:271.2.11Schede, durata dei prestiti, illustrazioni delle carte
- 19:401.2.12Il conto alla rovescia della bancarotta
Domenica 27 settembre
- 09:311.3.024 nuove carte, rarità, contenuti da remoto
- 13:191.3.1Prendi in prestito sui tuoi asset
Orari dei commit, ora di Sofia. Non ogni versione è arrivata su ogni store con il proprio numero: su Google Play la 1.2.12 è andata in produzione al posto della 1.2.11, e su iOS è stata inviata al suo posto. Nello stesso weekend il mazzo ha guadagnato 130 illustrazioni, disegnate nel codice.
Il miglior aggiornamento è quello che nessuno deve approvare
Alla fine di quel weekend avevamo imparato una cosa utile. La parte più lenta del rilascio di un aggiornamento non è costruirlo. È aspettare che uno store lo guardi. Così la 1.3.0 ha fatto qualcosa di un po' diverso: ha insegnato all'app a ricevere consegne.
Le nuove carte ora arrivano dai nostri server, quindi la maggior parte dei nuovi contenuti non richiede più un aggiornamento dell'app. Ci è voluto un rilascio dell'app per installare il meccanismo. Dopo, le nuove carte sono a un deploy di distanza, traduzioni e illustrazioni comprese.
Il Negozio funziona allo stesso modo. Apple rivede un nuovo acquisto in-app da solo, senza una nuova build, quindi anche una nuova pedina non richiede più una nuova versione.
La parte intelligente è la rete di sicurezza. A nessuno viene mai data una carta che la sua app non sa giocare, quindi versioni vecchie e nuove possono condividere un tavolo senza problemi. Quando inventiamo una meccanica davvero nuova, torniamo comunque in coda come tutti gli altri.
Lo stesso rilascio ha portato la rarità, cioè alcune carte compaiono molto meno spesso di altre. Quanto meno spesso è un nostro segreto, ma le più rare escono più o meno quanto una revisione dell'App Store che passa al primo colpo. A noi è uscita una comune.
Il tabellone dei punteggi
Per gli amanti dei fogli di calcolo.
- 10numeri di build usati in 20 giorni, dal 30 al 40
- 39acquisti in-app, tutti rigorosamente estetici
- 2rifiuti da Apple, più un invio che abbiamo ritirato noi
- 3,917caratteri nella nostra risposta, su 4.000 consentiti
- 24 su 39acquisti non creati al primo giro dello script. Il secondo giro è andato liscio
- 2build morte, la 32 e la 33, uscite senza i loro entitlement
- 5versioni committate in un solo weekend
- 624 → 15millisecondi di lavoro a vuoto ogni dieci secondi, prima e dopo aver raffreddato il gioco
Cosa diremmo a noi stessi all'inizio
Quella che era una serata di clic ora è un aumento di versione, una nota e una manciata di comandi per ogni store. L'attesa è l'unica parte che non possiamo automatizzare. Tutto il resto è finito in questo elenco.
- Metti la versione nella richiesta prima degli acquisti in-app. Apple ti lascia farlo al contrario e poi si rifiuta di dirti perché.
- Scrivi le note di revisione per un revisore che non ha mai visto l'app. Ha quaranta secondi e un iPad, e segue le note alla lettera. Dagli il percorso esatto per arrivare a tutto.
- Non mettere mai un accesso davanti al tuo Negozio. Anche gli ospiti hanno un portafoglio, e i revisori sono ospiti.
- Firma il tuo archivio, poi fai in modo che lo script rifiuti di caricarne uno senza i suoi entitlement. Costruisciti un buttafuori.
- Fai urlare le chiavi mancanti. La build 30 è uscita senza la sua chiave dei pagamenti e nessuno si è lamentato a voce alta, quindi il Negozio era semplicemente vuoto. Un errore silenzioso è un rifiuto a scoppio ritardato.
- Testa su entrambe le piattaforme anche quando il codice è condiviso. Android ha perdonato ciò che iOS ha rifiutato, e una riga di codice aveva due personalità diverse.
- Rinomina i prodotti, mai i loro ID. I nomi sono testo. Gli ID sono contratti.
- Automatizza, rendilo ripetibile, scrivilo. L'API di Apple a volte ha semplicemente un momento no, quindi rilancia prima di fare debug. I nostri runbook esistono perché abbiamo dimenticato tutto due volte.
- Tieni note di rilascio separate quando gli store hanno regole separate. Stessa versione, frasi diverse.
- Rilascia i contenuti dal server e tieni la coda dello store per le nuove meccaniche. Il miglior aggiornamento è quello che nessuno deve approvare.
- Testa sull'hardware rovente che i tuoi giocatori possiedono davvero. Il simulatore non è mai arrossito. Un iPhone 16 Pro Max sì.
- Tieni sveglio il server mentre il revisore è in città. Un server addormentato somiglia in tutto e per tutto a un pulsante rotto.
Dai, facci fare un giro
Moneyflow è gratis su App Store, gratis su Google Play e gratis in qualsiasi browser. Niente pubblicità, e non serve un account per iniziare. Tutto ciò che c'è nel Negozio è estetico. Niente di ciò che contiene ti aiuta a vincere, il che in un gioco sui soldi è o molto di principio o un pessimo affare.
E ora? Altre carte, che ormai arrivano dal server, più modi di giocare con gli amici e, se l'universo è gentile, una settimana intera senza un numero di versione.
Ci vediamo sul tabellone.