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
Ouvrez la fenêtre Options du projet pour votre application Xamarin.Mac :
Sélectionnez Build Mac et définissez Architectures prises en chargesur x86_64 :
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.