Partager via


Mise à jour des applications Xamarin.Forms existantes

Suivez ces étapes pour mettre à jour une application Xamarin.Forms existante pour utiliser l’API unifiée et la mise à 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, la solution entière doit être mise à 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 est effectuée en deux étapes :

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

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

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

  2. Mettez à jour l’intégralité 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 le AppDelegate projet iOS.

    4. Mettez à jour le MainActivity projet Android.

    5. Mettez à jour le MainPage 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 appropriées 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 Project > Migrate vers l’API unifiée Xamarin.iOS... et acceptez le message d’avertissement qui s’affiche.

Choisissez Project > Migrate vers l’API unifiée Xamarin.iOS... et accepter le message d’avertissement qui s’affiche

Cela va automatiquement :

  • Modifiez le type de projet pour prendre en charge l’API 64 bits unifiée.
  • Remplacez la référence du framework par Xamarin.iOS (en remplaçant l’ancienne référence monotouche ).
  • 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 action supplémentaire ne doit être nécessaire. 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épendances), 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 obtenir des informations supplémentaires sur les modifications qui peuvent être requises. Ces conseils vous aideront également à identifier les modifications requises.

2. Mise à jour 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 la mise à jour vers la version 1.3.

Remarque

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 de préversion.

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 aux extensions et mises à jour des outils>... et cliquez sur la liste installée pour vérifier que le Gestionnaire de package NuGet pour Visual Studio est au moins la 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 sur 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 méthode et définissons plutôt GetMainPage la MainPage propriété sur la Application sous-classe.

Cette nouvelle Application classe de base prend également en charge les remplacements OnSleepet OnResume les OnStartremplacements 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 ( FormsApplicationDelegate au lieu de UIApplicationDelegate précédemment).
  • LoadApplication est 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 ( FormsApplicationActivity au lieu de FormsActivity précédemment).
  • LoadApplication est appelé avec une nouvelle instance de 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 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é par xmlns: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 afin que :

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

Dépannage

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

YOUR_PROJECT.csproj : Erreur : ce projet fait référence aux 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 des éléments qui font référence à des versions antérieures de Xamarin.Forms, comme l’élément indiqué 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.

À propos de l’installation

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

Composants

Tout composant que vous avez inclus dans votre application doit également être mis à jour vers l’API unifiée ou 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 avons apporté des modifications à NuGet pour travailler 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 obtenir NuGet pour reconnaître les nouvelles API.

Jusqu’à ce stade, 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 sous la forme « 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 avoir converti votre application en API unifiées, il est généralement dû à un composant ou à un package NuGet dans le projet qui n’a pas été mis à jour vers l’API unifiée. Vous devez supprimer le composant existant/NuGet, mettre à jour vers une version qui prend en charge les API unifiées et effectuer une build propre.

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 création de l’application pour les machines 64 bits à partir des options de l’application. Pour obtenir des instructions détaillées sur l’activation des builds 64 bits des applications Xamarin.iOS du document Considérations relatives à la plateforme 32/64 bits, consultez le document 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épendances, il peut également être nécessaire de les mettre à jour pour utiliser les nouveaux types introduits dans l’API unifiée.