Compilation pour différents appareils dans Xamarin.iOS

Les propriétés de build de votre exécutable peuvent être configurées à partir de la page des propriétés de build iOS de Project, qui se trouve en cliquant avec le bouton droit sur le nom du projet et en accédant à Options > Build iOS dans Visual Studio pour Mac et Propriétés dans Visual Studio :

Outre les options de configuration disponibles sur l’interface utilisateur, vous pouvez également transmettre votre propre ensemble d’options de lignes de commande à l’outil Build Xamarin.iOS (mtouch).

Options du SDK

Visual Studio pour Mac vous permet de configurer deux propriétés importantes liées au Kit de développement logiciel : la version du Kit de développement logiciel iOS utilisée pour générer votre logiciel et la Cible de déploiement (ou la version iOS minimale requise).

L’option Version du Kit de développement logiciel iOS permet d’utiliser différentes versions d’un Kit de développement logiciel Apple, cela dirige Xamarin.iOS vers les compilateurs, les éditeurs de liens et les bibliothèques, auxquels il doit faire référence au cours de votre build. Cliquez avec le bouton droit sur le projet et choisissez Options, puis Build iOS dans la fenêtre d’options :

Choisir la version du KIT de développement logiciel (SDK) dans la fenêtre d’options

Le paramètre Cible de déploiement permet de sélectionner la version minimale requise du système d’exploitation sur lequel votre application s’exécutera. Cette valeur est définie dans le fichier Info.plist de votre projet. Vous devez sélectionner la version minimale qui a toutes les API dont vous avez besoin pour exécuter votre application.

Définir la cible de déploiement dans le fichier Info.plist

En général, l’API Xamarin.iOS expose toutes les méthodes disponibles dans la version la plus récente du Kit de développement logiciel, et lorsque cela est nécessaire, nous fournissons des propriétés pratiques qui vous permettent de détecter si la fonctionnalité est disponible lors du runtime (par exemple,UIDevice.UserInterfaceIdiom et UIDevice.IsMultitaskingSupported fonctionnent toujours sur Xamarin.iOS, tout est exécuté dans les coulisses).

Liaison

Consultez notre page dédiée Éditeur de liens pour en savoir plus sur la façon dont l’éditeur de liens vous permet de réduire la taille de vos fichiers exécutables et pour savoir comment l’utiliser efficacement.

Moteur de génération de code

À partir de Xamarin.iOS 4.0, il existe deux serveurs principaux de génération de code sur Xamarin.iOS. Le moteur de génération de code Mono régulier et basé sur le compilateur d’optimisation LLVM. Chaque moteur a ses avantages et ses inconvénients.

En règle générale, au cours du processus de développement, vous utiliserez probablement le moteur de génération de code Mono car il vous permet une itération rapide. Pour les versions préliminaires et le déploiement de l’AppStore, vous devez basculer vers le moteur de génération de code LLVM.

Le moteur du serveur principal d’optimisation LLVM génère un code plus rapide et plus strict que le moteur Mono, pour une durée de compilation plus longue.

Vous pouvez activer ces moteurs à partir des options Build iOS dans Visual Studio pour Mac ou Visual Studio.

Activation de L L L V M dans Visual Studio pour Mac.

Activation de L L L V M dans Visual Studio.

Prise en charge de l’architecture

ARMv6 (prise en charge discontinue de Xamarin.iOS pour ARMv6 avec v8.10)

  • iPhone (original), 3G
  • iPod 1ère et 2e génération

ARMv7

  • iPhone 3GS, 4, 4S
  • iPad 1, 2, 3, Mini
  • iPod 3e, 4e, 5e génération

ARMv7s

  • iPhone 5
  • iPhone 5c
  • iPad 4

Si vous ne ciblez que le processeur ARMv7s, le code généré sera légèrement plus rapide, mais il ne s’exécutera plus sur les systèmes ARMv7 ou ARMv6, sauf si vous compilez un fichier fat binaire qui contient plusieurs fichiers exécutables dans votre package.

ARM64 (Xamarin.iOS a commencé à prendre en charge ARM64 dans v8.6)

  • iPhone 5s
  • iPhone SE
  • iPhone 6, 6 Plus
  • iPhone 6s, 6s Plus
  • iPhone 7, 7 Plus
  • iPhone 8, 8 Plus
  • iPhone X
  • iPad Air
  • iPad Air 2
  • iPad Mini 2, 3, 4
  • iPad Pro (tous)

Notez que les builds soumis à l’App Store doivent contenir la prise en charge 64 bits, il s’agit d’une exigence définie par Apple. En outre, iOS 11 prend uniquement en charge des applications 64 bits.

Prise en charge d’ARM Thumb-2

Thumb est un jeu d’instructions plus compact utilisé par les processeurs ARM. En activant la prise en charge Thumb, vous pouvez réduire la taille de votre fichier exécutable, pour un temps d’exécution plus lent. Thumb est pris en charge sur ARMv7 et ARMv7s.

Utilisation conditionnelle de l’infrastructure

Si votre projet souhaite tirer parti de certaines des fonctionnalités des versions iOS les plus récentes, vous devrez peut-être vous appuyer sous certaines conditions sur certaines nouvelles infrastructures. Par exemple, si vous voulez utiliser iAd lors de l’exécution sur iOS 4.0 ou version ultérieure, mais toujours prendre en charge les appareils 3.x. Pour ce faire, vous devez informer Xamarin.iOS que vous devez le lier à l’infrastructure iAd « faiblement ». Les liaisons faibles assurent que l’infrastructure est uniquement chargée sur demande la première fois qu'une classe de l’infrastructure est requise.

Pour ce faire, vous devez suivre les étapes suivantes :

  • Ouvrez vos Options de projet et naviguez vers le volet Build iOS.
  • Ajoutez '-gcc_flags "-weak_framework iAd"' aux options supplémentaires pour chaque configuration sur laquelle vous souhaitez établir un lien faible :

Options supplémentaires

En plus, vous devez empêcher votre utilisation des types de s’exécuter sur des versions antérieures d’iOS où elles ne peuvent pas exister. Il existe plusieurs méthodes pour y parvenir, l’une d’elles est l’analyse UIDevice.CurrentDevice.SystemVersion.