Partager via


Conseils de dépannage Xamarin.Mac

Vue d’ensemble

Parfois, nous sommes bloqués tout en travaillant sur un projet, soit sur l’incapacité d’obtenir une API pour travailler comme nous le voulons ou en essayant de contourner un bogue. Notre objectif chez Xamarin est de réussir l’écriture de vos applications mobiles et de bureau, et nous avons fourni des ressources pour vous aider.

Avec l’une de ces ressources, vous pouvez effectuer certaines étapes de préparation pour les aider à résoudre rapidement votre problème :

  • Déterminez la cause racine du problème le plus possible pour signaler les incidents :

    • « Mon application plante » est difficile à diagnostiquer. « Mon application se bloque quand je retourne un tableau vide à cet appel » est beaucoup plus facile à résoudre.

    • « Je ne peux pas que NSTable fonctionne » est moins utile que « Aucune des méthodes sur mon NSTableDelegate semble être appelée dans ce cas. »

  • Si possible, fournissez un petit exemple de programme montrant le problème. Explorer les pages du code source à la recherche du problème prend des ordres de grandeur plus de temps et d’effort.

  • Connaître les modifications que vous avez apportées à votre application pour provoquer un problème peut rapidement limiter la source du problème. Notez que si vous avez récemment mis à niveau des versions de Xamarin.Mac, supprimez les sections de votre application pour trouver la partie à l’origine du problème ou testez les versions précédentes pour trouver ce qui a introduit le problème peut être très utile.

Que faire quand votre application se bloque sans sortie

Dans la plupart des cas, le débogueur dans Visual Studio pour Mac intercepte les exceptions et plante dans votre application et vous aide à suivre la cause racine. Toutefois, il existe certains cas où votre application rebondira sur la station d’accueil, puis quittez avec peu ou pas de sortie. Ces stratégies peuvent inclure :

  • Problèmes de signature de code.
  • Certains blocages du runtime mono.
  • Certaines exceptions objective-c et incidents.
  • Certains plantent très tôt dans la durée de vie du processus.
  • Certains dépassements de pile.
  • La version macOS répertoriée dans votre Info.plist est plus récente que la version de votre macOS actuellement installée ou n’est pas valide.

Le débogage de ces programmes peut être frustrant, car la recherche des informations nécessaires peut être difficile. Voici quelques approches qui peuvent vous aider :

  • Vérifiez que la version macOS répertoriée dans Info.plist est la même que la version de macOS actuellement installée sur l’ordinateur.

  • Vérifiez la sortie de l’application Visual Studio pour Mac (Affichage ->Pads ->Sortie de l’application) pour connaître les traces de pile ou la sortie en rouge de Cocoa qui peuvent décrire la sortie.

  • Exécutez votre application à partir de la ligne de commande et examinez la sortie (dans l’application Terminal ) à l’aide de :

    MyApp.app/Contents/MacOS/MyApp (où MyApp est le nom de votre application)

  • Vous pouvez augmenter la sortie en ajoutant « MONO_LOG_LEVEL » à votre commande sur la ligne de commande, par exemple :

    MONO_LOG_LEVEL=debug MyApp.app/Contents/MacOS/MyApp

  • Vous pouvez attacher un débogueur natif (lldb) à votre processus pour voir si cela fournit plus d’informations (cela nécessite une licence payante). Par exemple, procédez comme suit :

    1. Entrez lldb MyApp.app/Contents/MacOS/MyApp dans le terminal.
    2. Entrez run dans le terminal.
    3. Entrez c dans le terminal.
    4. Quittez le débogage lorsque vous avez terminé le débogage.
  • En dernier recours, avant d’appeler NSApplication.Init votre Main méthode (ou dans d’autres endroits si nécessaire), vous pouvez écrire du texte dans un fichier dans un emplacement connu pour suivre à quelle étape de lancement vous rencontrez des problèmes.

Problèmes connus

Les sections suivantes couvrent les problèmes connus et leurs solutions.

Impossible de se connecter au débogueur dans les applications en bac à sable (sandbox)

Le débogueur se connecte aux applications Xamarin.Mac via TCP, ce qui signifie que, par défaut, lorsque vous activez le bac à sable, il ne peut pas se connecter à l’application. Par conséquent, si vous essayez d’exécuter l’application sans les autorisations appropriées activées, vous obtenez une erreur « Impossible de se connecter au débogueur ».

Editing the entitlements in the App sandbox.

L’autorisation Autoriser le réseau sortant Connecter ions (client) est celle requise pour le débogueur, ce qui permet de déboguer normalement. Étant donné que vous ne pouvez pas déboguer sans celui-ci, nous avons mis à jour la CompileEntitlements cible pour msbuild ajouter automatiquement cette autorisation aux droits d’une application qui est en bac à sable pour les builds de débogage uniquement. Les builds de mise en production doivent utiliser les droits spécifiés dans le fichier des droits d’utilisation, non modifiés.

System.NotSupportedException : aucune donnée n’est disponible pour l’encodage 437

Lorsque vous incluez des bibliothèques tierces dans votre application Xamarin.Mac, vous pouvez obtenir une erreur sous la forme « System.NotSupportedException : Aucune donnée n’est disponible pour l’encodage 437 » lors de la tentative de compilation et d’exécution de l’application. Par exemple, les bibliothèques, telles que Ionic.Zip.ZipFile, peuvent lever cette exception pendant l’opération.

Cela peut être résolu en ouvrant les options du projet Xamarin.Mac, en accédant à Mac Build>Internationalization et case activée l’internationalisation ouest :

Editing the build options

Échec de la compilation (mm5103)

Cette erreur est généralement due à la publication d’une nouvelle version de Xcode et que vous avez installé la nouvelle version, mais qu’elle n’est pas encore exécutée. Avant d’essayer de compiler avec une nouvelle version de Xcode, vous devez d’abord exécuter cette version au moins une fois.

La première fois que vous exécutez une nouvelle version de Xcode, il installe plusieurs outils en ligne de commande requis par Xamarin.Mac. En outre, vous devez effectuer une build propre après la mise à jour de Xcode ou de votre version de Xamarin.Mac.

Si vous ne pouvez pas résoudre ce problème, envoyez un bogue.

Droits manquants.plist

La dernière version de Visual Studio pour Mac a supprimé la section Droits d’utilisation de l’éditeur Info.plist et l’a placée dans un éditeur de droits distincts.plist (pour une meilleure prise en charge multiplateforme avec Xamarin.iOS).

Une fois la nouvelle Visual Studio pour Mac installée, lorsque vous créez un projet d’application Xamarin.Mac, un fichier Entitlements.plist est automatiquement ajouté à l’arborescence du projet :

Selecting entitlements

Si vous double-cliquez sur le fichier Entitlements.plist , l’Éditeur de droits s’affiche :

Editing the entitlements

Pour les projets Xamarin.Mac existants, vous devez créer manuellement le fichier Entitlements.plist en cliquant avec le bouton droit sur le projet dans le panneau Solution et en sélectionnant Ajouter>un nouveau fichier.... Ensuite, sélectionnez la liste de propriétés vides Xamarin.Mac>:

Adding a new property list

Entrez Entitlements le nom, puis cliquez sur le bouton Nouveau . Si votre projet incluait précédemment un fichier de droits d’utilisation, vous serez invité à l’ajouter au projet au lieu de créer un fichier :

Verifying the overwrite of a file

Soutien communautaire sur les forums

La communauté de développeurs utilisant des produits Xamarin est incroyable et beaucoup visitent nos forums Xamarin.Mac pour partager des expériences et leur expertise. En outre, les ingénieurs Xamarin visitent régulièrement le forum pour vous aider.

Classement d’un bogue

Vos commentaires sont très importants pour nous. Si vous rencontrez des problèmes avec Xamarin.Mac :

Les problèmes GitHub sont tous publics. Il n’est pas possible de masquer des commentaires ou des pièces jointes.

Dans la mesure du possible, essayez d’inclure :

  • Un exemple simple reproduisant le problème. Si vous pouvez en fournir un, c’est inestimable.
  • La trace de pile complète du plantage.
  • Le code C# se rapportant au plantage.