Solução de problemas de conexão de um host de build do Xamarin.iOS
Este guia fornece etapas de solução de problemas que podem ser encontrados usando o novo gerenciador de conexões, incluindo problemas de conectividade e de SSH.
Local do Arquivo de Log
- Mac –
~/Library/Logs/Xamarin.Messaging-[VERSION.BUILD]
- Janelas –
%LOCALAPPDATA%\Xamarin\Logs
Os arquivos de log podem ser localizados, navegando até Ajuda > Xamarin > Zip Logs no Visual Studio.
Onde está o Aplicativo de Host de Build do Xamarin?
O Host de Build do Xamarin das versões anteriores do Xamarin.iOS não é mais necessário. O Visual Studio agora implanta automaticamente o agente através de Logon Remoto e o executa em segundo plano. Não há nenhum aplicativo adicional que será executado em computadores Mac ou Windows.
Solução de Problemas de Logon Remoto
Importante
Essas etapas de solução de problemas se destinam principalmente a problemas que ocorrem durante a configuração inicial em um novo sistema. Se anteriormente você usar a conexão com êxito em um ambiente específico e, em seguida, a conexão parar de funcionar de repente ou intermitentemente, você poderá (na maioria dos casos) verificar diretamente se qualquer uma das seguintes ações ajuda:
- Elimine os processos restantes conforme descrito abaixo em Erros devido a processos de host de build existentes.
- Limpe os agentes conforme descrito em Limpando os agentes do broker, do BID, da compilação e do designer e, em seguida, use uma conexão com a Internet com fio e conecte-se diretamente pelo endereço IP, conforme descrito em Não foi possível se conectar ao MacBuildHost.local. Tente novamente..
Se nenhuma dessas opções solucionar o problema, siga as instruções na etapa 9 para registrar um novo relatório de bug.
Verifique se você tem as versões compatíveis do Xamarin.iOS instaladas no seu Mac. Para fazer isso com o Visual Studio 2017, verifique se você está no canal de distribuição Estável no Visual Studio para Mac. No Visual Studio 2015 e anteriores, verifique se você está no mesmo canal de distribuição em ambos os IDEs.
- No Visual Studio para Mac, vá para Visual Studio para Mac > Verificar atualizações... para exibir ou alterar o canal de atualização.
- No Visual Studio 2015 e versões anteriores, verifique o canal de distribuição em Opções > de ferramentas > Xamarin > Other.
Verifique se o Logon remoto está habilitado no Mac. Defina o acesso para Apenas esses usuários e verifique se o seu usuário Mac está incluído na lista ou no grupo:
Verifique se seu firewall permite conexões de entrada pela porta 22 – padrão para o SSH:
Se você desabilitou Permitir automaticamente que o software assinado receba conexões de entrada, o OS X apresentará uma caixa de diálogo durante o processo de emparelhamento pedindo para permitir que
mono-sgen
oumono-sgen32
receba conexões de entrada. Certifique-se de clicar em Permitir nessa caixa de diálogo:Verifique se você fez logon na conta do usuário nesse Mac e que tem uma sessão de GUI ativa.
Verifique se você está se conectando ao Mac com o nome de usuário em vez do Nome completo. Isso evita uma limitação conhecida para nomes completos que incluam caracteres acentuados.
Você pode encontrar o nome de usuário executando o comando
whoami
no Terminal.app.Por exemplo, na captura de tela abaixo, o nome da conta será amyb e não Amy Burns:
Verifique se o endereço IP que você está usando para o Mac está correto. Você pode encontrar o endereço IP em Preferências do Sistema > Compartilhamento > Logon Remoto no Mac.
Depois de confirmar o endereço IP do Mac, tente executar um
ping
nesse endereço nocmd.exe
no Windows:ping 10.1.8.95
Se o ping falhar, o Mac não estará roteável do computador Windows. Esse problema precisa ser resolvido no nível de configuração de rede local entre os 2 computadores. Certifique-se de que os dois computadores estejam na mesma Rede Local.
Em seguida, teste se o cliente
ssh
do OpenSSH pode conectar-se com êxito no Mac do Windows. Uma maneira de instalar este programa é instalar o Git para Windows. Em seguida, você pode iniciar um prompt de comando Git Bash e tentar fazerssh
no Mac com seu nome de usuário e endereço IP:ssh amyb@10.1.8.95
Se a etapa 8 for bem-sucedida, você poderá tentar executar um comando simples, como o
ls
através da conexão:ssh amyb@10.1.8.95 'ls'
Isso deve listar o conteúdo de seu diretório base no Mac. Se o comando
ls
funcionar corretamente, mas a conexão do Visual Studio ainda falhar, você poderá verificar a seção "Problemas conhecidos e limitações" sobre as complicações específicas do Xamarin. Se nenhum deles corresponder ao seu problema, registre um novo relatório de bug na Comunidade de desenvolvedores indo para Ajuda Enviar comentários Relatar um problema no Visual Studio e anexar os logs descritos em Verificar os arquivos de log detalhados.>>Se etapa 8 falhar, você poderá executar o seguinte comando no Terminal do Mac para ver se o servidor SSH está aceitando alguma conexão:
ssh localhost
Se a etapa 8 falhar, mas a etapa 10 tiver êxito, então o problema mais provável é a porta 22 no host de build do Mac, que não está acessível no Windows devido à configuração da rede. Possíveis problemas de configuração incluem:
As configurações de firewall do OS X estão desautorizando a conexão. Certifique-se de verificar novamente a etapa 3.
Ocasionalmente, a configuração por aplicativo para o firewall do OS X também pode terminar em um estado inválido, em que as configurações mostradas em Preferências do Sistema não refletem o comportamento real. Excluir o arquivo de configuração (/Library/Preferences/com.apple.alf.plist) e reinicializar o computador pode ajudar a restaurar o comportamento padrão. Uma maneira de excluir o arquivo é inserir no Localizador /biblioteca/preferências em Ir > Ir para a pasta e, em seguida, mover o arquivo com.apple.alf.plist para a Lixeira.
As configurações de firewall de um dos roteadores entre o Mac e o computador Windows está bloqueando a conexão.
O próprio Windows está impedindo conexões de saída na porta remota 22. Isso seria incomum. É possível configurar o Firewall do Windows para não permitir conexões de saída, mas a configuração padrão é permitir todas as conexões de saída.
O host de build do Mac não está permitindo acesso à porta 22 de todos os hosts externos por meio de uma regra
pfctl
. Isso é improvável, a menos que você se lembre de ter configurado apfctl
no passado.
Se a etapa 8 falhar e a etapa 10 falhar, é provável que o problema seja com o processo do servidor SSH no Mac, que não está em execução ou não está configurado para permitir que o usuário atual faça logon. Nesse caso certifique-se de verificar as configurações de Logon Remoto da etapa 2 antes de investigar outras possibilidades mais complicadas.
Problemas e limitações conhecidos
Observação
Esta seção se aplica apenas se você já se conectou com êxito ao host de build do Mac com seu nome de usuário e senha do Mac usando o cliente SSH OpenSSH, conforme discutido anteriormente nas etapas 8 e 9.
"Credenciais inválidas. Tente novamente."
Causas conhecidas:
- Limitação – este erro pode ocorrer ao tentar fazer logon no host de build usando o Nome Completo da conta, se o nome incluir um caractere acentuado. Esta é uma limitação da Biblioteca SSH.NET que o Xamarin usa para a conexão SSH. Solução alternativa: consulte a etapa 5 acima.
"Não é possível autenticar com chaves SSH. Tente fazer logon com credenciais primeiro"
Causa conhecida:
- Restrição de segurança SSH – Essa mensagem geralmente significa que um dos arquivos ou diretórios no caminho totalmente qualificado de $HOME/.ssh/authorized_keys no Mac tem permissões de gravação habilitadas para outros membros ou membros do grupo . Correção comum: executar
chmod og-w "$HOME"
em um prompt de comando do Terminal no Mac. Para obter detalhes sobre o arquivo ou diretório específico que está causando o problema, executegrep sshd /var/log/system.log > "$HOME/Desktop/sshd.log"
no Terminal e, em seguida, abra o arquivo sshd.log da área de trabalho e procure por "Autenticação recusada: modos ou propriedade inválida".
"Tentando se conectar..." nunca é concluído
- Bug – Esse problema pode acontecer no Xamarin 4.1 se o shell de login no menu de contexto Opções avançadas para o usuário do Mac nas Preferências > do Sistema Usuários & Grupos estiver definido como um valor diferente de /bin/bash. (A partir do Xamarin 4.2, esse cenário leva à mensagem de erro "Não foi possível conectar".) Solução alternativa: altere o shell de login de volta para o padrão original de /bin/bash.
"Não foi possível conectar ao MacBuildHost.local. Tente novamente."
Causas relatadas:
Bug – Alguns usuários viram essa mensagem de erro, juntamente com um erro mais detalhado nos arquivos de log "Ocorreu um erro inesperado ao configurar o SSH para o usuário ... A operação da sessão atingiu o tempo limite" ao tentar fazer logon no host de compilação usando uma conta de usuário do Active Directory ou de outro domínio de serviço de diretório. Solução alternativa: faça logon no host de build usando uma conta de usuário local como alternativa.
Bug – alguns usuários viram esse erro ao tentar se conectar ao host de build clicando duas vezes no nome do Mac na caixa de diálogo de conexão. Solução alternativa possível: adicionar manualmente o Mac usando o endereço IP.
Bug – Alguns usuários se depararam com esse erro ao usar uma conexão de rede sem fio entre o host de compilação do Mac e o Windows. Solução alternativa possível: mover ambos os computadores para uma conexão de rede com fio.
Bug – No Xamarin 4.0, essa mensagem aparecerá sempre que o arquivo $HOME/.bashrc no Mac contiver um erro. (A partir do Xamarin 4.1, erros no arquivo .bashrc não afetarão mais o processo de conexão.) Solução alternativa: mova o arquivo .bashrc para um local de backup (ou exclua-o se souber que não precisa dele).
Bug – Este erro pode aparecer se o shell de login no menu de contexto Opções avançadas para o usuário do Mac em Usuários das Preferências > do Sistema & Grupos estiver definido como um valor diferente de /bin/bash. Solução alternativa: mude o Login shell (Shell de logon) para o padrão original de /bin/bash.
Limitação – este erro pode ocorrer se o host de build do Mac estiver conectado a um roteador que não tem acesso à Internet (ou se o Mac estiver usando um servidor DNS que atinge o tempo limite ao ser solicitado para buscar o DNS reverso do computador Windows). O Visual Studio levará aproximadamente 30 segundos para recuperar a impressão digital de SSH e, eventualmente, falhará para se conectar.
Solução alternativa: Adicione "UseDNS no" ao arquivo sshd_config. Certifique-se de ler sobre essa configuração de SSH antes de alterá-la. Consulte, por exemplo unix.stackexchange.com/questions/56941/what-is-the-point-of-sshd-usedns-option.
As etapas a seguir descrevem uma forma para alterar a configuração. Você precisará fazer logon com uma conta de administrador no Mac para concluir as etapas.
Confirme o local do arquivo sshd_config executando
ls /etc/ssh/sshd_config
els /etc/sshd_config
em um prompt de comando do Terminal. Para todas as demais etapas, certifique-se de usar o local que não retornar "Não há tal arquivo ou diretório".Execute
cp /etc/ssh/sshd_config "$HOME/Desktop/"
no Terminal para copiar o arquivo para a sua área de trabalho.Abra o arquivo da área de trabalho em um editor de texto. Por exemplo, você pode executar
open -a TextEdit "$HOME/Desktop/sshd_config"
no Terminal.Adicione a seguinte linha na parte inferior do arquivo:
UseDNS no
Remova todas as linhas que dizem
UseDNS yes
para certificar-se de que a nova configuração entrará em vigor.Salve o arquivo.
Execute
sudo cp "$HOME/Desktop/sshd_config" /etc/ssh/sshd_config
no Terminal para copiar o arquivo editado de volta para o lugar dele. Insira sua senha se solicitado.Desabilite e reabilite o Logon Remoto em Preferências do Sistema > Compartilhamento > Logon Remoto para reiniciar o servidor SSH.
Desmarcar o Agente, o IDB, a build e os Agentes de Designer no Mac
Se os arquivos de log mostram um problema durante as etapas "Instalação", "Carregamento" ou "Iniciar" para qualquer um dos agentes do Mac, tente excluir a pasta de cache XMA para forçar o Visual Studio a carregá-los novamente.
Execute o seguinte comando no Terminal no Mac:
open "$HOME/Library/Caches/Xamarin"
Pressione Control e clique na pasta XMA e selecione Mover para Lixeira:
Há um cache no Windows também que pode ajudar a limpar. Abra um prompt de comando como administrador no Windows:
del %localappdata%\Temp\Xamarin\XMA
Mensagens de aviso
Esta seção discute algumas mensagens que podem aparecer nas Janela de Saída e nos logs que você geralmente pode ignorar.
"Há uma incompatibilidade entre o Xamarin.iOS instalado... e o Xamarin.iOS local"
Se você confirma que o Mac e Windows estão atualizados no mesmo canal de distribuição do Xamarin, esse aviso pode ser ignorado.
"Falha ao executar 'ls /usr/bin/mono': ExitStatus=1"
Essa mensagem pode ser ignorada se o Mac estiver executando o OS X 10.11 (El Capitan) ou mais recente. Esta mensagem não é um problema no OS X 10.11 porque o Xamarin também verifica /usr/local/bin/mono, que é o local correto esperado para o mono
no OS X 10.11.
"O serviço Bonjour 'MacBuildHost' não respondeu com seu endereço IP."
Essa mensagem pode ser ignorada, a menos que você observe que a caixa de diálogo de conexão não exibe o endereço IP do host de build do Mac. Se o endereço IP está ausente nessa caixa de diálogo, você ainda poderá adicionar manualmente o Mac.
"Usuário inválido a de 10.1.8.95" e "input_userauth_request: usuário inválido a [preauth]"
Você pode observar essas mensagens ao examinar o sshd.log. Essas mensagens fazem parte do processo normal de conexão. Elas aparecem porque o Xamarin usa o nome de usuário a temporariamente ao recuperar a Impressão digital de SSH.
Janela de Saída e Arquivos de Log
Se o Visual Studio encontrar um erro ao conectar-se ao host de build, há 2 locais para verificar se há mensagens adicionais: a Janela de Saída e os arquivos de log.
Janela de saída
A Janela de Saída é o melhor lugar para começar. Ela exibe mensagens sobre as principais etapas de conexão e erros. Para exibir as mensagens do Xamarin na Janela de Saída:
- Selecione Exibir > saída nos menus ou clique na guia Saída .
- Clique no menu suspenso Mostrar saída de.
- Selecione Xamarin.
Arquivos de log
Se a Janela de Saída não tem informações suficientes para diagnosticar o problema, os arquivos de log são o próximo lugar para se olhar. Os arquivos de log contêm mensagens de diagnóstico adicionais que não aparecem na Janela de Saída. Para exibir os arquivos de log:
Inicie o Visual Studio.
Importante
Observe que .svclogs não são habilitados por padrão. Para acessá-los, será necessário iniciar o Visual Studio com logs detalhados, conforme explicado no guia Logs de Versão. Para obter mais informações, consulte o blog Solução de problemas de extensões com o log de atividades.
Tente conectar-se ao host de build.
Depois que o Visual Studio atingir o erro de conexão, colete os logs da Ajuda > Xamarin > Zip Logs:
Quando você abrir o arquivo .zip, verá uma lista de arquivos semelhante ao exemplo a seguir. Para erros de conexão, os arquivos mais importantes são os arquivos *Ide.log e *Ide.svclog . Esses arquivos contêm as mesmas mensagens em dois formatos um pouco diferentes. O .svclog é um XML e é útil se você deseja procurar nas mensagens. O .log será um texto sem formatação e é útil se você quiser filtrar as mensagens usando ferramentas de linha de comando.
Para procurar em todas as mensagens, selecione e abra o arquivo .svclog:
O arquivo .svclog será aberto no Visualizador de Rastreamento de Serviço da Microsoft. Você pode procurar as mensagens por thread para ver grupos de mensagens relacionados. Para procurar por thread, primeiro selecione a guia Gráfico e, em seguida, clique no menu suspenso Modo de layout e selecione Thread:
Arquivos de Log detalhados
Se os arquivos de log normais ainda não fornecerem informações suficientes para diagnosticar o problema, a última técnica a se tentar é habilitar o registro em log detalhado. Os logs detalhados também são preferenciais em relatórios de bugs.
Encerre o Visual Studio.
Inicie um Prompt de Comando de Desenvolvedor.
Execute o seguinte comando no prompt de comando para inicializar o Visual Studio com o log detalhado:
devenv /log
Tente conectar-se ao host de build do Visual Studio.
Depois que o Visual Studio encontrar o erro de conexão, colete os logs em Ajuda > Xamarin > Logs de Zip.
Execute o seguinte comando no Terminal no Mac para copiar as mensagens de log recentes do servidor SSH em um arquivo na área de trabalho:
grep sshd /var/log/system.log > "$HOME/Desktop/sshd.log"
Se esses arquivos de log detalhados não fornecerem pistas suficientes para resolver diretamente o problema, registre um novo relatório de bugs e anexe o arquivo .zip da etapa 5 e o arquivo .log da etapa 6.
Solução de problemas do provisionamento automático do Mac
Arquivos de log do IDE
Se tiver problemas para usar o provisionamento automático do Mac, examine os logs do IDE do Visual Studio 2017, armazenados em %LOCALAPPDATA%\Xamarin\Logs\15.0.
Solução de problemas de Erros de build e Implantação
Esta seção aborda alguns problemas que podem ocorrer depois que o Visual Studio se conecta com êxito ao host de build.
"Não é possível se conectar ao Endereço = '192.168.1.2:22' com o usuário = 'macuser'"
Causas conhecidas:
Recurso de segurança do Xamarin 4.1 – este erro acontecerá se você fizer downgrade para o Xamarin 4.0 depois de usar o Xamarin 4.1 ou superior. Nesse caso o erro será acompanhado pelo aviso adicional "A chave privada está criptografada, mas a frase secreta está vazia". Esse é uma alteração intencional devida a um novo recurso de segurança do Xamarin 4.1. Correção recomendada: exclua id_rsa e id_rsa.pub de %LOCALAPPDATA%\Xamarin\MonoTouch e reconecte-se ao host de compilação do Mac.
Restrição de segurança SSH – Quando essa mensagem é acompanhada pelo aviso adicional "Não foi possível autenticar o usuário usando as chaves ssh existentes", isso geralmente significa que um dos arquivos ou diretórios no caminho totalmente qualificado de $HOME/.ssh/authorized_keys no Mac tem permissões de gravação habilitadas para outros membros ou membros do grupo. Correção comum: executar
chmod og-w "$HOME"
em um prompt de comando do Terminal no Mac. Para obter detalhes sobre o arquivo ou diretório específico que está causando o problema, executegrep sshd /var/log/system.log > "$HOME/Desktop/sshd.log"
no Terminal e, em seguida, abra o arquivo sshd.log da área de trabalho e procure por "Autenticação recusada: modos ou propriedade inválida".
As soluções não podem ser carregadas de um compartilhamento de rede
As soluções só serão compiladas se estiverem no sistema de arquivos local do Windows ou em uma unidade mapeada.
As soluções salvas em um compartilhamento de rede podem gerar erros ou recusarem-se completamente a compilar. Todos os arquivos .sln usados no Visual Studio devem ser salvos no sistema de arquivos local do Windows.
O seguinte erro será gerado por causa deste problema:
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.
Perfis de Provisionamento Ausentes ou Erro "Falha ao criar a uma biblioteca fat"
Inicialize o Xcode no Mac e verifique se fez logon na sua conta de desenvolvedor Apple e se o seu Perfil de Desenvolvimento do iOS foi baixado:
"Uma operação de soquete foi tentada em uma rede inacessível"
Causas relatadas:
- Aprimoramento – Este erro pode impedir compilações bem-sucedidas quando o Visual Studio está usando um endereço IPv6 para se conectar ao host de compilação. (A conexão de host de build ainda não dá suporte a endereços IPv6.)
O plug-in Xamarin.iOS do Visual Studio falha ao carregar após a reinstalação do canal alfa/beta
Esse problema pode ocorrer quando o Visual Studio não consegue atualizar o cache de componente MEF. Se esse for o caso, instalar esta extensão do Visual Studio pode ajudar: https://visualstudiogallery.msdn.microsoft.com/22b94661-70c7-4a93-9ca3-8b6dd45f47cd
Isso limpará o cache de componente do MEF do Visual Studio para corrigir problemas com a corrupção de cache.
Erros devido a Processos de Host de Build existentes no Mac
Os processos de conexões de host de build anteriores, às vezes, podem interferir com o comportamento da conexão ativa atual. Para verificar todos os processos existentes, feche o Visual Studio e, em seguida, execute os seguintes comandos no Terminal no Mac:
ps -A | grep mono
Para eliminar os processos existentes use o seguinte comando:
killall mono
Limpar o Cache de Build do Mac
Se você estiver solucionando um problema de build e deseja verificar se o comportamento não está relacionado a qualquer um dos arquivos de build temporários armazenados no Mac, você pode excluir a pasta de cache de build.
Execute o seguinte comando no Terminal no Mac:
open "$HOME/Library/Caches/Xamarin"
Pressione Control e clique na pasta mtbs e selecione Mover para Lixeira: