Pubblicazione di app Xamarin.iOS nell'App Store

Per pubblicare un'app nell'App Store è necessario che lo sviluppatore dell'app invii prima l'app con screenshot, descrizione, icone e altre informazioni ad Apple per la revisione. Dopo l'approvazione, Apple inserisce l'app nell'App Store dove gli utenti possono acquistarla e installarla direttamente dai propri dispositivi iOS.

Questa guida descrive i passaggi da eseguire per preparare un'app per l'App Store e inviarla ad Apple per la revisione. Nello specifico, la guida tratta gli argomenti seguenti:

  • Linee guida di revisione dell'App Store
  • Impostazione di un ID app e degli entitlement
  • Offerta di un'icona App Store e delle icone di app
  • Configurazione di un profilo di provisioning dell'App Store
  • Aggiornamento della configurazione della build di versione
  • Configurazione dell'app in iTunes Connect
  • Creazione dell'app e invio ad Apple

Importante

Apple ha indicato che a partire da marzo 2019 tutte le app e gli aggiornamenti inviati all'App Store devono essere stati compilati con iOS 12.1 SDK o versioni successive, disponibili in Xcode 10.1 o versioni successive. Le app devono anche supportare iPhone Xs e le dimensioni dello schermo 12,9" di iPad Pro.

Linee guida dell'App Store

Prima di inviare un'app per la pubblicazione nell'App Store, assicurarsi che soddisfi gli standard definiti in App Store Review Guidelines (Linee guida di revisione dell'App Store). Quando si invia un'app all'App Store, Apple esegue una revisione dell'app per verificare che soddisfi i requisiti. Se l'app non soddisfa i requisiti, Apple rifiuterà l'app e sarà necessario risolvere i problemi segnalati e reinviarla. Per questa ragione, è consigliabile conoscere le linee guida il prima possibile durante il processo di sviluppo.

Di seguito sono specificati un paio di aspetti da verificare prima di inviare un'app:

  1. Assicurarsi che la descrizione dell'app corrisponda alla relativa funzionalità.
  2. Verificare che nell'app non si verifichino arresti anomali in condizioni di normale utilizzo, inclusi tutti i dispositivi iOS supportati.

Esaminare anche le risorse correlate all'App Store offerte da Apple.

Impostare l'ID app e gli entitlement

Ogni app iOS ha un ID app univoco a cui è associata una serie di servizi di applicazione denominati entitlement. Gli entitlement consentono alle app di eseguire diverse operazioni, ad esempio ricevere le notifiche push, accedere a funzioni iOS come HealthKit e molto altro ancora.

Per creare un ID app e selezionare gli entitlement necessari, visitare il portale Apple Developer e seguire questa procedura:

  1. Accedere al portale per sviluppatori Apple. Se non si ha già un ID Apple, creare prima un ID Apple.
  2. Passare alla sezione Certificati, ID e profili e quindi alla sezione Identificatori .
  3. Fare clic sul + pulsante accanto all'intestazione Identificatori nella parte superiore della pagina.
  4. Selezionare ID app e fare clic su Continua.
  5. Selezionare App e quindi fare clic su Continua.
  6. Immettere una descrizione e un ID bundle per la nuova applicazione e selezionare tutte le funzionalità necessarie per l'applicazione Xamarin.iOS. I servizi app sono descritti in dettaglio nella guida Uso delle funzionalità in Xamarin.iOS. Al termine delle selezioni, fare clic su Continua.
  7. Fare clic sul pulsante Registra per completare il processo di creazione del nuovo ID app.

Durante la definizione dell'ID app, oltre a selezionare e configurare i servizi dell'applicazione richiesti, è necessario configurare l'ID app e gli entitlement nel progetto Xamarin.iOS modificando i file Info.plist e Entitlements.plist. Per altre informazioni, vedere la guida Uso degli entitlement in Xamarin.iOS che descrive come creare il file Entitlements.plist e il significato delle diverse impostazioni degli entitlement in esso contenute.

Includere un'icona dell'App Store

Quando si invia un'app ad Apple, assicurarsi che includa un catalogo di asset che contiene un'icona dell'App Store. Per informazioni su come eseguire questa operazione, vedere la guida Icone dell'App Store in Xamarin.iOS.

Impostare le icone delle app e le schermate di avvio

Affinché Apple renda disponibile un'app iOS nell'App Store, è necessario che l'app disponga delle icone e delle schermate di avvio appropriate per tutti i dispositivi iOS in cui può essere eseguita. Per altre informazioni sull'impostazione delle icone dell'app e delle schermate di avvio, leggere le guide seguenti:

Creare e installare un profilo di provisioning dell'App Store

iOS usa i profili di provisioning per gestire la distribuzione di una build dell'applicazione specifica. Si tratta di file che contengono informazioni sul certificato usato per firmare un'app, sull'ID app e sul percorso in cui è possibile installare l'app. Per lo sviluppo e la distribuzione ad hoc, il profilo di provisioning include anche l'elenco dei dispositivi consentiti in cui è possibile distribuire l'app. Per la distribuzione tramite l'App Store, sono invece incluse solo le informazioni che riguardano il certificato e l'ID app, in quanto l'App Store è l'unico meccanismo per la distribuzione pubblica.

Per creare e installare un profilo di provisioning dell'App Store, seguire questa procedura:

  1. Accedere al portale per sviluppatori Apple.
  2. Passare alla sezione Certificati, ID e profili e quindi alla sezione Profili .
  3. Fare clic sul + pulsante, selezionare Sviluppo di app iOS e App Store e fare clic su Continua.
  4. Selezionare l'App ID (ID app) dall'elenco e fare clic su Continue (Continua).
  5. Selezionare un certificato di firma e fare clic su Continue (Continua).
  6. Selezionare i dispositivi da includere in questo profilo e fare clic su Continua.
  7. Immettere un nome profilo di provisioning e fare clic su Genera per generare il profilo.
  8. Usare gli strumenti di gestione account Apple di Xamarin per scaricare il nuovo profilo di provisioning creato nel Mac. In Mac è anche possibile scaricare il profilo di provisioning direttamente dal portale Apple Developer e fare doppio clic su di esso per procedere all'installazione.

Per istruzioni dettagliate, vedere Creazione di un profilo di provisioning di sviluppo e Selezione di un profilo di distribuzione in un progetto Xamarin.iOS.

Aggiornare la configurazione della build di versione

I nuovi progetti Xamarin.iOS configurano automaticamente le configurazioni di compilazione debug e rilascio. Per configurare correttamente la build di versione, seguire questa procedura:

  1. Nel riquadro della soluzione aprire il file Info.plist all'interno del progetto iOS.

  2. Assicurarsi di essere in visualizzazione Applicazione . Questa opzione può essere impostata facendo clic sull'opzione nella barra di spostamento inferiore.

  3. Selezionare Provisioning manuale come opzione Firma. Salva e chiudi il file.

  4. Fare clic con il pulsante destro del mouse su Nome progetto nel riquadro della soluzione, selezionare Opzioni e passare alla scheda Compilazione iOS.

  5. Impostare Configurazione su Versione e Piattaforma su iPhone.

  6. Per compilare con un SDK per iOS specifico, selezionarlo dall'elenco Versione SDK. In alternativa, lasciare questo valore impostato su Predefinito.

  7. Il collegamento consente di ridurre le dimensioni complessive dell'applicazione rimuovendo il codice non utilizzato.

    • Nella maggior parte dei casi Comportamento del linker deve essere impostato sul valore predefinito Collega solo SDK del framework.
    • L'uso dell'opzione Don't Link può causare il rifiuto dell'app da parte di Apple a causa della presenza di API iOS non pubbliche in Xamarin.iOS collegate solo con l'opzione Link Framework SDK
    • Link All deve essere usato con attenzione perché rimuoverà il codice da tutti gli assembly del progetto, incluse le librerie di terze parti. Può rimuovere il codice che la libreria di terze parti può usare solo tramite reflection che il linker non è in grado di rilevare, perché esegue l'analisi statica del codice per determinare quale codice di libreria viene usato. Usare Collega tutto con attenzione perché potrebbe essere necessario mantenere manualmente alcune classi e/o metodi per evitare errori di runtime a causa di codice mancante.
    • Per altre informazioni, vedere la guida Collegamento di app Xamarin.iOS.
  8. Per iOS 11, selezionare una delle architetture del dispositivo che supporta ARM64. Per altre informazioni sulla compilazione per i dispositivi iOS a 64 bit, vedere la sezione Abilitazione delle build a 64 bit delle app Xamarin.iOS in Considerazioni relative alla piattaforma a 32/64 bit.

  9. È possibile usare il compilatore LLVM per generare codice più veloce e conciso. Questa opzione, tuttavia, aumenta i tempi di compilazione.

  10. Selezionare Ottimizza le immagini PNG per ridurre ulteriormente le dimensioni dell'applicazione.

  11. Il debug non deve essere abilitato in quanto aumenta inutilmente le dimensioni della build.

  12. In base alle esigenze dell'applicazione, è anche possibile modificare il tipo di Garbage Collection in uso e la configurazione per l'Internazionalizzazione.

    Dopo aver impostato le opzioni come descritto in precedenza, le impostazioni di compilazione dovrebbero avere un aspetto simile al seguente:

    Impostazioni di compilazione iOS

    Vedere anche la guida alla meccanica di compilazione iOS, che descrive ulteriormente le impostazioni di compilazione.

  13. Passare alla scheda Firma bundle iOS. Se le opzioni qui non sono modificabili, assicurarsi che il provisioning manuale sia selezionato nel file Info.plist .

  14. Verificare che l'opzione Configurazione sia impostata su Versione e Piattaforma sia impostata su iPhone.

  15. Impostare Identità di firma su Distribuzione (automatico).

  16. Per Profilo di provisioning, selezionare il profilo di provisioning dell'App Store creato in precedenza.

    Le opzioni di firma del bundle del progetto dovrebbero essere simili alle seguenti:

    Firma del bundle iOS

  17. Fare clic su OK per salvare le modifiche alle proprietà del progetto.

Configurare l'app in iTunes Connect

iTunes Connect comprende una serie di strumenti basati sul Web per la gestione delle applicazioni iOS nell'App Store. È necessario che l'applicazione Xamarin.iOS sia configurata correttamente in iTunes Connect prima di essere inviata ad Apple per la revisione e il rilascio nell'App Store.

Per informazioni su come eseguire questa operazione, vedere la guida Configurazione di un'app in iTunes Connect.

Compilare e inviare l'app

Con le impostazioni di compilazione configurate correttamente e iTunes Connect in attesa dell'invio, è possibile compilare l'app e inviarla ad Apple.

  1. In Visual Studio per Mac selezionare la configurazione della build Versione e un dispositivo (non un simulatore) per la compilazione.

    Configurazione della compilazione e selezione della piattaforma

  2. Scegliere Archivia per la pubblicazione dal menu Compila.

  3. Dopo aver creato l'archivio, verrà visualizzata la visualizzazione Archivi . Fare clic su Firma e distribuisci... per aprire la procedura guidata di pubblicazione.

    Screenshot del percorso del pulsante Firma e distribuzione nella visualizzazione Archivi.

    Nota

    Per impostazione predefinita la visualizzazione Archivi mostra solo gli archivi per la soluzione aperta. Per visualizzare tutte le soluzioni con archivi, selezionare la casella di controllo Mostra tutti gli archivi. È consigliabile conservare gli archivi precedenti per poter usare le informazioni sul debug in essi contenute per aggiungere, se necessario, simboli di debug nei report relativi agli arresti anomali del sistema.

  4. Selezionare il canale di distribuzione App Store. Fare clic su Avanti.

  5. Selezionare Carica come destinazione. Fare clic su Avanti.

  6. Nella finestra Profilo di provisioning selezionare l'identità di firma, l'app e il profilo di provisioning. Fare clic su Avanti.

    Screenshot della pagina della procedura guidata Profilo di provisioning che mostra un'identità di firma, un'app e una selezione del profilo di provisioning validi.

  7. Nella finestra Informazioni di connessione di App Store selezionare un nome utente ID Apple dal menu e immettere una password specifica dell'app. Fare clic su Avanti.

    Screenshot della pagina della procedura guidata Informazioni di connessione di App Store che mostra un nome utente id Apple selezionato.

  8. Verificare i dettagli del pacchetto e fare clic su Pubblica. Dopo aver selezionato un percorso per salvare il file con estensione ipa, la procedura guidata caricherà l'app in App Store Connect.

    Nota

    È possibile che Apple rifiuti le app con iTunesMetadata.plist incluso nel file con estensione ipa generando un errore simile al seguente:

    ERROR: ERROR ITMS-90047: "Disallowed paths ( "iTunesMetadata.plist" ) found at: Payload/iPhoneApp1.app"

    Per risolvere questo problema, vedere questo post nei forum di Xamarin.

Stato di iTunes Connect

Per visualizzare lo stato dell'invio dell'app, accedere a iTunes Connect e selezionare l'app. Lo stato iniziale dovrebbe essere Waiting For Review (In attesa di revisione), sebbene possa essere indicato temporaneamente Upload Received (Caricamento ricevuto) durante l'elaborazione.

In attesa di revisione

Suggerimenti

Personalizzare il percorso del file con estensione ipa

Una proprietà MSBuild, IpaPackageDir, consente di personalizzare il percorso di output del file con estensione ipa. Se IpaPackageDir è impostata su un percorso personalizzato, il file con estensione ipa verrà inserito nel percorso specificato anziché nella sottodirectory predefinita con timestamp. Può essere utile durante la creazione di compilazioni automatizzate che si basano su un percorso di directory specifico affinché funzionino correttamente, ad esempio nel caso di compilazioni di Integrazione continua (CI).

La nuova proprietà può essere usata in modi diversi. Ad esempio, per eseguire l'output del file con estensione ipa nella directory predefinita precedente (come in Xamarin.iOS 9.6 e versioni precedenti), è possibile impostare la proprietà IpaPackageDir su $(OutputPath) usando uno degli approcci seguenti. I due approcci sono compatibili con tutte le compilazioni di Xamarin.iOS basate sull'API unificata, incluse le compilazioni IDE e quelle da riga di comando che usano msbuild o mdtool:

  • La prima opzione consiste nell'impostare la proprietà IpaPackageDir in un elemento <PropertyGroup> di un file MSBuild. È ad esempio possibile aggiungere l'elemento <PropertyGroup> seguente alla fine del file con estensione csproj del progetto dell'app iOS, appena prima del tag </Project> di chiusura:

    <PropertyGroup>
      <IpaPackageDir>$(OutputPath)</IpaPackageDir>
    </PropertyGroup>
    
  • Per un approccio migliore, aggiungere <IpaPackageDir> alla fine dell'elemento <PropertyGroup> esistente che corrisponde alla configurazione usata per compilare il file con estensione ipa. Questa soluzione è preferibile perché prepara il progetto a essere compatibile in futuro con un'impostazione pianificata nella pagina delle proprietà del progetto Opzioni IPA iOS. Se si usa la configurazione Release|iPhone per la compilazione del file con estensione ipa, il gruppo di proprietà completo aggiornato sarà simile al seguente:

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone'">
       <Optimize>true</Optimize>
       <OutputPath>bin\iPhone\Release</OutputPath>
       <ErrorReport>prompt</ErrorReport>
       <WarningLevel>4</WarningLevel>
       <ConsolePause>false</ConsolePause>
       <CodesignKey>iPhone Developer</CodesignKey>
       <MtouchUseSGen>true</MtouchUseSGen>
       <MtouchUseRefCounting>true</MtouchUseRefCounting>
       <MtouchFloat32>true</MtouchFloat32>
       <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
       <MtouchLink>SdkOnly</MtouchLink>
       <MtouchArch>ARMv7, ARM64</MtouchArch>
       <MtouchHttpClientHandler>HttpClientHandler</MtouchHttpClientHandler>
       <MtouchTlsProvider>Default</MtouchTlsProvider>
       <BuildIpa>true</BuildIpa>
       <IpaPackageDir>$(OutputPath)</IpaPackageDir>
    </PropertyGroup>
    

Una tecnica alternativa per le compilazioni da riga di comando msbuild consiste nell'aggiungere un argomento della riga di comando /p: per impostare la proprietà IpaPackageDir. In questo caso si noti che msbuild non espande le espressioni $() passate nella riga di comando, quindi non è possibile usare la sintassi $(OutputPath). È invece necessario specificare un nome percorso completo.

msbuild /p:Configuration="Release" /p:Platform="iPhone" /p:ServerAddress="192.168.1.3" /p:ServerUser="macuser" /p:IpaPackageDir="%USERPROFILE%\Builds" /t:Build SingleViewIphone1.sln

O al seguente in Mac:

msbuild /p:Configuration="Release" /p:Platform="iPhone" /p:IpaPackageDir="$HOME/Builds" /t:Build SingleViewIphone1.sln

Dopo aver creato e archiviato la compilazione di distribuzione, è possibile inviare l'applicazione a iTunes Connect.

Riepilogo

Questo articolo ha descritto come configurare, compilare e inviare un'app iOS per il rilascio nell'App Store.