Aggiornamento delle app Xamarin.Forms esistenti
Seguire questa procedura per aggiornare un'app Xamarin.Forms esistente per usare l'API unificata e aggiornare alla versione 1.3.1
Importante
Poiché Xamarin.Forms 1.3.1 è la prima versione che supporta l'API unificata, l'intera soluzione deve essere aggiornata per usare la versione più recente contemporaneamente alla migrazione dell'app iOS a Unified. Ciò significa che, oltre ad aggiornare il progetto iOS per il supporto unificato, è anche necessario modificare il codice in tutti i progetti nella soluzione.
L'aggiornamento viene eseguito in due passaggi:
Eseguire la migrazione dell'app iOS all'API unificata usando lo strumento di migrazione di Visual Studio per Mac.
Usare lo strumento di migrazione per aggiornare automaticamente il progetto.
Aggiornare le API native iOS come descritto nelle istruzioni per aggiornare le app iOS (in particolare nel renderer personalizzato o nel codice del servizio di dipendenza).
Aggiornare l'intera soluzione a Xamarin.Forms versione 1.3.
Installare il pacchetto NuGet Xamarin.Forms 1.3.1.
Aggiornare la
App
classe nel codice condiviso.Aggiornare nel
AppDelegate
progetto iOS.Aggiornare nel
MainActivity
progetto Android.Aggiornare nel
MainPage
progetto Windows Phone.
1. App iOS (migrazione unificata)
Parte della migrazione richiede l'aggiornamento di Xamarin.Forms alla versione 1.3, che supporta l'API unificata. Per creare i riferimenti all'assembly corretti, è prima necessario aggiornare il progetto iOS per usare l'API unificata.
Strumento di migrazione
Fare clic sul progetto iOS in modo che sia selezionato, quindi scegliere Project > Migrate to Xamarin.iOS Unified API (Esegui migrazione progetto all'API unificata Xamarin.iOS) e accettare il messaggio di avviso visualizzato.
Questa operazione verrà eseguita automaticamente:
- Modificare il tipo di progetto per supportare l'API unificata a 64 bit.
- Modificare il riferimento al framework in Xamarin.iOS (sostituendo il riferimento monotouch precedente).
- Modificare i riferimenti allo spazio dei nomi nel codice per rimuovere il
MonoTouch
prefisso. - Aggiornare il file csproj per usare le destinazioni di compilazione corrette per l'API unificata.
Pulire e compilare il progetto per assicurarsi che non siano presenti altri errori da correggere. Non è necessario eseguire altre azioni. Questi passaggi sono illustrati in modo più dettagliato nella documentazione dell'API unificata.
Aggiornare le API iOS native (se necessario)
Se è stato aggiunto codice nativo iOS aggiuntivo ( ad esempio renderer personalizzati o servizi di dipendenza) potrebbe essere necessario eseguire ulteriori correzioni manuali del codice. Ricompilare l'app e fare riferimento alle istruzioni Aggiorna app iOS esistenti per altre informazioni sulle modifiche che potrebbero essere necessarie. Questi suggerimenti consentiranno anche di identificare le modifiche necessarie.
2. Aggiornamento di Xamarin.Forms 1.3.1
Dopo che l'app iOS è stata aggiornata all'API unificata, il resto della soluzione deve essere aggiornato a Xamarin.Forms versione 1.3.1. Valuta gli ambiti seguenti:
- Aggiornamento del pacchetto NuGet Xamarin.Forms in ogni progetto.
- Modifica del codice per l'uso delle nuove classi Xamarin.Forms
Application
,FormsApplicationDelegate
(iOS),FormsApplicationActivity
(Android) eFormsApplicationPage
(Windows Phone).
Questi passaggi sono illustrati di seguito:
2.1 Aggiornare NuGet in tutti i progetti
Aggiornare Xamarin.Forms alla versione non rilasciata 1.3.1 usando il Gestione pacchetti NuGet per tutti i progetti nella soluzione: PCL (se presente), iOS, Android e Windows Phone. È consigliabile eliminare e aggiungere nuovamente il pacchetto NuGet Xamarin.Forms per eseguire l'aggiornamento alla versione 1.3.
Nota
Xamarin.Forms versione 1.3.1 è attualmente in versione non definitiva. Ciò significa che è necessario selezionare l'opzione di versione non definitiva in NuGet (tramite una casella di graduazione in Visual Studio per Mac o un elenco a discesa in Visual Studio) per visualizzare la versione non definitiva più recente.
Importante
Se si usa Visual Studio, verificare che sia installata la versione più recente del Gestione pacchetti NuGet. Le versioni precedenti di NuGet in Visual Studio non installeranno correttamente la versione unificata di Xamarin.Forms 1.3.1. Passare a Strumenti > Estensioni e aggiornamenti... e fare clic sull'elenco Installato per verificare che NuGet Gestione pacchetti per Visual Studio sia almeno la versione 2.8.5. Se è precedente, fare clic sull'elenco Aggiornamenti per scaricare la versione più recente.
Dopo aver aggiornato il pacchetto NuGet a Xamarin.Forms 1.3.1, apportare le modifiche seguenti in ogni progetto per eseguire l'aggiornamento alla nuova Xamarin.Forms.Application
classe.
2.2 Libreria di classi portabile (o progetto condiviso)
Modificare il file App.cs in modo che:
- La
App
classe eredita ora daApplication
. - La
MainPage
proprietà è impostata sulla prima pagina di contenuto da visualizzare.
public class App : Application // superclass new in 1.3
{
public App ()
{
// The root page of your application
MainPage = new ContentPage {...}; // property new in 1.3
}
Il metodo è stato rimosso GetMainPage
completamente e la proprietà è stata invece impostata MainPage
sulla Application
sottoclasse.
Questa nuova Application
classe di base supporta anche gli OnStart
override , OnSleep
e OnResume
per gestire il ciclo di vita dell'applicazione.
La App
classe viene quindi passata a un nuovo LoadApplication
metodo in ogni progetto di app, come descritto di seguito:
2.3 App iOS
Modificare il file AppDelegate.cs in modo che:
- La classe eredita da
FormsApplicationDelegate
(anzichéUIApplicationDelegate
in precedenza). LoadApplication
viene chiamato con una nuova istanza diApp
.
[Register ("AppDelegate")]
public partial class AppDelegate :
global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate // superclass new in 1.3
{
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
global::Xamarin.Forms.Forms.Init ();
LoadApplication (new App ()); // method is new in 1.3
return base.FinishedLaunching (app, options);
}
}
2.3 App Android
Modificare il file MainActivity.cs in modo che:
- La classe eredita da
FormsApplicationActivity
(anzichéFormsActivity
in precedenza). LoadApplication
viene chiamato con una nuova istanza diApp
[Activity (Label = "YOURAPPNAM", Icon = "@drawable/icon", MainLauncher = true,
ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity :
global::Xamarin.Forms.Platform.Android.FormsApplicationActivity // superclass new in 1.3
{
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
global::Xamarin.Forms.Forms.Init (this, bundle);
LoadApplication (new App ()); // method is new in 1.3
}
}
2.4 App per Windows Phone
È necessario aggiornare MainPage , sia il codice XAML che il codebehind.
Modificare il file MainPage.xaml in modo che:
- L'elemento XAML radice deve essere
winPhone:FormsApplicationPage
. - L'attributo
xmlns:phone
deve essere modificato inxmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"
Di seguito è riportato un esempio aggiornato: è necessario modificare questi elementi (il resto degli attributi deve rimanere invariato):
<winPhone:FormsApplicationPage
...
xmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"
...>
</winPhone:FormsApplicationPage>
Modificare il file MainPage.xaml.cs in modo che:
- La classe eredita da
FormsApplicationPage
(anzichéPhoneApplicationPage
in precedenza). LoadApplication
viene chiamato con una nuova istanza della classe Xamarin.FormsApp
. Potrebbe essere necessario qualificare completamente questo riferimento perché Windows Phone ha già definito la propriaApp
classe.
public partial class MainPage : global::Xamarin.Forms.Platform.WinPhone.FormsApplicationPage // superclass new in 1.3
{
public MainPage()
{
InitializeComponent();
SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape;
global::Xamarin.Forms.Forms.Init();
LoadApplication(new YOUR_APP_NAMESPACE.App()); // new in 1.3
}
}
Risoluzione dei problemi
A volte verrà visualizzato un errore simile al seguente dopo l'aggiornamento del pacchetto NuGet Xamarin.Forms. Si verifica quando l'aggiornamento NuGet non rimuove completamente i riferimenti alle versioni precedenti dai file csproj .
YOUR_PROJECT.csproj: errore: questo progetto fa riferimento a pacchetti NuGet mancanti nel computer. Abilitare il ripristino del pacchetto NuGet per scaricarli. Per ulteriori informazioni, vedere https://go.microsoft.com/fwlink/?LinkID=322105. Il file mancante è .. /.. /packages/Xamarin.Forms.1.2.3.6257/build/portable-win+net45+wp80+MonoAndroid10+MonoTouch10/Xamarin.Forms.targets. (YOUR_PROJECT)
Per correggere questi errori, aprire il file csproj in un editor di testo e cercare <Target
gli elementi che fanno riferimento alle versioni precedenti di Xamarin.Forms, ad esempio l'elemento illustrato di seguito. È consigliabile eliminare manualmente l'intero elemento dal file csproj e salvare le modifiche.
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see https://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\..\packages\Xamarin.Forms.1.2.3.6257\build\portable-win+net45+wp80+MonoAndroid10+MonoTouch10\Xamarin.Forms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Xamarin.Forms.1.2.3.6257\build\portable-win+net45+wp80+MonoAndroid10+MonoTouch10\Xamarin.Forms.targets'))" />
</Target>
Il progetto deve essere compilato correttamente dopo la rimozione di questi vecchi riferimenti.
Considerazioni
Quando si converte un progetto Xamarin.Forms 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.
Riepilogo
L'applicazione Xamarin.Forms dovrebbe ora essere aggiornata alla versione 1.3.1 e l'app iOS migrata all'API unificata (che supporta le architetture a 64 bit nella piattaforma iOS).
Come indicato in precedenza, se l'app Xamarin.Forms include codice nativo, ad esempio renderer personalizzati o servizi di dipendenza, potrebbe essere necessario aggiornare anche questi tipi per usare i nuovi tipi introdotti nell'API unificata.