Références natives dans les projets iOS, Mac et liaisons
Les références natives vous permettent d’incorporer une infrastructure native dans un projet ou un projet de liaison Xamarin.iOS ou Xamarin.Mac.
Depuis iOS 8.0, il est possible de créer une infrastructure incorporée pour partager du code entre les extensions d’application et l’application main dans Xcode. À l’aide de la fonctionnalité Référence native, il sera possible d’utiliser ces frameworks incorporés (créés avec Xcode) dans Xamarin.iOS.
Important
Il ne sera pas possible de créer des frameworks incorporés à partir d’un type de projets Xamarin.iOS ou Xamarin.Mac. Les références natives autorisent uniquement la consommation d’infrastructures natives (Objective-C) existantes.
Terminologie
Dans iOS 8 (et versions ultérieures), les frameworks incorporés peuvent être à la fois liés de façon statique et liés dynamiquement. Pour les distribuer correctement, vous devez les transformer en infrastructures « fat » qui incluaient tous leurs segments pour chaque architecture d’appareil que vous souhaitez prendre en charge avec votre application.
Frameworks statiques et dynamiques
Les frameworks statiques sont liés au moment de la compilation où les frameworks dynamiques sont liés au moment de l’exécution et peuvent donc être modifiés sans re-liaison. Si vous avez utilisé une infrastructure tierce avant iOS 8, vous utilisiez une infrastructure statique compilée dans votre application. Pour plus d’informations, consultez la documentation relative à la programmation de bibliothèques dynamiques d’Apple.
Infrastructure incorporée et infrastructure système
Les frameworks incorporés sont inclus dans votre offre groupée d’applications et ne sont accessibles qu’à votre application spécifique via son bac à sable. Les frameworks système sont stockés au niveau du système d’exploitation et sont disponibles pour toutes les applications sur l’appareil. Actuellement, seul Apple a la possibilité de créer des frameworks au niveau du système d’exploitation.
Infrastructures minces et fat
Les infrastructures minces contiennent uniquement le code compilé pour une architecture système spécifique, où Fat Frameworks contient du code pour plusieurs architectures. Chaque code base spécifique à l’architecture compilé dans un framework est appelé segment. Par exemple, si nous avions une infrastructure compilée pour les deux architectures de simulateur iOS (i386 et X86_64), elle contiendrait deux tranches.
Si vous essayez de distribuer cet exemple de framework avec votre application, il s’exécuterait correctement sur le simulateur, mais échouerait sur l’appareil, car l’infrastructure ne contient pas de tranches spécifiques au code pour un appareil iOS. Pour s’assurer qu’une infrastructure fonctionne dans toutes les instances, elle doit également inclure des tranches spécifiques à l’appareil, telles que arm64, armv7 et armv7s.
Utilisation de frameworks incorporés
Deux étapes doivent être effectuées pour utiliser des frameworks incorporés dans une application Xamarin.iOS ou Xamarin.Mac : création d’une infrastructure Fat et incorporation de l’infrastructure.
Création d’une infrastructure Fat
Comme indiqué ci-dessus, pour pouvoir utiliser une infrastructure incorporée dans votre application, il doit s’agir d’une infrastructure Fat qui inclut toutes les sections d’architecture système pour les appareils sur lequel votre application s’exécutera.
Lorsque l’infrastructure et l’application consommatrice se trouvent dans le même projet Xcode, ce n’est pas un problème, car Xcode génère à la fois l’infrastructure et l’application à l’aide des mêmes paramètres de build. Étant donné que les applications Xamarin ne peuvent pas créer de frameworks incorporés, cette technique ne peut pas être utilisée.
Pour résoudre ce problème, l’outil lipo
en ligne de commande peut être utilisé pour fusionner deux ou plusieurs frameworks dans une infrastructure Fat contenant tous les segments nécessaires. Pour plus d’informations sur l’utilisation de la lipo
commande, consultez notre documentation Sur la liaison de bibliothèques natives .
Incorporation d’un framework
L’étape suivante est nécessaire pour incorporer une infrastructure dans un projet Xamarin.iOS ou Xamarin.Mac à l’aide de références natives :
Créez ou ouvrez un projet Xamarin.iOS, Xamarin.Mac ou Binding existant.
Dans le Explorateur de solutions, cliquez avec le bouton droit sur le nom du projet, puis sélectionnez Ajouter une>référence native :
Dans la boîte de dialogue Ouvrir , sélectionnez le nom de l’infrastructure native que vous souhaitez incorporer, puis cliquez sur le bouton Ouvrir :
L’infrastructure sera ajoutée à l’arborescence du projet :
Une fois le projet compilé, l’infrastructure native est incorporée dans le bundle de l’application.
Extensions d’application et frameworks incorporés
En interne, Xamarin.iOS peut tirer parti de cette fonctionnalité pour établir une liaison avec le runtime Mono en tant que framework (lorsque la cible de déploiement est >= iOS 8.0), ce qui réduit considérablement la taille de l’application pour les applications avec des extensions (car le runtime Mono n’est inclus qu’une seule fois pour l’ensemble de l’ensemble de l’application, au lieu d’une fois pour l’application conteneur et une fois pour chaque extension).
Les extensions sont liées au runtime Mono en tant que framework, car toutes les extensions nécessitent iOS 8.0.
Applications qui n’ont pas d’extensions et applications qui ciblent iOS
Résumé
Cet article a examiné en détail l’incorporation d’une infrastructure native dans une application Xamarin.iOS ou Xamarin.Mac.