Partager via


Mise à jour des applications unifiées Xamarin.Mac vers 64 bits

Depuis janvier 2018, Apple exige que les nouvelles App Store les soumissions mac ciblent 64 bits. Les applications déjà disponibles sur l’App Store Mac doivent être mises à jour vers la version 64 bits cible avant juin 2018.

Le modèle de projet Nouveau> fichier Xamarin.Mac crée des applications 64 bits par défaut, de sorte que toutes les applications récemment créées sont déjà compatibles 64 bits et ne nécessitent aucune modification.

Ciblage 64 bits

  1. Ouvrez la fenêtre Options du projet pour votre application Xamarin.Mac :

    Menu contextuel du projet

  2. Sélectionnez Build Mac et définissez Architectures prises en chargesur x86_64 :

    Définition des architectures prises en charge sur x86_64

  3. Si votre application a des dépendances externes telles que des références natives ou des projets de liaison, mettez-les à jour vers la cible 64 bits.

Erreurs

La première fois que vous générez ou exécutez votre application avec la prise en charge 64 bits, vous pouvez rencontrer des erreurs de lien à partir de problèmes de clang ou d’exécution. Ces erreurs peuvent se produire si des dépendances tierces (par exemple, des références natives dans vos projets Xamarin.Mac ou des liaisons, ou des frameworks chargés manuellement à l’échelle du système) n’ont pas été mises à jour vers 64 bits.

Conseil

La conversion de votre projet en 64 bits est un changement majeur et peut révéler indirectement diverses erreurs de programmation. En particulier, cela peut modifier la taille et l’alignement des structures de données, ce qui affecterait les signatures p/invoke et le code natif lié dans votre projet. Envisagez de passer en revue les avertissements de build donnés et de tester soigneusement votre application par la suite pour détecter les problèmes potentiels.

Exemple d’erreur résultant d’une dépendance tierce liée dynamiquement qui ne cible pas 64 bits :

ld : warning : ignoring file PATH/ThirdPartyLibrary.framework/ThirdPartyLibrary, 
file was built for i386 which is not the architecture being linked (x86_64): 
PATH/ThirdPartyLibrary.framework/ThirdPartyLibrary 

Cette erreur peut être suivie au moment de l’exécution dlopen en retournant IntPtr.Zero au lieu d’un handle attendu.

Exemple d’erreur résultant d’une dépendance tierce liée statiquement qui ne cible pas 64 bits :

Undefined symbols for architecture x86_64:
  "_LibraryFunction", referenced from:
     -u command line option
ld: symbol(s) not found for architecture x86_64 

Pour générer et exécuter correctement, mettez à jour ces dépendances vers 64 bits et recompilez votre application.