Résolution des problèmes de connexion pour un hôte de build Xamarin.iOS

Ce guide fournit des étapes de résolution des problèmes qui peuvent être rencontrés au cours de l’utilisation du nouveau gestionnaire de connexions, notamment les problèmes de connectivité et SSH.

Emplacement du fichier journal

  • Mac~/Library/Logs/Xamarin.Messaging-[VERSION.BUILD]
  • Windows : %LOCALAPPDATA%\Xamarin\Logs

Les fichiers journaux peuvent être localisés en accédant à Aide > Xamarin > Journaux Zip dans Visual Studio.

Où se trouve l’application hôte de build Xamarin ?

L’hôte de build Xamarin des versions antérieures de Xamarin.iOS n’est plus nécessaire. Visual Studio déploie maintenant automatiquement l’agent sur une session à distance et l’exécute en arrière-plan. Aucune application supplémentaire n’est exécutée sur le Mac ou les ordinateurs Windows.

Résolution des problèmes de sessions à distance

Important

Ces étapes de résolution de problèmes s’appliquent principalement aux problèmes qui se produisent pendant la configuration initiale sur un nouveau système. Si vous avez déjà utilisé la connexion avec succès dans un environnement particulier et que celle-ci ne fonctionne plus soudainement ou par intermittence, vous pouvez, dans la plupart des cas, passer directement à vérifier si l’un des points suivants peut vous aider à résoudre le problème :

  1. Vérifiez que des versions compatibles de Xamarin.iOS sont installées sur votre Mac. Pour effectuer cette opération avec Visual Studio 2017, vérifiez que vous vous trouvez sur le canal de distribution Stable dans Visual Studio pour Mac. Dans Visual Studio 2015 et les versions antérieures, vérifiez que vous vous trouvez sur le même canal de distribution sur les deux IDE.

    • Dans Visual Studio pour Mac, accédez à Visual Studio pour Mac > Rechercher Mises à jour... pour afficher ou modifier le canal de mise à jour.
    • Dans Visual Studio 2015 et versions antérieures, case activée le canal de distribution sous Options > d’outils > Xamarin > Other.
  2. Vérifiez que l’option Session à distante est activée sur le Mac. Choisissez Uniquement ces utilisateurs comme type d’accès, puis vérifiez que l’utilisateur de votre Mac est inclus dans la liste ou le groupe :

    Set access for Only these users

  3. Vérifiez que votre pare-feu autorise les connexions entrantes via le port 22 (valeur par défaut pour SSH) :

    Check that the firewall allows incoming connections through port 22

    Si vous avez désactivé Autoriser automatiquement les logiciels signés à recevoir des connexions entrantes, OS X affiche une boîte de dialogue pendant le processus de couplage, demandant d’autoriser mono-sgen ou mono-sgen32 à recevoir des connexions entrantes. Cliquez sur Autoriser dans cette boîte de dialogue :

    Click Allow on this dialog

  4. Vérifiez que vous êtes connecté au compte d’utilisateur sur ce Mac et que vous avez une session d’interface graphique utilisateur active.

  5. Veillez à vous connecter au Mac avec le nom d’utilisateur plutôt qu’avec le nom complet. Cela évite une limitation connue relative aux noms complets incluant des caractères accentués.

    Pour trouver votre nom d’utilisateur, exécutez la commande whoami dans Terminal.app.

    Par exemple, dans la capture d’écran ci-dessous, le nom du compte sera amyb et non Amy Burns :

    Getting the account name from the Terminal app

  6. Vérifiez que l’adresse IP que vous utilisez pour le Mac est correcte. Vous trouverez l’adresse IP sous Préférences > système partageant > la connexion à distance sur le Mac.

    The IP address in the System Preferences app

  7. Une fois que vous avez confirmé l’adresse IP du Mac, effectuez un test ping à cette adresse dans cmd.exe sur Windows :

    ping 10.1.8.95
    

    Si le test ping échoue, le Mac n’est pas routable à partir de l’ordinateur Windows. Ce problème doit être résolu au niveau de la configuration du réseau local entre les deux ordinateurs. Vérifiez que les deux ordinateurs se trouvent sur le même réseau local.

  8. Effectuez ensuite un test pour savoir si le client ssh d’OpenSSH peut se connecter au Mac à partir de Windows. Une façon d’installer ce programme consiste à installer Git pour Windows. Vous pouvez ensuite démarrer une invite de commandes Git Bash et essayer une commande ssh sur le Mac avec votre nom d’utilisateur et votre adresse IP :

    ssh amyb@10.1.8.95
    

  9. Si l’étape 8 réussit, vous pouvez essayer d’exécuter une commande simple comme ls via la connexion :

    ssh amyb@10.1.8.95 'ls'
    

    Cette opération permet de répertorier le contenu de votre répertoire de base sur le Mac. Si la commande ls fonctionne correctement, mais que la connexion Visual Studio échoue toujours, vous pouvez vérifier la section Problèmes connus et limitations relative aux complications spécifiques à Xamarin. Si aucun de ces problèmes ne correspond à votre problème, envoyez un nouveau rapport de bogue sur la communauté des développeurs en accédant à l’aide de l’aide pour > envoyer des commentaires > signalez un problème dans Visual Studio et joignez les journaux décrits sous Vérifier les fichiers journaux détaillés.

  10. Si l’étape 8 échoue, vous pouvez exécuter la commande suivante dans Terminal sur le Mac pour voir si le serveur SSH accepte toutes les connexions :

    ssh localhost
    
  11. Si l’étape 8 échoue mais que l’étape 10 réussit, le problème est probablement que le port 22 sur l’hôte de build Mac n’est pas accessible à partir de Windows en raison de la configuration du réseau. Les problèmes de configuration possibles sont les suivants :

    • Les paramètres de pare-feu OS X interdisent la connexion. Vérifier soigneusement l’étape 3.

      Parfois, la configuration par application pour le pare-feu OS X peut également finir dans un état non valide dans lequel les paramètres affichés dans les Préférences Système ne reflètent pas le comportement réel. La suppression du fichier de configuration (/Library/Preferences/com.apple.alf.plist) et le redémarrage de l’ordinateur peuvent permettre de restaurer le comportement par défaut. Une façon de supprimer le fichier consiste à entrer /Library/Preferences sous Atteindre >Atteindre le dossier dans Finder, puis à déplacer le fichier com.apple.alf.plist vers la Corbeille.

    • Les paramètres de pare-feu de l’un des routeurs entre le Mac et l’ordinateur Windows bloquent la connexion.

    • Windows lui-même interdit les connexions sortantes vers le port distant 22. Cela serait inhabituel. Il est possible de configurer le Pare-feu Windows pour interdire les connexions sortantes, mais le paramètre par défaut consiste à autoriser toutes les connexions sortantes.

    • L’hôte de build Mac interdit l’accès au port 22 à partir de tous les hôtes externes à l’aide d’une règle pfctl. Cela est peu probable, sauf si vous savez que vous avez configuré pfctl dans le passé.

  12. Si l’étape 8 échoue et que l’étape 10 échoue également, il est probable que le processus du serveur SSH sur le Mac n’est pas en cours d’exécution ou n’est pas configuré pour autoriser l’utilisateur actuel à se connecter. Dans ce cas, veillez à vérifier soigneusement les paramètres de session à distance définis à l’étape 2 avant d’examiner des possibilités plus complexes.

Problèmes connus et limitations

Remarque

Cette section s’applique uniquement si vous vous êtes déjà connecté avec succès à l’hôte de build Mac avec votre nom d’utilisateur et mot de passe Mac à l’aide du client SSH OpenSSH, comme indiqué aux étapes 8 et 9 ci-dessus.

« Informations d’identification non valides. Réessayez. »

Causes connues :

  • Limitation : Cette erreur peut survenir lors d’une tentative de connexion à l’hôte de build à l’aide du nom complet du compte si ce nom comprend un caractère accentué. Il s’agit d’une limitation de la bibliothèque SSH.NET que Xamarin utilise pour la connexion SSH. Solution de contournement : Voir l’étape 5 ci-dessus.

« Authentification impossible avec des clés SSH. Essayez d’abord de vous connecter avec des informations d’identification »

Cause connue :

  • Restriction de sécurité SSH : ce message signifie le plus souvent que l’un des fichiers ou répertoires du chemin complet de $HOME/.ssh/authorized_keys sur le Mac dispose d’autorisations d’écriture activées pour d’autres membres du groupe. Correctif courant : Exécutez chmod og-w "$HOME" dans une invite de commandes Terminal sur le Mac. Pour plus d’informations sur le fichier ou répertoire particulier à l’origine du problème, exécutez grep sshd /var/log/system.log > "$HOME/Desktop/sshd.log" dans Terminal, puis ouvrez le fichier sshd.log à partir de votre bureau et recherchez « Authentication refused: bad ownership or modes » (Authentification refusée : propriété ou modes incorrects).

« Tentative de connexion... » ne s’arrête jamais

  • Bogue : ce problème peut se produire sur Xamarin 4.1 si l’interpréteur de commandes de connexion dans le menu contextuel Options avancées pour l’utilisateur Mac dans les préférences > système utilisateurs et groupes est défini sur une valeur autre que /bin/bash. (À compter de Xamarin 4.2, ce scénario conduit plutôt au message d’erreur « Impossible de se connecter ». Solution de contournement : remplacez l’interpréteur de commandes De connexion par défaut d’origine de /bin/bash.

« Connexion impossible à MacBuildHost.local. Réessayez. »

Causes signalées :

  • Bogue : quelques utilisateurs ont vu ce message d’erreur ainsi qu’une erreur plus détaillée dans les fichiers journaux « Une erreur inattendue s’est produite lors de la configuration de SSH pour l’utilisateur ... L’opération de session a expiré » lors de la tentative de connexion à l’hôte de build à l’aide d’un compte d’utilisateur de domaine de service Active Directory ou d’autres services d’annuaire. Solution de contournement : Connectez-vous à l’hôte de build à l’aide d’un compte d’utilisateur local à la place.

  • Bogue : Certains utilisateurs ont vu cette erreur lors d’une tentative de connexion à l’hôte de build en double-cliquant sur le nom du Mac dans la boîte de dialogue de connexion. Solution de contournement possible : Ajoutez manuellement le Mac à l’aide de l’adresse IP.

  • Bogue : certains utilisateurs ont rencontré cette erreur lors de l’utilisation d’une connexion réseau sans fil entre l’hôte de build Mac et Windows. Solution de contournement possible : Déplacez les deux ordinateurs sur une connexion réseau câblée.

  • Bogue : sur Xamarin 4.0, ce message s’affiche à tout moment lorsque le fichier $HOME/.bashrc sur le Mac contient une erreur. (À compter de Xamarin 4.1, les erreurs dans le fichier .bashrc n’affectent plus le processus de connexion.) Solution de contournement : déplacez le fichier .bashrc vers un emplacement de sauvegarde (ou supprimez-le si vous savez que vous n’en avez pas besoin).

  • Bogue : cette erreur peut apparaître si l’interpréteur de commandes de connexion dans le menu contextuel Options avancées de l’utilisateur Mac dans les préférences > système utilisateurs et groupes est défini sur une valeur autre que /bin/bash. Solution de contournement : Rétablissez la valeur par défaut d’origine /bin/bash pour l’environnement de démarrage.

  • Limitation : Cette erreur peut survenir si l’hôte de build Mac est connecté à un routeur qui n’a pas accès à Internet (ou si le Mac utilise un serveur DNS qui expire quand la recherche DNS inversée de l’ordinateur Windows est demandée). Visual Studio met environ 30 secondes pour récupérer l’empreinte digitale SSH et risque de ne pas parvenir à se connecter.

    Solution de contournement possible : ajoutez « UseDNS non » au fichier sshd_config . Veillez à lire les informations relatives à ce paramètre SSH avant de le modifier. Par exemple, consultez unix.stackexchange.com/questions/56941/what-is-the-point-of-sshd-usedns-option.

    Les étapes suivantes décrivent une façon de changer le paramètre. Vous devez être connecté à un compte administrateur sur le Mac pour les effectuer.

    1. Confirmez l’emplacement du fichier sshd_config en exécutant ls /etc/ssh/sshd_config et ls /etc/sshd_config dans une invite de commandes terminal. Pour toutes les étapes restantes, veillez à utiliser l’emplacement qui ne retourne pas « Aucun fichier ou répertoire de ce type ».

      Running ls /etc/ssh/sshd_config and ls /etc/sshd_config in the Terminal

    2. Exécutez cp /etc/ssh/sshd_config "$HOME/Desktop/" dans Terminal pour copier le fichier sur votre bureau.

    3. Ouvrez le fichier à partir de votre bureau dans un éditeur de texte. Par exemple, vous pouvez exécuter open -a TextEdit "$HOME/Desktop/sshd_config" dans Terminal.

    4. Ajoutez la ligne suivante au bas du fichier :

      UseDNS no
      
    5. Supprimez toutes les lignes qui indiquent UseDNS yes pour garantir que le nouveau paramètre prend effet.

    6. Enregistrez le fichier.

    7. Exécutez sudo cp "$HOME/Desktop/sshd_config" /etc/ssh/sshd_config dans Terminal pour copier le fichier modifié à son emplacement d’origine. Entrez votre mot de passe si vous y êtes invité.

    8. Désactivez et réactivez la Session à distance sous Préférences Système > Partage > Session à distance pour redémarrer le serveur SSH.

Désactivation des agents Broker, IDB, de build et Designer sur le Mac

Si vos fichiers journaux indiquent un problème lors des étapes « Installation », « Chargement » ou « Démarrage » pour n’importe lequel des agents de Mac, essayez de supprimer le dossier de cache XMA pour forcer Visual Studio à les charger à nouveau.

  1. Exécutez la commande suivante dans Terminal sur le Mac :

    open "$HOME/Library/Caches/Xamarin"
    
  2. Cliquez sur le dossier XMA en maintenant la touche Ctrl enfoncée, puis sélectionnez Placer dans la Corbeille :

    Move the XMA folder to Trash

  3. Il existe également un cache sur Windows qu’il peut être efficace de désactiver. Ouvrez une invite de commandes en tant qu’administrateur sur Windows :

    del %localappdata%\Temp\Xamarin\XMA
    

Messages d'avertissement

Cette section décrit quelques messages qui peuvent s’afficher dans les fenêtres et journaux de Sortie et que vous pouvez généralement ignorer.

« Il existe une incompatibilité entre la version installée de Xamarin.iOS ... et la version locale de Xamarin.iOS »

À partir du moment où vous avez vérifié que Mac et Windows sont tous les deux mis à jour avec le même canal de distribution Xamarin, cet avertissement peut être ignoré.

« Échec de l’exécution de 'ls /usr/bin/mono' : ExitStatus=1 »

Ce message peut être ignoré tant que le Mac exécute OS X 10.11 (El Capitan) ou une version plus récente. Ce message n’est pas un problème sur OS X 10.11, car Xamarin vérifie également /usr/local/bin/mono, qui est l’emplacement attendu correct pour mono sur OS X 10.11.

« Le service Bonjour 'MacBuildHost' n’a pas répondu avec son adresse IP. »

Ce message peut être ignoré sauf si vous remarquez que la boîte de dialogue de connexion n’affiche pas l’adresse IP de l’hôte de build Mac. Si l’adresse IP ne figure pas dans cette boîte de dialogue, vous pouvez toujours ajouter le Mac manuellement.

« Utilisateur non valide de 10.1.8.95 » et « input_userauth_request : utilisateur non valide a [préauth] »

Vous pouvez remarquer ce message si vous consultez le fichier sshd.log. Ces messages font partie du processus de connexion normal. Ils s’affichent car Xamarin utilise temporairement le nom d’utilisateur a lors de la récupération de l’empreinte digitale SSH.

Fenêtre Sortie et fichiers journaux

Si Visual Studio rencontre une erreur lors de la connexion à l’hôte de build, il y a deux emplacements dans lesquels rechercher les messages supplémentaires : la fenêtre Sortie et les fichiers journaux.

Fenêtre Sortie

La fenêtre Sortie est le meilleur endroit pour commencer. Elle affiche des messages relatifs aux principales étapes et erreurs de connexion. Pour afficher les messages Xamarin dans la fenêtre Sortie :

  1. Sélectionnez Afficher > la sortie dans les menus ou cliquez sur l’onglet Sortie .
  2. Cliquez sur le menu déroulant Afficher la sortie à partir de.
  3. Sélectionnez Xamarin.

Select Xamarin in the Output tab

Fichiers journaux

Si la fenêtre Sortie n’inclut pas suffisamment d’informations pour diagnostiquer le problème, les fichiers journaux constituent l’emplacement suivant à consulter. Les fichiers journaux contiennent des messages de diagnostic supplémentaires qui n’apparaissent pas dans la fenêtre Sortie. Pour consulter les fichiers journaux :

  1. Démarrez Visual Studio.

    Important

    Notez que les fichiers .svclogs ne sont pas activés par défaut. Pour y accéder, vous devez démarrer Visual Studio avec les journaux détaillés, comme expliqué dans le guide des journaux des versions. Pour plus d’informations, reportez-vous au blog Troubleshooting Extensions with the Activity Log.

  2. Tentez de vous connecter à l’hôte de build.

  3. Une fois que Visual Studio a atteint l’erreur de connexion, collectez les journaux d’activité à partir de l’aide des journaux zip Xamarin > :>

    Collect the logs from Help > Xamarin > Zip Logs

  4. Quand vous ouvrez le fichier .zip, une liste de fichiers semblable à l’exemple ci-dessous s’affiche. Pour les erreurs de connexion, les fichiers les plus importants sont les fichiers *Ide.log et *Ide.svclog . Ces fichiers contiennent les mêmes messages dans deux formats légèrement différents. Le fichier.svclog est au format XML. Il est utile si vous voulez parcourir les messages. Le fichier .log est du texte brut. Il est utile si vous voulez filtrer les messages à l’aide d’outils en ligne de commande.

    Pour parcourir tous les messages, sélectionnez et ouvrez le fichier .svclog :

    Select the svclog file

  5. Le fichier .svclog s’ouvre dans Microsoft Service Trace Viewer. Vous pouvez parcourir les messages par thread pour voir les groupes connexes de messages. Pour parcourir par thread, sélectionnez tout d’abord l’onglet Graphe, puis cliquez sur le menu déroulant Mode disposition et sélectionnez Thread :

    Click the Layout Mode drop-down menu and select Thread

Fichiers journaux détaillés

Si les fichiers journaux normaux ne fournissent toujours pas suffisamment d’informations pour diagnostiquer le problème, une dernière technique à essayer consiste à activer la journalisation détaillée. Les journaux détaillés sont également privilégiés sur les rapports de bogue.

  1. Quittez Visual Studio.

  2. Démarrez une invite de commandes développeur.

  3. Exécutez la commande suivante dans l’invite de commandes pour lancer Visual Studio avec la journalisation détaillée :

    devenv /log
    
  4. Tentez de vous connecter à l’hôte de build à partir de Visual Studio.

  5. Une fois que Visual Studio a atteint l’erreur de connexion, collectez les journaux d’activité à partir de l’aide des journaux zip Xamarin>.>

  6. Exécutez la commande suivante dans Terminal sur le Mac pour copier tous les messages de journal récents à partir du serveur SSH dans un fichier sur votre bureau :

    grep sshd /var/log/system.log > "$HOME/Desktop/sshd.log"
    

Si ces fichiers journaux détaillés ne fournissent pas suffisamment d’indices pour résoudre le problème directement, envoyez un nouveau rapport de bogue en joignant le fichier .zip de l’étape 5 et le fichier .log de l’étape 6.

Résolution des problèmes de provisionnement Mac automatique

Fichiers journaux IDE

Si vous rencontrez des problèmes d’utilisation du provisionnement Mac automatique, examinez les journaux IDE Visual Studio 2017, stockés dans %LOCALAPPDATA%\Xamarin\Logs\15.0.

Résolution des erreurs de build et de déploiement

Cette section aborde quelques problèmes qui peuvent se produire une fois Visual Studio correctement connecté à l’hôte de build.

« Impossible de se connecter à Address='192.168.1.2:22' avec User='macuser' »

Causes connues :

  • Fonctionnalité de sécurité Xamarin 4.1 : Cette erreur se produit si vous revenez à la version antérieure Xamarin 4.0 après avoir utilisé Xamarin 4.1 ou une version ultérieure. Dans ce cas, l’erreur est associée à l’avertissement « La clé privée est chiffrée mais la phrase secrète est vide ». Il s’agit d’un changement intentionnel en raison d’une nouvelle fonctionnalité de sécurité de Xamarin 4.1. Correctif recommandé : supprimez id_rsa et id_rsa.pub de %LOCALAPPDATA%\Xamarin\MonoTouch, puis reconnectez-vous à l’hôte de build Mac.

  • Restriction de sécurité SSH : lorsque ce message est accompagné de l’avertissement supplémentaire « Impossible d’authentifier l’utilisateur à l’aide des clés SSH existantes », cela signifie généralement l’un des fichiers ou répertoires du chemin complet d '$HOME/.ssh/authorized_keys sur le Mac dispose d’autorisations d’écriture activées pour d’autres membres ou membres de groupe . Correctif courant : Exécutez chmod og-w "$HOME" dans une invite de commandes Terminal sur le Mac. Pour plus d’informations sur le fichier ou répertoire particulier à l’origine du problème, exécutez grep sshd /var/log/system.log > "$HOME/Desktop/sshd.log" dans Terminal, puis ouvrez le fichier sshd.log à partir de votre bureau et recherchez « Authentication refused: bad ownership or modes » (Authentification refusée : propriété ou modes incorrects).

Impossible de charger des solutions à partir d’un partage réseau

Les solutions ne sont compilées que si elles se trouvent sur le système de fichiers Windows local ou sur un lecteur mappé.

Les solutions enregistrées dans un partage réseau peuvent lever des erreurs ou purement refuser de se compiler. Tous les fichiers .sln utilisés dans Visual Studio doivent être enregistrés sur le système de fichiers Windows local.

L’erreur suivante est levée en raison de ce problème :

error : Building from a network share path is not supported at the moment. Please map a network drive to '\\SharedSources\HelloWorld\HelloWorld' or copy the source to a local directory.

Profils de provisionnement manquants ou erreur « Failed to create the a fat library »

Lancez Xcode sur le Mac, puis vérifiez que votre compte de développeur Apple est connecté et que votre profil de développement iOS est téléchargé :

Ensuring that the Apple developer account is logged in and the iOS Development Profile is downloaded

« Une opération de socket a été tentée sur un réseau impossible à atteindre »

Causes signalées :

  • Amélioration : cette erreur peut empêcher les builds réussies lorsque Visual Studio utilise une adresse IPv6 pour se connecter à l’hôte de build. (La connexion de l’hôte de build ne prend pas encore en charge les adresses IPv6.)

Le chargement du plug-in Xamarin.iOS Visual Studio échoue après la réinstallation d’un canal bêta/alpha

Ce problème peut se produire quand Visual Studio ne parvient pas à actualiser le cache du composant MEF. Si tel est le cas, il peut vous être utile d’installer cette extension de Visual Studio : https://visualstudiogallery.msdn.microsoft.com/22b94661-70c7-4a93-9ca3-8b6dd45f47cd.

Cette opération efface le cache du composant MEF Visual Studio pour résoudre les problèmes liés à l’endommagement du cache.

Erreurs dues à des processus hôtes de build existants sur le Mac

Des processus de connexions d’hôtes de build précédentes peuvent parfois interférer avec le comportement de la connexion active actuelle. Pour rechercher d’éventuels processus existants, fermez Visual Studio, puis exécutez les commandes suivantes dans Terminal sur le Mac :

ps -A | grep mono

Running commands in Terminal on the Mac

Pour arrêter les processus existants, utilisez la commande suivante :

killall mono

Effacement du cache de build Mac

Si vous résolvez un problème de génération et que vous voulez être certain que le comportement n’est pas lié à des fichiers de build temporaires stockés sur le Mac, vous pouvez supprimer le dossier du cache de build.

  1. Exécutez la commande suivante dans Terminal sur le Mac :

    open "$HOME/Library/Caches/Xamarin"
    
  2. Cliquez sur le dossier mtbs en maintenant la touche Ctrl enfoncée, puis sélectionnez Placer dans la Corbeille :

    Move the mtbs folder to Trash