Aggiornamento di app iOS esistenti
Seguire questa procedura per aggiornare un'app Xamarin.iOS esistente per usare l'API unificata.
L'aggiornamento di un'app esistente per l'uso dell'API unificata richiede modifiche al file di progetto stesso, nonché agli spazi dei nomi e alle API usate nel codice dell'applicazione.
La strada a 64 bit
Le nuove API unificate sono necessarie per supportare architetture di dispositivi a 64 bit da un'applicazione per dispositivi mobili Xamarin.iOS. A partire dal 1° febbraio 2015 Apple richiede che tutti i nuovi invii di app all'iTunes App Store supportino architetture a 64 bit.
Xamarin offre strumenti sia per Visual Studio per Mac che per Visual Studio per automatizzare il processo di migrazione dall'API classica all'API unificata oppure è possibile convertire manualmente i file di progetto. Anche se l'uso degli strumenti automatici è altamente consigliato, questo articolo illustra entrambi i metodi.
Prima di iniziare...
Prima di aggiornare il codice esistente all'API unificata, è consigliabile eliminare tutti gli avvisi di compilazione. Molti avvisi nell'API classica diventeranno errori dopo la migrazione a Unified. Correggerli prima di iniziare è più semplice perché i messaggi del compilatore dall'API classica spesso forniscono suggerimenti su cosa aggiornare.
Aggiornamento automatico
Dopo aver risolto gli avvisi, selezionare un progetto iOS esistente in Visual Studio per Mac o Visual Studio e scegliere Esegui migrazione all'API unificata Xamarin.iOS dal menu Progetto. Ad esempio:
È necessario accettare questo avviso prima dell'esecuzione della migrazione automatizzata (ovviamente è necessario assicurarsi di disporre di backup/controllo del codice sorgente prima di intraprendere questa avventura):
Lo strumento automatizza fondamentalmente tutti i passaggi descritti nella sezione Aggiornamento manuale presentato di seguito ed è il metodo consigliato per convertire un progetto Xamarin.iOS esistente nell'API unificata.
Passaggi per l'aggiornamento manuale
Anche in questo caso, dopo aver risolto gli avvisi, seguire questa procedura per aggiornare manualmente le app Xamarin.iOS per usare la nuova API unificata:
1. Aggiornare il tipo di progetto e la destinazione di compilazione
Modificare il sapore del progetto nei file csproj da 6BC8ED88-2882-458C-8E55-DFD12B67127B
a FEACFBD2-3405-455C-9665-78FE426C6842
. Modificare il file csproj in un editor di testo, sostituendo il primo elemento dell'elemento <ProjectTypeGuids>
come illustrato:
Modificare l'elemento Import che contiene Xamarin.MonoTouch.CSharp.targets
in Xamarin.iOS.CSharp.targets
come illustrato:
2. Aggiornare i riferimenti al progetto
Espandere il nodo Riferimenti del progetto dell'applicazione iOS. Inizialmente mostrerà un riferimento *broken- monotouch simile a questo screenshot (perché è stato appena modificato il tipo di progetto):
Fare clic con il pulsante destro del mouse sul progetto di applicazione iOS per modificare i riferimenti, quindi fare clic sul riferimento monotouch ed eliminarlo usando il pulsante rosso "X".
Scorrere ora fino alla fine dell'elenco dei riferimenti e selezionare l'assembly Xamarin.iOS .
Premere OK per salvare le modifiche ai riferimenti al progetto.
3. Rimuovere MonoTouch dagli spazi dei nomi
Rimuovere il prefisso MonoTouch dagli spazi dei nomi nelle using
istruzioni o ovunque un nome di classe sia stato completo (ad esempio, MonoTouch.UIKit
diventa solo UIKit
).
4. Rieseguire il mapping dei tipi
Sono stati introdotti tipi nativi che sostituiscono alcuni tipi usati in precedenza, ad esempio istanze di System.Drawing.RectangleF
con CoreGraphics.CGRect
(ad esempio). L'elenco completo dei tipi è disponibile nella pagina tipi nativi.
5. Correzione delle sostituzioni dei metodi
Alcuni UIKit
metodi hanno modificato la firma per usare i nuovi tipi nativi , ad esempio nint
. Se le sottoclassi personalizzate eseguono l'override di questi metodi, le firme non corrispondono più e genereranno errori. Correggere questi override del metodo modificando la sottoclasse in modo che corrisponda alla nuova firma usando i tipi nativi.
Gli esempi includono la modifica public override int NumberOfSections (UITableView tableView)
in modo da restituire nint
e modificare sia i tipi di tipo restituito che i tipi di parametro in public override int RowsInSection (UITableView tableView, int section)
in nint
.
Considerazioni
Quando si converte un progetto Xamarin.iOS esistente dall'API classica alla nuova API unificata, è necessario tenere conto delle considerazioni seguenti se tale app si basa su uno o più componenti o pacchetti NuGet.
Componenti
Qualsiasi componente incluso nell'applicazione dovrà anche essere aggiornato all'API unificata oppure si verifica un conflitto quando si tenta di compilare. Per qualsiasi componente incluso, sostituire la versione corrente con una nuova versione dall'archivio componenti Xamarin che supporta l'API unificata ed eseguire una compilazione pulita. Qualsiasi componente che non è ancora stato convertito dall'autore visualizzerà un avviso a 32 bit solo nell'archivio componenti.
Supporto NuGet
Anche se sono state apportate modifiche a NuGet per lavorare con il supporto dell'API unificata, non è stata rilasciata una nuova versione di NuGet, quindi si sta valutando come ottenere NuGet per riconoscere le nuove API.
Fino a quel momento, proprio come i componenti, sarà necessario cambiare qualsiasi pacchetto NuGet incluso nel progetto in una versione che supporta le API unificate ed eseguire una compilazione pulita in un secondo momento.
Importante
Se si verifica un errore nel formato "Errore 3 Non è possibile includere sia 'monotouch.dll' che 'Xamarin.iOS.dll' nello stesso progetto Xamarin.iOS - Viene fatto riferimento in modo esplicito a 'Xamarin.iOS.dll', mentre 'monotouch.dll' viene fatto riferimento da 'xxx, Version=0.0.000, Culture=neutral, PublicKeyToken=null'" dopo aver convertito l'applicazione nelle API unificate, è in genere dovuto alla presenza di un componente o di un pacchetto NuGet nel progetto che non è stato aggiornato all'API unificata. È necessario rimuovere il componente/NuGet esistente, eseguire l'aggiornamento a una versione che supporta le API unificate ed eseguire una compilazione pulita.
Abilitazione di build a 64 bit di app Xamarin.iOS
Per un'applicazione per dispositivi mobili Xamarin.iOS convertita nell'API unificata, lo sviluppatore deve comunque abilitare la compilazione dell'applicazione per computer a 64 bit dalle opzioni dell'app. Vedere il documento Abilitazione di build a 64 bit di app Xamarin.iOS del documento Considerazioni sulla piattaforma a 32/64 bit per istruzioni dettagliate sull'abilitazione delle build a 64 bit.
Completamento
Indipendentemente dal fatto che si scelga di usare il metodo automatico o manuale per convertire l'applicazione Xamarin.iOS dalla versione classica alle API unificate, sono disponibili diverse istanze che richiedono ulteriore intervento manuale. Vedere il Suggerimenti per l'aggiornamento del codice al documento dell'API unificata per i problemi noti e le correzioni.