Partager via


Mise à jour des applications Xamarin.Forms existantes

Suivez ces étapes pour mettre à jour une application Xamarin.Forms existante afin d’utiliser l’API Unifiée et mettre à jour vers la version 1.3.1

Important

Étant donné que Xamarin.Forms 1.3.1 est la première version qui prend en charge l’API Unifiée, l’ensemble de la solution doit être mis à jour pour utiliser la dernière version en même temps que la migration de l’application iOS vers Unified. Cela signifie qu’en plus de mettre à jour le projet iOS pour la prise en charge unifiée, vous devez également modifier le code dans tous les projets de la solution.

La mise à jour s’effectue en deux étapes :

  1. Migrez l’application iOS vers l’API unifiée à l’aide de l’outil de migration de build de Visual Studio pour Mac.

    • Utilisez l’outil de migration pour mettre à jour automatiquement le projet.

    • Mettez à jour les API iOS natives comme indiqué dans les instructions pour mettre à jour les applications iOS (en particulier dans le code du renderer personnalisé ou du service de dépendance).

  2. Mettez à jour l’ensemble de la solution vers Xamarin.Forms version 1.3.

    1. Installez le package NuGet Xamarin.Forms 1.3.1.

    2. Mettez à jour la App classe dans le code partagé.

    3. Mettez à jour dans AppDelegate le projet iOS.

    4. Mettez à jour dans MainActivity le projet Android.

    5. Mettez à jour dans MainPage le projet Windows Phone.

1. Application iOS (migration unifiée)

Une partie de la migration nécessite la mise à niveau de Xamarin.Forms vers la version 1.3, qui prend en charge l’API unifiée. Pour que les références d’assembly correctes soient créées, nous devons d’abord mettre à jour le projet iOS pour utiliser l’API unifiée.

Outil de migration

Cliquez sur le projet iOS pour qu’il soit sélectionné, puis choisissez Projet > Migrer vers l’API unifiée Xamarin.iOS... et acceptez le message d’avertissement qui s’affiche.

Choisissez Project > Migrate to Xamarin.iOS Unified API... et acceptez le message d’avertissement qui s’affiche

Cela permet automatiquement :

  • Modifiez le type de projet pour prendre en charge l’API 64 bits unifiée.
  • Remplacez la référence d’infrastructure par Xamarin.iOS (en remplaçant l’ancienne référence monotouch ).
  • Modifiez les références d’espace de noms dans le code pour supprimer le MonoTouch préfixe.
  • Mettez à jour le fichier csproj pour utiliser les cibles de build appropriées pour l’API unifiée.

Nettoyez et générez le projet pour vous assurer qu’il n’y a pas d’autres erreurs à corriger. Aucune autre action ne doit être requise. Ces étapes sont expliquées plus en détail dans la documentation de l’API unifiée.

Mettre à jour les API iOS natives (si nécessaire)

Si vous avez ajouté du code natif iOS supplémentaire (par exemple, des renderers personnalisés ou des services de dépendance), vous devrez peut-être effectuer des correctifs de code manuels supplémentaires. Compilez à nouveau votre application et reportez-vous aux instructions de mise à jour des applications iOS existantes pour plus d’informations sur les modifications qui peuvent être nécessaires. Ces conseils vous aideront également à identifier les modifications requises.

2. Mise à jour de Xamarin.Forms 1.3.1

Une fois l’application iOS mise à jour vers l’API unifiée, le reste de la solution doit être mis à jour vers Xamarin.Forms version 1.3.1. notamment :

  • Mise à jour du package NuGet Xamarin.Forms dans chaque projet.
  • Modification du code pour utiliser les nouvelles classes Xamarin.Forms Application, FormsApplicationDelegate (iOS), FormsApplicationActivity (Android) et FormsApplicationPage (Windows Phone).

Ces étapes sont expliquées ci-dessous :

2.1 Mettre à jour NuGet dans tous les projets

Mettez à jour Xamarin.Forms vers la préversion 1.3.1 à l’aide du Gestionnaire de package NuGet pour tous les projets de la solution : PCL (le cas échéant), iOS, Android et Windows Phone. Il est recommandé de supprimer et de rajouter le package NuGet Xamarin.Forms pour effectuer une mise à jour vers la version 1.3.

Notes

Xamarin.Forms version 1.3.1 est actuellement en préversion. Cela signifie que vous devez sélectionner l’option de préversion dans NuGet (via une case à cocher dans Visual Studio pour Mac ou une liste déroulante dans Visual Studio) pour afficher la dernière version préliminaire.

Important

Si vous utilisez Visual Studio, vérifiez que la dernière version du Gestionnaire de package NuGet est installée. Les versions antérieures de NuGet dans Visual Studio n’installent pas correctement la version unifiée de Xamarin.Forms 1.3.1. Accédez à Outils > Extensions et Mises à jour... et cliquez sur la liste Installé pour case activée que le Gestionnaire de package NuGet pour Visual Studio est au moins version 2.8.5. S’il est plus ancien, cliquez sur la liste Mises à jour pour télécharger la dernière version.

Une fois que vous avez mis à jour le package NuGet vers Xamarin.Forms 1.3.1, apportez les modifications suivantes dans chaque projet pour effectuer une mise à niveau vers la nouvelle Xamarin.Forms.Application classe.

2.2 Bibliothèque de classes portable (ou projet partagé)

Modifiez le fichier App.cs de sorte que :

  • La App classe hérite désormais de Application.
  • La MainPage propriété est définie sur la première page de contenu que vous souhaitez afficher.
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
    }

Nous avons complètement supprimé la GetMainPage méthode et nous avons défini la MainPagepropriété sur la Application sous-classe.

Cette nouvelle Application classe de base prend également en charge les OnStartsubstitutions , OnSleepet OnResume pour vous aider à gérer le cycle de vie de votre application.

La App classe est ensuite passée à une nouvelle LoadApplication méthode dans chaque projet d’application, comme décrit ci-dessous :

2.3 Application iOS

Modifiez le fichier AppDelegate.cs de sorte que :

  • La classe hérite de FormsApplicationDelegate (au lieu de UIApplicationDelegate précédemment).
  • LoadApplicationest appelé avec une nouvelle instance de 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 Application Android

Modifiez le fichier MainActivity.cs de sorte que :

  • La classe hérite de FormsApplicationActivity (au lieu de FormsActivity précédemment).
  • LoadApplicationest appelé avec une nouvelle instance deApp
[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 application Windows Phone

Nous devons mettre à jour mainPage , à la fois le code XAML et le codebehind.

Modifiez le fichier MainPage.xaml de sorte que :

  • L’élément XAML racine doit être winPhone:FormsApplicationPage.
  • L’attribut xmlns:phone doit être remplacé parxmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"

Un exemple mis à jour est illustré ci-dessous : vous devez uniquement modifier ces éléments (le reste des attributs doit rester le même) :

<winPhone:FormsApplicationPage
   ...
   xmlns:winPhone="clr-namespace:Xamarin.Forms.Platform.WinPhone;assembly=Xamarin.Forms.Platform.WP8"
    ...>
</winPhone:FormsApplicationPage>

Modifiez le fichier MainPage.xaml.cs de sorte que :

  • La classe hérite de FormsApplicationPage (au lieu de PhoneApplicationPage précédemment).
  • LoadApplicationest appelé avec une nouvelle instance de la classe Xamarin.FormsApp. Vous devrez peut-être qualifier entièrement cette référence, car Windows Phone a sa propre App classe déjà définie.
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
    }
 }

Dépannage

Parfois, vous verrez une erreur similaire à celle-ci après la mise à jour du package NuGet Xamarin.Forms. Elle se produit lorsque l’updater NuGet ne supprime pas complètement les références à des versions antérieures de vos fichiers csproj .

YOUR_PROJECT.csproj : Erreur : ce projet référence le ou les packages NuGet manquants sur cet ordinateur. Activez la restauration de package NuGet pour les télécharger. Pour plus d’informations, consultez https://go.microsoft.com/fwlink/?LinkID=322105. Le fichier manquant est .. /.. /packages/Xamarin.Forms.1.2.3.6257/build/portable-win+net45+wp80+MonoAndroid10+MonoTouch10/Xamarin.Forms.targets. (YOUR_PROJECT)

Pour corriger ces erreurs, ouvrez le fichier csproj dans un éditeur de texte et recherchez <Target les éléments qui font référence à des versions antérieures de Xamarin.Forms, comme l’élément ci-dessous. Vous devez supprimer manuellement cet élément entier du fichier csproj et enregistrer les modifications.

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

Le projet doit être généré correctement une fois ces anciennes références supprimées.

Considérations

Les considérations suivantes doivent être prises en compte lors de la conversion d’un projet Xamarin.Forms existant de l’API Classic vers la nouvelle API Unifiée si cette application s’appuie sur un ou plusieurs composants ou package NuGet.

Components

Tout composant que vous avez inclus dans votre application doit également être mis à jour vers l’API unifiée, sinon vous obtiendrez un conflit lorsque vous essayez de compiler. Pour tout composant inclus, remplacez la version actuelle par une nouvelle version du magasin de composants Xamarin qui prend en charge l’API unifiée et effectuez une build propre. Tout composant qui n’a pas encore été converti par l’auteur affiche un avertissement 32 bits uniquement dans le magasin de composants.

Prise en charge par NuGet

Bien que nous ayons apporté des modifications à NuGet pour qu’il fonctionne avec la prise en charge de l’API unifiée, il n’y a pas eu de nouvelle version de NuGet. Nous évaluons donc comment faire en sorte que NuGet reconnaisse les nouvelles API.

Jusqu’à ce moment, tout comme les composants, vous devez basculer tout package NuGet que vous avez inclus dans votre projet vers une version qui prend en charge les API unifiées et effectuer une build propre par la suite.

Important

Si vous avez une erreur au format « Erreur 3 Impossible d’inclure à la fois 'monotouch.dll' et 'Xamarin.iOS.dll' dans le même projet Xamarin.iOS - 'Xamarin.iOS.dll' est référencé explicitement, alors que « monotouch.dll » est référencé par « xxx, Version=0.0.000, Culture=neutral, PublicKeyToken=null » après la conversion de votre application en API unifiées, cela est généralement dû à la présence d’un composant ou d’un package NuGet dans le projet qui n’a pas été mis à jour vers l’API unifiée. Vous devez supprimer le composant/NuGet existant, effectuer une mise à jour vers une version prenant en charge les API unifiées et effectuer une propre build.

Activation des builds 64 bits des applications Xamarin.iOS

Pour une application mobile Xamarin.iOS convertie en API unifiée, le développeur doit toujours activer la génération de l’application pour les machines 64 bits à partir des options de l’application. Consultez le document Activation des builds 64 bits des applications Xamarin.iOS de la plateforme 32/64 bits pour obtenir des instructions détaillées sur l’activation des builds 64 bits.

Résumé

L’application Xamarin.Forms doit maintenant être mise à jour vers la version 1.3.1 et l’application iOS migrée vers l’API unifiée (qui prend en charge les architectures 64 bits sur la plateforme iOS).

Comme indiqué ci-dessus, si votre application Xamarin.Forms inclut du code natif, tel que des renderers personnalisés ou des services de dépendance, il peut également être nécessaire de les mettre à jour pour utiliser les nouveaux types introduits dans l’API unifiée.