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:

  1. 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).

  2. Aggiornare l'intera soluzione a Xamarin.Forms versione 1.3.

    1. Installare il pacchetto NuGet Xamarin.Forms 1.3.1.

    2. Aggiornare la App classe nel codice condiviso.

    3. Aggiornare nel AppDelegate progetto iOS.

    4. Aggiornare nel MainActivity progetto Android.

    5. 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.

Scegliere Project > Migrate to Xamarin.iOS Unified API (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) e FormsApplicationPage (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 da Application.
  • 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 OnStartoverride , OnSleepe 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 di App.
[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 di App
[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 in xmlns: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.Forms App . Potrebbe essere necessario qualificare completamente questo riferimento perché Windows Phone ha già definito la propria App 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.