[xamarin] Pubblicare app iOS in beta su TestFlight da Visual Studio 2017 su Windows

Obiettivo: Pubblicare la beta di una app per iOS, sviluppata con C# e Xamarin su Visual Studio 2017 per Windows

Per molti sarà una banalità, ma ho trovato che la pubblicazione di app iOS da Windows (ok, capisco che me la sto proprio cercando) è una piccola avventura, a differenza di quando si lavora su Android. Anzitutto dobbiamo assicurarci di avere tutti gli ingredienti necessari per poter procedere. Questi comprendono:

Xamarin e Visual Studio 2017 su Windows (nel mio caso specifico Windows 10)

Un Mac con installati Visual Studio 2017 ed Xcode per poter compilare al app.

Application Loader 3.0 (scaricabile da qui) per poter caricare la app online sull’Apple Store.

Un account Apple Developer e uno su iTunes Connect.

Una volta preparata la nostra app e testata sulla macchina virtuale di Xcode, possiamo cominciare a pensare alla sua pubblicazione. Come ho accennato prima tutte le guide online in merito si riferiscono principalmente a Visual Studio 2017 con Xamarin già installati sul Mac, mentre io mi ostino per volerci lavorare da Windows.

Quello che voglio fare è distribuire la app in beta verso alcuni utenti registrati per TestFLight, in modo da poter effettuare un debugging realistico rispetto all’utilizzo degli utenti.

Per poterlo fare anzitutto devo aggiungere degli utenti su iTunes Connect.

Indirizzo: https://itunesconnect.apple.com/

Per farlo mi sposto nell’apposita sezione.

Una volta dentro, da Utenti di iTunes Connect premo sul tasto più e aggiungo un nuovo utente.

A questo punto posso inserire l’indirizzo email col quale ho registrato il mio iPhone sul quale voglio fare le prove, mettendo un nome e cognome come riferimento.

Adesso mi verrà chiesto di selezionare un ruolo per il mio utente.

Scegliendo il ruolo mi verrà detto quali saranno le sue possibilità di accesso, quello che mi interessa è che sia disponibile per TestFlight.

Fatto questo possiamo salvare e spostarci a configurare la parte di Apple Developer.

Indirizzo: https://developer.apple.com/

Anzitutto aggiungiamo il dispositivo sul quale vogliamo far agire l’utente. Spostiamoci su Devices > All (indirizzo: https://developer.apple.com/account/ios/device/) e clicchiamo sul tasto più per aggiungere un dispositivo. Ci verranno chiesti un nome descrittivo e un UDID. Per trovare l’UDID suggerisco la seguente guida.

A questo punto registriamo un identificatore per la nostra app, andando su Identifiers > App IDs (indirizzo: https://developer.apple.com/account/ios/identifier/bundle/create).

Il Bundle ID è quello che abbiamo stabilito nel file Info.plist alla seguente chiave:

Dove com.miodominio.NomeApp è il formato di dominio inverso, un po’ come succede anche su Android.

Una volta aggiunta la app, con le opportune configurazioni, aggiungiamo i certificati per la distribuzione.

Andiamo su Certificates > All e premiamo sul tasto più per aggiungerne uno.

Selezioniamo App Store and Ad Hoc e seguiamo la procedura guidata. Alla fine della procedura ci sarà dato un file di certificato da installare sul Mac dove abbiamo Xcode ed il resto.

NOTA: La medesima cosa si può fare anche da Xcode, andando su Preferenze > Account > Gestisci certificati e cliccando sul tasto aggiungi.

Ora spostiamoci a creare un Provisioning Profiles di distribuzione.

Per farlo andiamo su Provisioning Profiles > Distribution (indirizzo: https://developer.apple.com/account/ios/profile/production)

Clicchiamo sul tasto più per aggiungere un profilo e selezioniamo un profilo di distribuzione Ad Hoc.

Seguiamo le istruzioni. Alla fine ci verrà dato un file con estensione *.mobileprovision che dobbiamo mettere sul nostro Mac e cliccarci due volta sopra per installarlo. Apparentemente non succederà nulla, ma il profilo sarà stato installato.

Fatte tutte queste belle cose arriva l’avventura finale. Compilare la app da Visual Studio 2017 che gira su Windows.

Per poterlo fare correttamente è necessario apportare alcune modifiche.

Anzitutto apriamo Info.plist e assicuriamoci di aver impostato correttamente i parametri di compatibilità.

Assicuriamoci di aver impostato correttamente la lingua:

Ma soprattutto di aver inserito il parametro per il beta testing:

Adesso apriamo Entitlements.plist e assicuriamoci di inserire anche qui il medesimo parametro:

Spostiamoci sulle proprietà della nostra app e configuriamola nel modo seguente:

In questo modo l’esportazione avverrà nella cartella bin\iPhone\Ad-Hoc dentro la radice del progetto, dove verrà creato un file con estensione *.ipa.

Assicuriamoci anche che sia visibile l’identità giusta della firma ed il corretto profilo di provisioning. A tale proposito, qualora non fosse possibile vederli, consiglio di aprire e chiudere Visual Studio o lanciare una compilazione sul Mac collegato in rete.

Assicuriamoci anche di aver configurato la giusta impostazione di compilazione, che nel mio caso risulta così:

Se abbiamo fatto tutto come si deve troveremo nella suddetta cartella, bin\iPhone\Ad-Hoc, il nostro file *.ipa.

Spostiamolo sul nostro Mac e apriamo Application Loader.

Clicchiamo su Delivery Your App e poi su Choose. Scegliamo il file *.ipa da caricare e attendiamo la fine del caricamento.

Se tutto è andato bene la nostra app diventerà disponibile per il test agli utenti che abbiamo selezionato precedentemente.

Errori comuni

Di seguito riporto alcuni errori comuni che sono stati generati da Application Loader o inviati via email al momento dell’invio della app in testing:

  1. Missing beta entitlement – Your app does not include the beta-reports-active entitlement. If you intend to distribute this build via TestFlight for beta testing, please re-build this app with an App Store Distribution provisioning profile. Do not use ad-hoc profiles.
    SOLUZIONE: inserire <key>beta-reports-active</key> nei file Info.plist e Entitlement.plist come descritto precedentemente
  2. the bundle contains a key that is not included in the provisioning profile beta-reports-active
    SOLUZIONE: c’è un errore nel profilo di compilazione, assicurarsi che sia di Distribuzione, come detto prima; maggiori informazioni si trovano qui
  3. Your app does not include the beta-reports-active entitlement
    SOLUZIONE: vedere punto 1, stesso problema
  4. Errore Invalid architecture: ARMv7. 32-bit architectures are not supported when deployment target is 11 or later
    SOLUZIONE: questo è un errore di Visual Studio, per risolverlo è necessario configurare correttamente la Compilazione iOS nelle impostazioni del Progetto, come illustrato in precedenza, inoltre bisogna inserire UIRequiredDeviceCapabilities in Info.plist
  5. ipa file too large
    SOLUZIONE: in questo caso non dipende assolutamente dal file, ma può dipendere dai certificati (vedi all’inizio) oppure dalla velocità della connessione da cui facciamo l’upload; assicuriamoci che il profilo di Provisioning e i certificati siano installati sulla macchina con Xcode.

Rispondi

This site uses Akismet to reduce spam. Learn how your comment data is processed.