Partager via


Partie 1 : Présentation de la plateforme mobile Xamarin

La plateforme Xamarin se compose de nombreux éléments qui vous permettent de développer des applications pour iOS et Android :

  • Langage C# : vous permet d’utiliser une syntaxe familière et des fonctionnalités sophistiquées telles que les génériques, LINQ et la bibliothèque de tâches parallèles.
  • Mono .NET Framework : fournit une implémentation multiplateforme des fonctionnalités étendues dans le .NET Framework de Microsoft.
  • Compilateur : en fonction de la plateforme, produit une application native (par exemple, iOS) ou une application et un runtime .NET intégrés (par exemple, Android). Le compilateur effectue également de nombreuses optimisations pour le déploiement mobile, telles que la liaison de code inutilisé.
  • Outils IDE : Visual Studio sur Mac et Windows vous permet de créer, générer et déployer des projets Xamarin.

En outre, étant donné que le langage sous-jacent est C# avec le .NET Framework, les projets peuvent être structurés pour partager du code qui peut également être déployé sur Windows Téléphone.

En coulisses

Bien que Xamarin vous permet d’écrire des applications en C# et de partager le même code sur plusieurs plateformes, l’implémentation réelle sur chaque système est différente.

Compilation

La source C# fait son chemin dans une application native de différentes manières sur chaque plateforme :

  • iOS : C# est à l’avance (AOT) compilé en langage d’assembly ARM. Le .NET Framework est inclus, avec des classes inutilisées supprimées lors de la liaison pour réduire la taille de l’application. Apple n’autorise pas la génération de code d’exécution sur iOS. Certaines fonctionnalités de langage ne sont donc pas disponibles (voir Limitations de Xamarin.iOS).
  • Android : C# est compilé en il et empaqueté avec MonoVM + JIT’ing. Les classes inutilisées dans l’infrastructure sont supprimées pendant la liaison. L’application s’exécute côte à côte avec Java/ART (runtime Android) et interagit avec les types natifs via JNI (voir Limitations Xamarin.Android).
  • Windows : C# est compilé en il et exécuté par le runtime intégré et ne nécessite pas d’outils Xamarin. La conception d’applications Windows en suivant les instructions de Xamarin simplifie la réutilisation du code sur iOS et Android. Le plateforme Windows universelle a également une option .NET Native, qui se comporte de la même façon que la compilation AOT de Xamarin.iOS.

La documentation de l’éditeur de liens pour Xamarin.iOS et Xamarin.Android fournit plus d’informations sur cette partie du processus de compilation.

La « compilation » du runtime ( génération dynamique du code avec System.Reflection.Emit ) doit être évitée.

Le noyau d’Apple empêche la génération de code dynamique sur les appareils iOS. Par conséquent, l’émission de code à la volée ne fonctionnera pas dans Xamarin.iOS. De même, les fonctionnalités Dynamic Language Runtime ne peuvent pas être utilisées avec les outils Xamarin.

Certaines fonctionnalités de réflexion fonctionnent (par exemple, MonoTouch.Dialog l’utilise pour l’API Réflexions ion), mais pas pour la génération de code.

Accès au Kit de développement logiciel (SDK) de plateforme

Xamarin rend les fonctionnalités fournies par le Kit de développement logiciel (SDK) spécifique à la plateforme facilement accessibles avec la syntaxe C# familière :

  • iOS : Xamarin.iOS expose les frameworks du SDK CocoaTouch d’Apple en tant qu’espaces de noms que vous pouvez référencer à partir de C#. Par exemple, l’infrastructure UIKit qui contient tous les contrôles d’interface utilisateur peut être incluse avec une instruction simple using UIKit; .
  • Android : Xamarin.Android expose le Kit de développement logiciel (SDK) Android de Google en tant qu’espaces de noms. Vous pouvez donc référencer n’importe quelle partie du KIT de développement logiciel (SDK) pris en charge avec une instruction using, par exemple using Android.Views; pour accéder aux contrôles d’interface utilisateur.
  • Windows : les applications Windows sont créées à l’aide de Visual Studio sur Windows. Les types de projet incluent Windows Forms, WPF, WinRT et les plateforme Windows universelle (UWP).

Intégration transparente pour les développeurs

La beauté de Xamarin est que malgré les différences sous le capot, Xamarin.iOS et Xamarin.Android (couplés avec les KITS SDK Windows de Microsoft) offrent une expérience transparente pour écrire du code C# qui peut être réutilisé sur les trois plateformes.

La logique métier, l’utilisation de la base de données, l’accès réseau et d’autres fonctions courantes peuvent être écrites une fois et réutilisées sur chaque plateforme, fournissant une base pour les interfaces utilisateur spécifiques à la plateforme qui recherchent et exécutent en tant qu’applications natives.

Disponibilité de l’environnement de développement intégré (IDE)

Le développement Xamarin peut être effectué dans Visual Studio sur Mac ou Windows. L’IDE que vous choisissez sera déterminé par les plateformes que vous souhaitez cibler.

Étant donné que les applications Windows ne peuvent être développées que sur Windows, pour générer pour iOS, Android et Windows, vous avez besoin de Visual Studio pour Windows. Toutefois, il est possible de partager des projets et des fichiers entre des ordinateurs Windows et Mac, afin que les applications iOS et Android puissent être créées sur un Mac et un code partagé peuvent être ajoutés ultérieurement à un projet Windows.

Les exigences de développement pour chaque plateforme sont abordées plus en détail dans le guide des conditions requises .

iOS

Le développement d’applications iOS nécessite un ordinateur Mac exécutant macOS. Vous pouvez également utiliser Visual Studio pour écrire et déployer des applications iOS avec Xamarin dans Visual Studio. Toutefois, un Mac est toujours nécessaire à des fins de génération et de licence.

L’IDE Xcode d’Apple doit être installé pour fournir le compilateur et le simulateur à des fins de test. Vous pouvez tester gratuitement vos propres appareils, mais pour créer des applications pour la distribution (par exemple, l’App Store), vous devez rejoindre le Programme développeur d’Apple (99 USD par an). Chaque fois que vous soumettez ou mettez à jour une application, elle doit être examinée et approuvée par Apple avant qu’elle soit mise à disposition des clients à télécharger.

Le code est écrit avec l’IDE Visual Studio et les dispositions d’écran peuvent être générées par programmation ou modifiées avec Xcode sur un Mac.

Reportez-vous au Guide d’installation de Xamarin.iOS pour obtenir des instructions détaillées sur la configuration.

Android

Le développement d’applications Android nécessite l’installation des kits SDK Java et Android. Les kits SDK fournissent le compilateur, l’émulateur et d’autres outils nécessaires à la création, au déploiement et au test. Java, le Kit de développement logiciel (SDK) Android de Google et les outils Xamarin peuvent tous être installés et exécutés sur Windows et macOS. Les configurations suivantes sont recommandées :

  • Windows 10 avec Visual Studio 2019
  • macOS Mojave (10.11+) avec Visual Studio 2019 pour Mac

Xamarin fournit un programme d’installation unifié qui configurera votre système avec les outils Java, Android et Xamarin requis (y compris un concepteur visuel pour les dispositions d’écran). Reportez-vous au Guide d’installation Xamarin.Android pour obtenir des instructions détaillées.

Vous pouvez créer et tester des applications sur un appareil réel sans licence de Google, mais pour distribuer votre application via un magasin (tel que Google Play, Amazon ou Barnes &Noble), les frais d’inscription peuvent être facturés à l’opérateur. Google Play publiera instantanément votre application, tandis que les autres magasins disposent d’un processus d’approbation similaire à celui d’Apple.

Windows

Les applications Windows (WinForms, WPF ou UWP) sont créées avec Visual Studio. Ils n’utilisent pas Xamarin directement. Toutefois, le code C# peut être partagé entre Windows, iOS et Android. Visitez le Centre de développement de Microsoft pour en savoir plus sur les outils requis pour le développement Windows.

Création de l'interface utilisateur

Un avantage clé de l’utilisation de Xamarin est que l’interface utilisateur de l’application utilise des contrôles natifs sur chaque plateforme, créant des applications qui sont indistinguishables à partir d’une application écrite dans Objective-C ou Java (pour iOS et Android respectivement).

Lorsque vous créez des écrans dans votre application, vous pouvez disposer les contrôles dans le code ou créer des écrans complets à l’aide des outils de conception disponibles pour chaque plateforme.

Créer des contrôles par programmation

Chaque plateforme permet aux contrôles d’interface utilisateur d’être ajoutés à un écran à l’aide du code. Cela peut prendre du temps, car il peut être difficile de visualiser la conception terminée lorsque les coordonnées de pixels codées en dur pour les positions et tailles de contrôle.

La création de contrôles par programmation présente toutefois des avantages, en particulier sur iOS pour créer des vues qui redimensionnent ou s’affichent différemment sur les tailles d’écran i Téléphone et iPad.

Concepteur visuel

Chaque plateforme a une méthode différente pour la disposition visuelle des écrans :

  • iOS : les storyboards contiennent plusieurs vues et contrôles, et sont accessibles dans le . Fichier storyboard inclus dans votre projet.
  • Android : Xamarin fournit un concepteur d’interface utilisateur de glisser-déplacer Android pour Visual Studio.
  • Windows : Microsoft fournit un concepteur d’interface utilisateur glisser-déplacer dans Visual Studio et Blend. Les dispositions de l’écran sont stockées en tant que . Fichiers XAML.

Ces captures d’écran montrent les concepteurs d’écran visuels disponibles sur chaque plateforme :

These screenshots show the visual screen designers available on each platform

Dans tous les cas, les éléments que vous créez visuellement peuvent être référencés dans votre code.

Considérations relatives à l’interface utilisateur

Un avantage clé de l’utilisation de Xamarin pour créer des applications multiplateformes est qu’ils peuvent tirer parti des boîtes à outils d’interface utilisateur natives pour présenter une interface familière à l’utilisateur. L’interface utilisateur s’effectue également aussi rapidement que toute autre application native.

Certaines métaphores de l’interface utilisateur fonctionnent sur plusieurs plateformes (par exemple, les trois plateformes utilisent un contrôle de liste de défilement similaire), mais pour que votre application « sente » à droite l’interface utilisateur doit tirer parti des éléments d’interface utilisateur spécifiques à la plateforme le cas échéant. Voici quelques exemples de métaphores d’interface utilisateur spécifiques à la plateforme :

  • iOS : navigation hiérarchique avec bouton Précédent souple, onglets en bas de l’écran.
  • Android : bouton Précédent matériel/logiciel système, menu action, onglets en haut de l’écran.
  • Windows : les applications Windows peuvent s’exécuter sur des ordinateurs de bureau, des tablettes (telles que Microsoft Surface) et des téléphones. Les appareils Windows 10 peuvent avoir un bouton Précédent matériel et des vignettes dynamiques, par exemple.

Il est recommandé de lire les instructions de conception pertinentes pour les plateformes que vous ciblez :

Réutilisation de la bibliothèque et du code

La plateforme Xamarin permet la réutilisation du code C# existant sur toutes les plateformes et l’intégration des bibliothèques écrites en mode natif pour chaque plateforme.

Source et bibliothèques C#

Étant donné que les produits Xamarin utilisent C# et .NET Framework, beaucoup de code source existant (à la fois des projets code source ouvert et internes) peuvent être réutilisés dans les projets Xamarin.iOS ou Xamarin.Android. Souvent, la source peut simplement être ajoutée à une solution Xamarin et fonctionne immédiatement. Si une fonctionnalité .NET Framework non prise en charge a été utilisée, certaines modifications peuvent être requises.

Voici quelques exemples de source C# qui peut être utilisée dans Xamarin.iOS ou Xamarin.Android : SQLite-NET, NewtonSoft.JSON et SharpZipLib.

Objective-C Liaisons + projets de liaison

Xamarin fournit un outil appelé btouch qui permet de créer des liaisons qui permettent Objective-C d’utiliser des bibliothèques dans des projets Xamarin.iOS. Reportez-vous à la documentation types de liaisons Objective-C pour plus d’informations sur la façon dont cela est effectué.

Parmi les exemples de bibliothèques qui peuvent être utilisées dans Xamarin.iOS, citons l’analyse des Objective-C codes-barres RedLaser, Google Analytics et l’intégration de PayPal. Les liaisons Xamarin.iOS open source sont disponibles sur GitHub.

Liaisons .jar + projets de liaison

Xamarin prend en charge l’utilisation de bibliothèques Java existantes dans Xamarin.Android. Reportez-vous à la documentation Liaison d’une bibliothèque Java pour plus d’informations sur l’utilisation d’un . Fichier JAR à partir de Xamarin.Android.

Les liaisons Xamarin.Android open source sont disponibles sur GitHub.

C via PInvoke

La technologie « Appel de plateforme » (P/Invoke) permet au code managé (C#) d’appeler des méthodes dans des bibliothèques natives, ainsi que la prise en charge des bibliothèques natives pour rappeler le code managé.

Par exemple, la bibliothèque SQLite-NET utilise des instructions comme suit :

[DllImport("sqlite3", EntryPoint = "sqlite3_open", CallingConvention=CallingConvention.Cdecl)]
public static extern Result Open (string filename, out IntPtr db);

Cela est lié à l’implémentation SQLite en langage C natif dans iOS et Android. Les développeurs familiarisés avec une API C existante peuvent construire un ensemble de classes C# pour mapper à l’API native et utiliser le code de plateforme existant. Il existe une documentation pour lier des bibliothèques natives dans Xamarin.iOS, des principes similaires s’appliquent à Xamarin.Android.

C++ via CppSharp

Miguel explique CXXI (maintenant appelé CppSharp) sur son blog. Une alternative à la liaison à une bibliothèque C++ consiste directement à créer un wrapper C et à le lier via P/Invoke.