Pagine

2013-12-15

Test della ricevuta e Mavericks

È cosa normale che durante lo sviluppo di una nuova versione si facciano test intermedi sulla ricevuta; dato che la versione deve essere la stessa definita in iTunesConnect, mi succede sempre di fare questi primi test utilizzando la versione presente in quel momento sullo Store (una app non può restare un tempo indefinito nello stato Waiting for upload e all'inizio non si ha ancora una stima precisa di quando si finirà lo sviluppo).
Per cui, si effettua il solito procedimento per scaricare la ricevuta dall'AppStore per l'utente di test, fino ad arrivare a quando siamo molto vicini al rilascio della versione finale.

In quel momento, si entra in iTunesConnect, si crea la nuova versione e la si porta nello stato di attesa dei binary. Poi si modifica la versione in Xcode, si esporta l'eseguibile e si esce dall'utenza normale dell'AppStore.

Bene. Prima dell'avvento di Mavericks, il procedimento andava a buon fine senza problemi: all'avvio dell'app c'era un attimo di attesa, poi compariva la richiesta di utente/password; una volta forniti, la ricevuta era scaricata, l'app veniva riavviata, il check della receipt effettuato e, a scanso di bachi inattesi, alla fine si otteneva all'interno del bundle l'attesa cartella _MASReceipt.
La stessa cosa dovrebbe succedere con Mavericks.

Invece, dopo aver cambiato la versione in Xcode e aggiunta su iTunesConnect, il lancio dell'app esportata terminava con un bel dialogo con cui il Finder mi avvisava che l'app era danneggiata e che non poteva essere lanciata (se non nel cestino...).
Dato che la procedura seguita era la stessa, l'unico modo era di andare in debug e osservare cosa accidenti stava succedendo. Risposta: la versione dell'app era diversa da quella registrata nella receipt! Cioè, la ricevuta riguardava la versione vecchia, mentre l'Info.plist conteneva la nuova!
Ma in iTunesConnect la versione era proprio la nuova!

Il caso ha voluto che il giorno successivo prevedessi di non usare il Mac: invece del solito Stop ho dato il comando Spegni. Quando, due giorni dopo, l'ho riacceso, il problema era scomparso: la ricevuta veniva scaricata e la versione era quella giusta!

Dopo qualche giro sulla rete e dopo aver fatto una prova simile su un'altra app, sono arrivato alla soluzione: senza dire nulla (o per lo meno, io non ho trovato indicazioni), Apple ha aggiunto in Mavericks la possibilità di tenere in cache una ricevuta e di riutilizzarla se la stessa applicazione la richiede (fino a quando questa cache è disponibile). Di solito questa è una cosa buona, poiché si evita di fare una nuova richiesta, una nuova attesa e un nuovo download. In questo caso invece crea questo problema.

La soluzione (oltre al riavvio, ma è esagerato!) è di killare lo StoreAgent:

$ killall -KILL storeagent

e dopo mettere l'app nel cestino e svuotarlo. A questo punto, esportiamo una nuova copia dell'app da Xcode, lanciamola, lo StoreAgent viene rilanciato da zero, forniamo utente test/password e... magicamente tutto torna a posto!

Nessun commento:

Posta un commento