Risoluzione dei problemi di connessione per un host di compilazione Xamarin.iOS

Questa guida presenta una procedura di risoluzione dei problemi che possono verificarsi durante l'uso del nuovo strumento di gestione connessione, inclusi i problemi di connettività e di SSH.

Percorso del file di registro

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

È possibile individuare i file di log passando a ? > Xamarin > Comprimi log in Visual Studio.

Dov'è l'app host di compilazione Xamarin?

L'host di compilazione Xamarin delle versioni precedenti di Xamarin.iOS non è più necessario. Visual Studio ora distribuisce automaticamente l'agente tramite Login remoto e lo esegue in background. Non ci sono app aggiuntive da eseguire nei computer Mac o Windows.

Risoluzione dei problemi di Login remoto

Importante

Questa procedura di risoluzione dei problemi è destinata principalmente ai problemi che si verificano durante la configurazione iniziale in un nuovo sistema. Se una connessione che in precedenza funzionava correttamente in un ambiente specifico smette di funzionare improvvisamente o funziona in modo intermittente, è possibile nella maggior parte dei casi passare direttamente al controllo se una delle seguenti procedure è utile:

  1. Controllare che le versioni di Xamarin.iOS installate nel Mac siano compatibili. Per eseguire questa operazione con Visual Studio 2017, assicurarsi di trovarsi nel canale di distribuzione Stabile in Visual Studio per Mac. In Visual Studio 2015 e versioni precedenti assicurarsi di trovarsi nello stesso canale di distribuzione in entrambi gli ambienti IDE.

    • In Visual Studio per Mac vai a Visual Studio per Mac > Controlla Aggiornamenti... per visualizzare o modificare il canale di aggiornamento.
    • In Visual Studio 2015 e versioni precedenti controllare il canale di distribuzione in Strumenti > Opzioni > Xamarin > Altro.
  2. Assicurarsi che Login remoto sia abilitato nel Mac. Impostare l'accesso su Solo questi utentie assicurarsi che l'utente Mac sia incluso nell'elenco o nel gruppo:

    Set access for Only these users

  3. Verificare che il firewall consenta le connessioni in ingresso attraverso la porta 22, la porta predefinita per SSH:

    Check that the firewall allows incoming connections through port 22

    Se l'opzione Automatically allow signed software to receive incoming connections (Consenti automaticamente al software firmato di ricevere connessioni in ingresso) è stata disabilitata, durante il processo di associazione OS X visualizza una finestra di dialogo con la richiesta di consentire a mono-sgen o a mono-sgen32 di ricevere connessioni in ingresso. Assicurarsi di fare clic su Consenti in questa finestra di dialogo:

    Click Allow on this dialog

  4. Verificare di aver effettuato la connessione con l'account utente del Mac e che sia attiva una sessione dell'interfaccia utente grafica.

  5. Assicurarsi di connettersi al Mac con il nome utente anziché con nome e cognome. In questo modo si evita una limitazione nota dell'uso di nome e cognome, relativa ai caratteri accentati.

    Per trovare il proprio nome utente è possibile eseguire il comando whoami in Terminal.app.

    Usando come esempio lo screenshot riportato di seguito, il nome dell'account è amyb e non Amy Burns:

    Getting the account name from the Terminal app

  6. Controllare che l'indirizzo IP in uso per il Mac sia corretto. È possibile trovare l'indirizzo IP in Preferenze > di sistema Condivisione > accesso remoto sul Mac.

    The IP address in the System Preferences app

  7. Dopo aver verificato l'indirizzo IP del Mac, eseguire il comando ping per tale indirizzo in cmd.exe in Windows:

    ping 10.1.8.95
    

    Se il ping ha esito negativo, il Mac non è instradabile dal computer Windows. Questo problema deve essere risolto a livello di configurazione della rete locale tra i due computer. Assicurarsi che entrambi i computer siano all'interno della stessa rete locale.

  8. Verificare quindi se il client ssh da OpenSSH può connettersi correttamente al Mac da Windows. Un modo per installare questo programma è tramite l'installazione di Git per Windows. È quindi possibile avviare un prompt dei comandi Git Bash e tentare di usare ssh nel Mac tramite nome utente e indirizzo IP:

    ssh amyb@10.1.8.95
    

  9. Se il passaggio 8 ha esito positivo, è possibile provare a eseguire un comando semplice, ad esempio ls, attraverso la connessione:

    ssh amyb@10.1.8.95 'ls'
    

    Questo comando dovrebbe elencare il contenuto della directory home del Mac. Se il comando ls funziona correttamente, ma la connessione di Visual Studio non funziona ancora, è possibile vedere la sezione Problemi e limitazioni noti relativa a complicazioni specifiche di Xamarin. Se nessuno di questi corrisponde al problema, inviare un nuovo report sui bug nella community degli sviluppatori andando a Inviare > commenti > e suggerimenti per inviare un problema in Visual Studio e allegare i log descritti in Controllare i file di log dettagliati.

  10. Se il passaggio 8 ha esito negativo, è possibile eseguire il comando seguente nel terminale del Mac per vedere se il server SSH accetti alcuna connessione:

    ssh localhost
    
  11. Se il passaggio 8 ha esito negativo ma il passaggio 10 ha esito positivo, molto probabilmente il problema è che la porta 22 nell'host di compilazione Mac non è accessibile da Windows a causa della configurazione di rete. Ecco alcuni problemi di configurazione possibili:

    • Le impostazioni del firewall di OS X non consentono la connessione. Ricontrollare il passaggio 3.

      In alcuni casi può anche succedere che lo stato della configurazione per app del firewall di OS X non sia valido e che le impostazioni di Preferenze di Sistema non riflettano il comportamento effettivo. Per ripristinare il comportamento predefinito può essere utile eliminare il file di configurazione (/Library/Preferences/com.apple.alf.plist) e riavviare il computer. Un modo per eliminare il file è immettere /Library/Preferences in Vai > Vai alla cartella in Finder e quindi spostare il file com.apple.alf.plist nel Cestino.

    • Le impostazioni del firewall di uno dei router tra il Mac e il computer Windows bloccano la connessione.

    • Anche Windows non consente le connessioni in uscita per la porta remota 22. Questo è insolito. È possibile configurare Windows Firewall in modo da non consentire le connessioni in uscita, ma l'impostazione predefinita consente tutte le connessioni in uscita.

    • L'host di compilazione del Mac non consente l'accesso alla porta 22 da tutti gli host esterni tramite una regola pfctl. Questo è improbabile, a meno di non avere la sicurezza di aver configurato pfctl in passato.

  12. Se il passaggio 8 ha esito negativo e anche il passaggio 10 ha esito negativo, è probabile che il problema risieda nel fatto che il processo del server SSH nel Mac non è in esecuzione o non è configurato per consentire l'accesso all'utente corrente. In questo caso, ricontrollare le impostazioni di Login remoto dal passaggio 2 prima di prendere in esame possibilità più complesse.

Problemi noti e limitazioni

Nota

Il contenuto di questa sezione è valido solo se è già stata effettuata la connessione all'host di compilazione Mac con il nome utente Mac e la password tramite il client SSH OpenSSH, come descritto nei passaggi 8 e 9 precedenti.

"Credenziali non valide. Riprovare".

Cause note:

  • Limitazione: questo errore può essere visualizzato quando si tenta di accedere all'host di compilazione tramite nome e cognome, se il nome include un carattere accentato. Si tratta di una limitazione della libreria SSH.NET usata da Xamarin per la connessione SSH. Soluzione alternativa: vedere il passaggio 5 descritto in precedenza.

"Non è possibile eseguire l'autenticazione con le chiavi SSH. Provare prima ad accedere con le credenziali"

Causa nota:

  • Restrizione di sicurezza SSH: questo messaggio indica più spesso che uno dei file o delle directory nel percorso completo di $HOME/.ssh/authorized_keys nel Mac dispone delle autorizzazioni di scrittura abilitate per altri membri del gruppo o . Correzione comune: eseguire chmod og-w "$HOME" al prompt dei comandi del terminale nel Mac. Per informazioni dettagliate sul file o sulla directory specifica che causa il problema, eseguire grep sshd /var/log/system.log > "$HOME/Desktop/sshd.log" nel terminale e quindi aprire il file sshd.log dal desktop e cercare "Authentication refused: bad ownership or modes" (Autenticazione rifiutata: proprietà o modalità non valide).

"Tentativo di connessione..." non giunge mai a completamento

  • Bug : questo problema può verificarsi in Xamarin 4.1 se la shell di accesso nel menu di scelta rapida Opzioni avanzate per l'utente Mac in Preferenze > di sistema Users & Groups è impostata su un valore diverso da /bin/bash. A partire da Xamarin 4.2, questo scenario genera invece il messaggio di errore "Non è stato possibile connettersi". Soluzione alternativa: ripristinare il valore predefinito originale della shell di accesso di /bin/bash.

"Non è stato possibile connettersi a MacBuildHost.local. Riprovare".

Cause segnalate:

  • Bug : alcuni utenti hanno visualizzato questo messaggio di errore insieme a un errore più dettagliato nei file di log "Si è verificato un errore imprevisto durante la configurazione di SSH per l'utente ... Timeout dell'operazione di sessione" quando si tenta di accedere all'host di compilazione usando un account utente di dominio di Active Directory o di altro servizio directory. Soluzione alternativa: accedere all'host di compilazione tramite un account utente locale.

  • Bug: questo errore è stato visualizzato in alcuni casi quando l'utente tenta di connettersi all'host di compilazione facendo doppio clic sul nome del Mac nella finestra di dialogo di connessione. Soluzione alternativa possibile: aggiungere manualmente il Mac usando l'indirizzo IP.

  • Bug : alcuni utenti hanno eseguito questo errore quando si usa una connessione di rete wireless tra l'host di compilazione Mac e Windows. Soluzione alternativa possibile: spostare entrambi i computer in una connessione di rete cablata.

  • Bug : in Xamarin 4.0 questo messaggio verrà visualizzato ogni volta che il file $HOME/.bashrc nel Mac contiene un errore. A partire da Xamarin 4.1, gli errori nel file con estensione bashrc non influiscono più sul processo di connessione. Soluzione alternativa: spostare il file con estensione bashrc in un percorso di backup oppure eliminarlo se non è necessario.

  • Bug : questo errore può essere visualizzato se la shell di accesso nel menu di scelta rapida Opzioni avanzate per l'utente Mac in Preferenze > di sistema Utenti e gruppi di sistema è impostata su un valore diverso da /bin/bash. Soluzione alternativa: modificare la shell di accesso impostando di nuovo il valore predefinito originale /bin/bash.

  • Limitazione: l'errore può verificarsi se l'host di compilazione Mac è connesso a un router che non ha accesso a Internet o se il Mac usa un server DNS nel quale si verifica un timeout a seguito di una ricerca di DNS inverso del computer Windows. Visual Studio impiega circa 30 secondi per recuperare l'impronta digitale SSH e infine non riesce a connettersi.

    Possibile soluzione alternativa: aggiungere "UseDNS no" al file sshd_config . Assicurarsi di leggere le informazioni su questa impostazione SSH prima di modificarla. Vedere ad esempio unix.stackexchange.com/questions/56941/what-is-the-point-of-sshd-usedns-option.

    I passaggi seguenti descrivono un modo per modificare l'impostazione. Per completare la procedura, è necessario avere effettuato l'accesso a un account amministratore nel Mac.

    1. Confermare il percorso del file sshd_config eseguendo ls /etc/ssh/sshd_config e ls /etc/sshd_config in un prompt dei comandi del terminale. Per tutti i passaggi rimanenti, assicurarsi di usare il percorso che non restituisce "Impossibile trovare il file o la directory".

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

    2. Eseguire cp /etc/ssh/sshd_config "$HOME/Desktop/" nel terminale per copiare il file sul desktop.

    3. Aprire il file dal desktop in un editor di testo. È ad esempio possibile eseguire open -a TextEdit "$HOME/Desktop/sshd_config" nel terminale.

    4. Aggiungere la riga seguente nella parte inferiore del file:

      UseDNS no
      
    5. Rimuovere tutte le righe UseDNS yes per assicurarsi che la nuova impostazione sia effettiva.

    6. Salvare il file.

    7. Eseguire sudo cp "$HOME/Desktop/sshd_config" /etc/ssh/sshd_config nel terminale per copiare il file modificato nella posizione originaria. Immettere la password, se richiesto.

    8. Disabilitare e riabilitare Login remoto in Preferenze di Sistema > Condivisione > Login remoto per riavviare il server SSH.

Cancellazione degli agenti Broker, IDB, di compilazione e Designer dal Mac

Se i file di log indicano un problema durante il passaggio di installazione, caricamento o avvio per uno degli agenti Mac, è possibile provare a eliminare la cartella di cache XMA per forzare un nuovo caricamento degli agenti da parte di Visual Studio.

  1. Eseguire il comando seguente nel terminale del Mac:

    open "$HOME/Library/Caches/Xamarin"
    
  2. Premere CTRL+clic sulla cartella XMA e selezionare Sposta nel Cestino:

    Move the XMA folder to Trash

  3. Anche in Windows è presente una cache che può essere utile cancellare. In Windows aprire il prompt dei comandi come amministratore:

    del %localappdata%\Temp\Xamarin\XMA
    

Messaggi di avviso

Questa sezione illustra alcuni messaggi che possono essere visualizzati nella finestra di output e nei log e che in genere è possibile ignorare.

"There is a mismatch between the installed Xamarin.iOS ... and the local Xamarin.iOS" (Mancata corrispondenza tra Xamarin.iOS installato... e Xamarin.iOS locale)

È possibile ignorare questo avviso, dopo aver verificato che sia Mac che Windows siano aggiornati allo stesso canale di distribuzione di Xamarin.

"Impossibile eseguire 'ls /usr/bin/mono': ExitStatus = 1"

È possibile ignorare questo messaggio, a condizione che il Mac esegua OS X 10.11 (El Capitan) o versione successiva. Questo messaggio non rappresenta un problema in OS X 10.11, perché Xamarin controlla anche /usr/local/bin/mono, ovvero il percorso previsto corretto per mono in OS X 10.11.

"Il servizio Bonjour 'MacBuildHost' non ha risposto con il relativo indirizzo IP."

È possibile ignorare questo messaggio, a meno che non si noti che la finestra di dialogo di connessione non visualizza l'indirizzo IP dell'host di compilazione Mac. Se l'indirizzo IP manca in tale finestra di dialogo, è comunque possibile aggiungere manualmente il Mac.

"User a from 10.1.8.95" and "input_userauth_request: invalid user a [preauth]"

Si può notare questo messaggio esaminando il file sshd.log. Questi messaggi fanno parte del processo di connessione normale. Vengono visualizzati perché Xamarin usa il nome utente a temporaneamente durante il recupero dell'impronta digitale SSH.

Finestra di output e file di log

Se Visual Studio rileva un errore durante la connessione all'host di compilazione, è possibile controllare la presenza di altri messaggi in due posizioni: la finestra di output e i file di log.

Finestra di output

La finestra di output è il punto di partenza migliore. Questa finestra visualizza i messaggi relativi ai passaggi principali e agli errori di connessione. Per visualizzare i messaggi di Xamarin nella finestra di output:

  1. Selezionare Visualizza > output dai menu o fare clic sulla scheda Output .
  2. Fare clic sul menu a discesa Mostra output di.
  3. Selezionare Xamarin.

Select Xamarin in the Output tab

File di log

Se la finestra di output non include informazioni sufficienti per diagnosticare il problema, i file di log rappresentano gli elementi successivi da esaminare. I file di log contengono messaggi di diagnostica aggiuntivi che non vengono visualizzati nella finestra di output. Per visualizzare i file di log:

  1. Avviare Visual Studio.

    Importante

    Si noti che i file con estensione svclogs non sono abilitati per impostazione predefinita. Per accedervi è necessario avviare Visual Studio con log dettagliati, come descritto nella guida corrispondente. Per altre informazioni, vedere il blog Troubleshooting Extensions with the Activity Log (Risoluzione dei problemi delle estensioni con il log attività).

  2. Tentare di connettersi all'host di compilazione.

  3. Dopo che Visual Studio ha generato l'errore di connessione, raccogliere i log dai log zip della Guida > di Xamarin>:

    Collect the logs from Help > Xamarin > Zip Logs

  4. Quando si apre il file con estensione zip, viene visualizzato un elenco di file simile all'esempio seguente. Per gli errori di connessione, i file più importanti sono i file *Ide.log e *Ide.svclog . Questi file contengono gli stessi messaggi in due formati leggermente diversi. Il file con estensione svclog, in formato XML, è utile se si vogliono esaminare i messaggi. Il file con estensione log, in testo normale, è utile se si vogliono filtrare i messaggi tramite strumenti da riga di comando.

    Per esaminare tutti i messaggi, selezionare e aprire il file con estensione svclog:

    Select the svclog file

  5. Il file con estensione svclog viene aperto nel visualizzatore di tracce dei servizi Microsoft. È possibile esaminare i messaggi per thread per visualizzare gruppi di messaggi correlati. Per esaminare i messaggi per thread, prima selezionare la scheda Grafico e quindi fare clic sul menu a discesa Modalità layout e selezionare Thread:

    Click the Layout Mode drop-down menu and select Thread

File di log dettagliati

Se i file di log normali non offrono comunque informazioni sufficienti per diagnosticare il problema, un'ultima tecnica da tentare consiste nell'abilitare la registrazione dettagliata. I log dettagliati sono preferibili anche per i report sui bug.

  1. Uscire da Visual Studio.

  2. Avviare il prompt dei comandi per gli sviluppatori.

  3. Per avviare Visual Studio con la registrazione dettagliata, al prompt dei comandi eseguire il comando seguente:

    devenv /log
    
  4. Tentare di connettersi all'host di compilazione da Visual Studio.

  5. Dopo che Visual Studio ha raggiunto l'errore di connessione, raccogliere i log dai log zip della Guida > di Xamarin>.

  6. Per copiare eventuali messaggi di log recenti dal server SSH in un file sul desktop, eseguire il comando seguente dal terminale nel Mac:

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

Se questi file di log dettagliati non forniscono indicazioni sufficienti per risolvere il problema direttamente, inviare un nuovo report sui bug allegando sia il file con estensione zip del passaggio 5 che il file con estensione log del passaggio 6.

Risoluzione dei problemi di provisioning automatico del Mac

File di log dell'IDE

Se si verificano problemi con il provisioning automatico del Mac, esaminare i log dell'IDE di Visual Studio 2017, archiviati in %LOCALAPPDATA%\Xamarin\Logs\15.0.

Risoluzione degli errori di compilazione e distribuzione

Questa sezione tratta alcuni problemi che possono verificarsi dopo la connessione di Visual Studio all'host di compilazione.

"Unable to connect to Address='192.168.1.2:22' with User='macuser'" (Impossibile connettersi all'indirizzo='192.168.1.2:22' con l'utente 'macuser')

Cause note:

  • Funzionalità di sicurezza di Xamarin 4.1: questo errore si verifica se si esegue il downgrade alla versione 4.0 di Xamarin dopo aver usato Xamarin 4.1 o versione successiva. In questo caso l'errore è associato all'avviso "Private key is encrypted but passphrase is empty" (La chiave privata è crittografata ma la passphrase è vuota). Si tratta di una modifica intenzionale dovuta a una nuova funzionalità di sicurezza in Xamarin 4.1. Correzione consigliata: eliminare id_rsa e id_rsa.pub da %LOCALAPPDATA%\Xamarin\MonoTouch e quindi riconnettersi all'host di compilazione Mac.

  • Restrizione di sicurezza SSH: quando questo messaggio è accompagnato dall'avviso aggiuntivo "Non è stato possibile autenticare l'utente usando le chiavi SSH esistenti", spesso significa uno dei file o delle directory nel percorso completo di $HOME/.ssh/authorized_keys nel Mac ha autorizzazioni di scrittura abilitate per altri membri del gruppo o . Correzione comune: eseguire chmod og-w "$HOME" al prompt dei comandi del terminale nel Mac. Per informazioni dettagliate sul file o sulla directory specifica che causa il problema, eseguire grep sshd /var/log/system.log > "$HOME/Desktop/sshd.log" nel terminale e quindi aprire il file sshd.log dal desktop e cercare "Authentication refused: bad ownership or modes" (Autenticazione rifiutata: proprietà o modalità non valide).

Non è possibile caricare le soluzioni da una condivisione di rete

Le soluzioni vengono compilate solo se si trovano nel file system di Windows locale o in un'unità mappata.

Le soluzioni salvate in una condivisione di rete possono generare errori o non consentire la compilazione. Tutti i file con estensione sln usati in Visual Studio devono essere salvati nel file system di Windows locale.

A causa di questo problema viene generato l'errore seguente:

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.

Profili di provisioning mancanti o errore "Failed to create the a fat library" (Non è stato possibile creare la libreria FAT)

Avviare Xcode nel Mac e verificare che l'account sviluppatore Apple personale sia connesso e che il profilo di sviluppo iOS personale sia stato scaricato:

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

"Tentativo di operazione socket verso una rete non raggiungibile"

Cause segnalate:

  • Miglioramento: questo errore può impedire compilazioni riuscite quando Visual Studio usa un indirizzo IPv6 per connettersi all'host di compilazione. Per la connessione all'host di compilazione gli indirizzi IPv6 non sono ancora supportati.

Non è possibile caricare il plug-in per Xamarin.iOS di Visual Studio dopo la reinstallazione del canale beta/alfa

Questo problema può presentarsi quando Visual Studio non riesce ad aggiornare la cache del componente MEF. In tal caso, può essere utile installare questa estensione di Visual Studio: https://visualstudiogallery.msdn.microsoft.com/22b94661-70c7-4a93-9ca3-8b6dd45f47cd

Questa operazione cancellerà la cache del componente MEF di Visual Studio, risolvendo i problemi dovuti al danneggiamento della cache.

Errori dovuti a processi host di compilazione esistenti nel Mac

I processi di connessioni all'host di compilazione precedenti possono talvolta interferire con il comportamento della connessione attiva corrente. Per verificare la presenza di eventuali processi esistenti, chiudere Visual Studio e quindi eseguire i comandi seguenti nel terminale nel Mac:

ps -A | grep mono

Running commands in Terminal on the Mac

Per terminare i processi esistenti usare il comando seguente:

killall mono

Cancellazione della cache di compilazione del Mac

Se durante la risoluzione di un problema di compilazione ci si vuole assicurare che il comportamento non sia correlato ad alcuno dei file di compilazione temporanei archiviati nel Mac, è possibile eliminare la cartella della cache di compilazione.

  1. Eseguire il comando seguente nel terminale del Mac:

    open "$HOME/Library/Caches/Xamarin"
    
  2. Premere CTRL+clic sulla cartella mtbs e selezionare Sposta nel Cestino:

    Move the mtbs folder to Trash