Condividi tramite


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

Questa guida fornisce i passaggi per la risoluzione dei problemi che potrebbero verificarsi usando la nuova gestione connessione, inclusi i problemi di connettività e SSH.

Percorso del file di log

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

I file di log possono trovarsi navigando su Guida > Xamarin > Log ZIP in Visual Studio.

Dov'è l'app host di compilazione Xamarin?

L'host di compilazione Xamarin di versioni precedenti di Xamarin.iOS non è più necessario. Visual Studio ora distribuisce automaticamente l'agente tramite Accesso remoto ed esegue l'agente in background. Non è disponibile alcuna app aggiuntiva che verrà eseguita nei computer Mac o Windows.

Risoluzione dei problemi relativi all'accesso remoto

Importante

Questi passaggi di risoluzione dei problemi sono destinati principalmente a problemi che si verificano durante la configurazione iniziale in un nuovo sistema. Se in precedenza è stata usata correttamente la connessione in un determinato ambiente e la connessione si interrompe improvvisamente o intermittentmente, è possibile (nella maggior parte dei casi) ignorare direttamente il controllo se uno dei seguenti elementi è utile:

  1. Verificare di avere versioni compatibili di Xamarin.iOS installate nel Mac. Per fare questo con Visual Studio 2017, assicurarsi di essere 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 IDE.

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

    Impostare l'accesso solo per questi utenti

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

    Verificare che il firewall consenta le connessioni in ingresso tramite la porta 22

    Se è stata disabilitata Consentire automaticamente al software firmato di ricevere connessioni in ingresso, OS X presenterà una finestra di dialogo durante il processo di associazione in cui viene chiesto di consentire mono-sgen o mono-sgen32 di ricevere connessioni in ingresso. Assicurarsi di fare clic su Consenti in questa finestra di dialogo:

    fare clic su Consenti in questa finestra di dialogo

  4. Verificare di aver eseguito l'accesso all'account utente in tale Mac e di avere una sessione GUI attiva.

  5. Assicurarsi di connettersi al Mac con il nome utente anziché il nome completo . In questo modo si evita una limitazione nota per i nomi completi che includono caratteri accentati.

    È possibile trovare il nome utente eseguendo il comando whoami in Terminal.app.

    Ad esempio, dallo screenshot seguente, il nome dell'account verrà zoed e non Zoe Drakou:

    Ottenere il nome dell'account dall'app Terminal

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

    L'indirizzo IP nell'app Preferenze di sistema

  7. Dopo aver confermato l'indirizzo IP del Mac, prova a eseguire un ping verso tale indirizzo su cmd.exe in Windows:

    ping 10.1.8.95
    

    Se il ping non riesce, il Mac non viene instradabile dal computer Windows. Questo problema dovrà essere risolto a livello di configurazione della rete locale tra i 2 computer. Assicurarsi che entrambi i computer si trovino nella stessa rete locale.

  8. Successivamente, verificare se il client ssh da OpenSSH può connettersi correttamente al Mac da Windows. Un modo per installare questo programma consiste nell'installare Git per Windows. È quindi possibile avviare un prompt dei comandi Git Bash e tentare di ssh nel Mac con il nome utente e l'indirizzo IP:

    ssh zoed@10.1.8.95
    

  9. Se passaggio 8 ha esito positivo, è possibile provare a eseguire un semplice comando come ls sulla connessione:

    ssh zoed@10.1.8.95 'ls'
    

    Questo dovrebbe elencare il contenuto della home directory nel Mac. Se il comando ls funziona correttamente ma la connessione di Visual Studio non riesce, è possibile controllare la sezione problemi noti e limitazioni sulle complicazioni specifiche di Xamarin. Se nessuno di questi corrisponde al problema, invia una nuova segnalazione di bug nel Developer Community passando attraverso Guida > Invia commenti e suggerimenti > Segnala un problema in Visual Studio e allega i registri descritti sotto Controlla i file di log dettagliati.

  10. Se passaggio 8 ha esito negativo, è possibile eseguire il comando seguente in Terminale sul Mac per verificare se il server SSH accetta qualsiasi connessione:

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

    • Le impostazioni del firewall os X non consentono la connessione. Assicurarsi di ricontrollare attentamente il passaggio 3.

      Occasionalmente la configurazione per app per il firewall OS X può anche terminare in uno stato non valido in cui le impostazioni visualizzate in Preferenze di sistema non riflettono il comportamento effettivo. Eliminazione del file di configurazione (/Library/Preferences/com.apple.alf.plist) e il riavvio del computer può aiutare a ripristinare il comportamento predefinito. Un modo per eliminare il file è inserire /Library/Preferences sotto Vai > Vai alla Cartella nel Finder, e successivamente 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.

    • Windows stesso non consente connessioni in uscita alla porta remota 22. Questo sarebbe insolito. È possibile configurare Windows Firewall per impedire le connessioni in uscita, ma l'impostazione predefinita consiste nel consentire tutte le connessioni in uscita.

    • L'host di compilazione Mac non consente l'accesso alla porta 22 da tutti gli host esterni tramite una regola di pfctl. Questa operazione è improbabile, a meno che non si sappia di aver configurato pfctl in passato.

  12. Se il passaggio 8 ha esito negativo e passaggio 10 ha esito negativo, è probabile che il processo del server SSH sul Mac non sia in esecuzione o non sia configurato per consentire all'utente corrente di accedere. In questo caso assicurarsi di controllare le impostazioni di accesso remoto dal passaggio 2 prima di esaminare eventuali possibilità più complesse.

Problemi noti e limitazioni

Nota

Questa sezione si applica solo se è già stata stabilita la connessione all'host di compilazione Mac con il nome utente e la password Mac usando il client SSH OpenSSH, come illustrato nei passaggi 8 e 9 precedenti.

"Credenziali non valide. Riprovare."

Cause conosciute:

  • Limitazione: questo errore può essere visualizzato quando si tenta di accedere all'host di build usando l'account Nome Completo 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 precedente.

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

Causa nota:

  • restrizioni di sicurezza SSH: questo messaggio indica più spesso che una delle directory o dei file nel percorso completo di $HOME/.ssh/authorized_keys sul Mac dispone delle autorizzazioni di scrittura abilitate per altri o membri del gruppo. Correzione comune: esegui chmod og-w "$HOME" in un prompt dei comandi del Terminale sul Mac. Per informazioni dettagliate su quale particolare file o directory 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 "Autenticazione rifiutata: proprietà o modalità non valida".

"Tentativo di connessione..." non viene mai completato

  • di 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 è impostato 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: modificare la shell di accesso all'impostazione predefinita originale 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 usando invece un account utente locale.

  • bug: alcuni utenti hanno visualizzato questo errore quando si tenta di connettersi all'host di compilazione facendo doppio clic sul nome del Mac nella finestra di dialogo di connessione. Possibile soluzione alternativa: Aggiungere manualmente il Mac usando l'indirizzo IP.

  • Bug – Diversi utenti si sono imbattuti in questo errore quando usano una connessione di rete wireless tra l'host di compilazione Mac e Windows. Possibile soluzione alternativa: 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 .bashrc non influiscono più sul processo di connessione. Soluzione alternativa: spostare il file .bashrc in un percorso di backup o eliminarlo se non è necessario.

  • Bug – questo errore può essere visualizzato se la shell di accesso nel menu contestuale Opzioni avanzate per l'utente Mac in Preferenze di sistema > Utenti e & Gruppi è impostata su un valore diverso da /bin/bash. Soluzione alternativa: modificare la shell di accesso all'impostazione predefinita originale di /bin/bash.

  • Limitazione: questo errore può essere visualizzato se l'host di compilazione Mac è connesso a un router che non ha accesso a Internet (o se il Mac utilizza un server DNS che va in timeout quando viene richiesta la ricerca inversa DNS del computer Windows). Visual Studio richiederà circa 30 secondi per recuperare l'impronta digitale SSH e alla fine non riuscirà a connettersi.

    Possibile soluzione alternativa: aggiungere "UseDNS no" al file sshd_config. Assicurarsi di leggere questa impostazione SSH prima di modificarla. Vedi per 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 i passaggi, sarà necessario accedere a un account amministratore sul Mac.

    1. Verificare il percorso del file di 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 restituire "Nessun file o directory di questo tipo".

      Esecuzione di ls /etc/ssh/sshd_config e ls /etc/sshd_config nel terminale

    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 che dicono UseDNS yes per assicurarsi che la nuova impostazione abbia effetto.

    6. Salvare il file.

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

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

Cancellazione degli agenti Broker, IDB, Build e Designer su Mac

Se i file di log mostrano un problema durante la fase di "Installazione", "Caricamento" o "Avvio" per uno degli agenti Mac, è possibile provare a eliminare la cartella della cache XMA per forzare Visual Studio a ricaricarli.

  1. Eseguire il comando seguente in Terminale sul Mac:

    open "$HOME/Library/Caches/Xamarin"
    
  2. Fare clic sul XMA cartella e selezionare Sposta nel Cestino:

    Spostare la cartella XMA nel Cestino

  3. In Windows è presente una cache che può essere utile per cancellare. Aprire un prompt dei comandi come amministratore in Windows:

    del %localappdata%\Temp\Xamarin\XMA
    

Messaggi di avviso

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

"C'è una mancata corrispondenza tra Xamarin.iOS installato... e il locale Xamarin.iOS"

Se si è verificato che sia Mac che Windows vengono aggiornati allo stesso canale di distribuzione Xamarin, questo avviso è ignorabile.

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

Questo messaggio è ignorabile purché il Mac esegua OS X 10.11 (El Capitan) o versione successiva. Questo messaggio non è un problema in OS X 10.11 perché Xamarin controlla anche /usr/local/bin/mono, che è la posizione prevista corretta per mono in OS X 10.11.

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

Questo messaggio non è ignorabile 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 è mancante in tale finestra di dialogo, è comunque possibile aggiungere manualmente il mac.

"Utente non valido a da 10.1.8.95" e "input_userauth_request: utente non valido a [preauth]"

È possibile notare questi messaggi se si esamina il sshd.log. Questi messaggi fanno parte del normale processo di connessione. Vengono visualizzati perché Xamarin usa il nome utente a temporaneamente quando si recupera l'impronta digitale SSH .

Finestra di output e file di log

Se Si verifica un errore in Visual Studio durante la connessione all'host di compilazione, sono disponibili 2 percorsi per verificare la presenza di messaggi aggiuntivi: la finestra Output e i file di log.

Finestra output

La finestra Output è la posizione migliore per iniziare. Vengono visualizzati messaggi relativi ai passaggi e agli errori di connessione principali. Per visualizzare i messaggi Xamarin nella finestra Output:

  1. Selezionare Visualizza > Output dai menu oppure fare clic sulla scheda Output.
  2. Fare clic sul Mostra l'output dal menu a tendina.
  3. Selezionare Xamarin.

Selezionare Xamarin nella scheda Output

File di log

Se la finestra Output non include informazioni sufficienti per diagnosticare il problema, i file di log sono la posizione successiva da cercare. I file di log contengono messaggi di diagnostica aggiuntivi che non vengono visualizzati nella finestra Output. Per visualizzare i file di log:

  1. Avviare Visual Studio.

    Importante

    Si noti che .svclogs non è abilitato per impostazione predefinita. Per accedervi, è necessario avviare Visual Studio con log verbosi, come illustrato nella guida Version Logs. Per ulteriori informazioni, consultare il blog intitolato Risoluzione dei problemi delle estensioni attraverso il Registro attività.

  2. Tentare di connettersi all'host di compilazione.

  3. Dopo che Visual Studio incontra l'errore di connessione, raccogli i log da Guida > Xamarin > Log ZIP:

    Raccogliere i log dalla Guida > Xamarin > log zip

  4. Quando si apre il file .zip, verrà visualizzato un elenco di file simili all'esempio seguente. Per gli errori di connessione, i file più importanti sono i file *Ide.log e *Ide.svclog file. Questi file contengono gli stessi messaggi in due formati leggermente diversi. Il .svclog è XML ed è utile se si desidera esplorare i messaggi. Il .log è testo normale ed è utile se si desidera filtrare i messaggi usando gli strumenti da riga di comando.

    Per esplorare tutti i messaggi, selezionare e aprire il file svclog:

    Selezionare il file svclog

  5. Il file di .svclog verrà aperto in Microsoft Service Trace Viewer. È possibile esplorare i messaggi in base al thread per visualizzare i gruppi correlati di messaggi. Per esplorare in base al thread, selezionare prima la scheda Graph, quindi fare clic sul menu a discesa modalità layout e selezionare Thread:

    Fare clic sul menu a discesa Modalità layout e selezionare Thread

File di log dettagliati

Se i normali file di log non forniscono ancora informazioni sufficienti per diagnosticare il problema, un'ultima tecnica da provare consiste nell'abilitare la registrazione dettagliata. Anche i log dettagliati sono preferiti nei report sui bug.

  1. Chiudi Visual Studio.

  2. Avvia il prompt dei comandi per sviluppatori .

  3. Esegui il seguente comando nel prompt dei comandi di Windows per avviare Visual Studio con log dettagliati.

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

  5. Dopo che Visual Studio ha generato l'errore di connessione, raccogliere i Log dalla guida > Xamarin > Log Zip.

  6. Eseguire il comando seguente in Terminale sul Mac per copiare eventuali messaggi di log recenti dal server SSH in un file sul desktop:

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

Se questi file di log dettagliati non forniscono indicazioni sufficienti per risolvere direttamente il problema, segnalare un nuovo bug e allegare sia il file .zip dal passaggio 5 che il .log del passaggio 6.

Risoluzione dei problemi relativi al provisioning automatico di Mac

File di log dell'IDE

Se riscontri problemi con il provisioning automatico di Mac, dai un'occhiata ai log dell'IDE di Visual Studio 2017, archiviati in %LOCALAPPDATA%\Xamarin\Logs\15.0.

Risoluzione degli errori di compilazione e distribuzione

Questa sezione illustra alcuni problemi che possono verificarsi dopo che Visual Studio si connette correttamente all'host di compilazione.

"Impossibile connettersi a Address='192.168.1.2:22' con User='macuser'"

Cause conosciute

  • funzionalità di sicurezza di Xamarin 4.1: questo errore si verificherà se si esegue il downgrade a Xamarin 4.0 dopo l'uso di Xamarin 4.1 o versione successiva. In questo caso l'errore verrà accompagnato dall'avviso aggiuntivo "La chiave privata è crittografata ma la passphrase è vuota". Si tratta di un intenzionale a causa di una nuova funzionalità di sicurezza in Xamarin 4.1. correzione consigliata: eliminare id_rsa e id_rsa.pub da %LOCALAPPDATA%\Xamarin\MonoTouche quindi riconnettersi all'host di compilazione Mac.

  • restrizione di sicurezza SSH: quando questo messaggio è accompagnato dal messaggio di avvertimento aggiuntivo "Non è stato possibile autenticare l'utente usando le chiavi SSH esistenti", significa spesso che uno dei file o delle directory nel percorso completo di $HOME/.ssh/authorized_keys sul Mac ha abilitato i permessi di scrittura per altri o per i membri del gruppo. Correzione comune: eseguire chmod og-w "$HOME" in Terminale sul Mac. Per informazioni dettagliate su quale particolare file o directory 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 "Autenticazione rifiutata: proprietà o modalità non valida".

Le soluzioni non possono essere caricate da una condivisione di rete

Le soluzioni verranno compilate solo se si trovano nel file system windows locale o in un'unità mappata.

Le soluzioni salvate in una condivisione di rete potrebbero generare errori o rifiutare completamente la compilazione. Tutti i file .sln usati in Visual Studio devono essere salvati nel file system 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 "Impossibile creare una libreria fat"

Avviare Xcode sul Mac e assicurarsi che l'account per sviluppatore Apple sia connesso e che il profilo di sviluppo iOS sia scaricato:

Verificare che l'account sviluppatore Apple sia connesso e che il profilo di sviluppo iOS venga scaricato

"Un'operazione socket è stata tentata a 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. La connessione host di compilazione non supporta ancora indirizzi IPv6.

Il plug-in di Visual Studio Xamarin.iOS non viene caricato dopo la reinstallazione del canale beta/alfa

Questo problema può verificarsi quando Visual Studio non aggiorna la cache dei componenti MEF. In questo caso, l'installazione di questa estensione di Visual Studio può essere utile: https://visualstudiogallery.msdn.microsoft.com/22b94661-70c7-4a93-9ca3-8b6dd45f47cd

In questo modo verrà cancellata la cache dei componenti MEF di Visual Studio per risolvere i problemi relativi al danneggiamento della cache.

Errori dovuti a processi host di compilazione esistenti nel Mac

I processi delle connessioni host di compilazione precedenti possono talvolta interferire con il comportamento della connessione attiva corrente. Per verificare la presenza di processi esistenti, chiudere Visual Studio e quindi eseguire i comandi seguenti in Terminale sul Mac:

ps -A | grep mono

Esecuzione di comandi nel terminale nel mac

Per terminare i processi esistenti, usare il comando seguente:

killall mono

Cancellazione della cache di compilazione Mac

Se si sta risolvendo un problema di compilazione e si vuole assicurarsi che il comportamento non sia correlato ad alcun file di compilazione temporaneo archiviato nel Mac, è possibile eliminare la cartella della cache di compilazione.

  1. Eseguire il comando seguente in Terminale sul Mac:

    open "$HOME/Library/Caches/Xamarin"
    
  2. Fare Ctrl-clic sulla cartella mtbs e selezionare Sposta nel Cestino:

    Spostare la cartella mtbs nel Cestino