Solução de problemas de conexão para um host de compilação Xamarin.iOS
Este guia fornece etapas de solução de problemas para problemas que podem ser encontrados usando o novo gerenciador de conexões, incluindo problemas de conectividade e SSH.
Localização do arquivo de log
-
Mac –
~/Library/Logs/Xamarin.Messaging-[VERSION.BUILD]
-
Windows –
%LOCALAPPDATA%\Xamarin\Logs
Os ficheiros de log podem ser localizados acessando Ajuda > Xamarin > Zip Logs no Visual Studio.
Onde está o Xamarin Build Host App?
O Xamarin Build Host de versões mais antigas do Xamarin.iOS não é mais necessário. O Visual Studio agora implanta automaticamente o agente no Logon Remoto e o executa em segundo plano. Não há nenhum aplicativo adicional que será executado em máquinas Mac ou Windows.
Solução de problemas de login remoto
Importante
Essas etapas de solução de problemas destinam-se principalmente a problemas que acontecem durante a configuração inicial em um novo sistema. Se você já estava usando a conexão com êxito em um ambiente específico e, em seguida, a conexão repentina ou intermitentemente para de funcionar, você pode (na maioria dos casos) pular diretamente para verificar se alguma das seguintes ajuda:
- Elimine os processos remanescentes conforme descrito abaixo nos Erros de devido a processos existentes do anfitrião de compilação.
- Limpe os agentes conforme descrito em Limpando os agentes Broker, IDB, Build e Designere, em seguida, use uma conexão cablada à Internet e conecte-se diretamente usando o endereço IP, conforme descrito em Não foi possível se conectar ao MacBuildHost.local. Por favor, tente novamente..
Se nenhuma dessas opções corrigir o problema, siga as instruções no etapa 9 para arquivar um novo relatório de bug.
Verifique se você tem versões compatíveis do Xamarin.iOS instaladas no seu Mac. Para fazer isso com o Visual Studio 2017, certifique-se de que 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 se há atualizações... visualizar ou alterar o canal Update.
- No Visual Studio 2015 e versões anteriores, verifique o canal de distribuição em Ferramentas > Opções > Xamarin > Outros.
Certifique-se de que o Início de Sessão Remoto está ativado no Mac. Defina o acesso para Apenas estes utilizadorese certifique-se de que o utilizador do Mac está incluído na lista ou grupo:
Verifique se o firewall permite conexões de entrada através da porta 22 - o padrão para SSH:
Se tiver desativado Permitir automaticamente que o software assinado receba ligações de entrada, o OS X apresentará uma caixa de diálogo durante o processo de emparelhamento, solicitando permitir que
mono-sgen
oumono-sgen32
recebam ligações de entrada. Certifique-se de clicar em Permitir nesta janela de diálogo:Confirme que iniciou sessão na conta de utilizador nesse Mac e que tem uma sessão GUI ativa.
Certifique-se de que está a ligar ao Mac com o nome de utilizador em vez do Nome Completo. Isso evita uma limitação conhecida para nomes completos que incluem caracteres acentuados.
Você pode encontrar seu nome de usuário executando o comando
whoami
em Terminal.app.Por exemplo, na captura de tela abaixo, o nome da conta será zoed e não Zoe Drakou:
Verifique se o endereço IP que você está usando para o Mac está correto. Pode encontrar o endereço IP em Preferências do Sistema > Partilha > Início de Sessão Remota no Mac.
Depois de confirmar o endereço IP do Mac, execute um
ping
para esse endereço emcmd.exe
no Windows:ping 10.1.8.95
Se o ping falhar, o Mac não é roteável do computador Windows. Esse problema terá de ser resolvido ao nível da configuração da rede local entre os 2 computadores. Certifique-se de que ambas as máquinas estão na mesma rede local.
Em seguida, teste se o cliente
ssh
do OpenSSH pode se conectar com êxito ao Mac a partir do Windows. Uma maneira de instalar este programa é instalar o Git para Windows. Você pode então iniciar um prompt de comando do Git Bash e tentarssh
no Mac com seu nome de usuário e endereço IP:ssh zoed@10.1.8.95
Se etapa 8 for bem-sucedida, você pode tentar executar um comando simples, como
ls
sobre a conexão:ssh zoed@10.1.8.95 'ls'
Isso deve listar o conteúdo do seu diretório inicial 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 complicações específicas do Xamarin. Se nenhum deles corresponder ao seu problema, envie um novo relatório de bug na Comunidade de Desenvolvedores indo para Ajuda > Enviar Comentários > Relatar um problema no Visual Studio e anexe os logs descritos em Verifique os arquivos de log detalhados.Se passo 8 falhar, pode executar o seguinte comando no Terminal no Mac para ver se o servidor SSH está a aceitar quaisquer ligações:
ssh localhost
Se a etapa 8 falhar, mas etapa 10 for bem-sucedida, o problema é provavelmente que a porta 22 no host de compilação do Mac não está acessível a partir do Windows devido à configuração de rede. Os possíveis problemas de configuração incluem:
As configurações do firewall do OS X estão desativando 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 acabar em um estado inválido onde as configurações mostradas nas Preferências do Sistema não refletem o comportamento real. Excluir o arquivo de configuração (/Library/Preferences/com.apple.alf.plist) e reiniciar o computador pode ajudar a restaurar o comportamento padrão. Uma maneira de apagar o ficheiro é inserir /Library/Preferences em Ir > Ir para a pasta no Finder e, em seguida, mover o ficheiro 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á não permitindo conexões de saída para a 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 compilação do Mac está impedindo o acesso à porta 22 de todos os hosts externos por meio de uma regra de
pfctl
. Isso é improvável, a menos que você saiba que configuroupfctl
no passado.
Se a etapa 8 falhar e etapa 10 falhar, o problema é provável que o processo do servidor SSH no Mac não esteja em execução ou não esteja configurado para permitir que o usuário atual faça login. Neste caso, certifique-se de verificar novamente as configurações de login remoto da etapa 2 antes de investigar quaisquer possibilidades mais complicadas.
Problemas conhecidos e limitações
Observação
Esta seção só se aplica se você já tiver se conectado com êxito ao host de compilação do Mac com seu nome de usuário e senha do Mac usando o cliente OpenSSH SSH, conforme discutido nas etapas 8 e 9 acima.
"Credenciais inválidas. Por favor, tente novamente."
Causas conhecidas:
- Limitação – Este erro pode aparecer ao tentar fazer login no host de compilação usando a conta Nome Completo 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. Por favor, tente fazer login com credenciais primeiro"
Causa conhecida:
-
Restrições de segurança SSH – Esta mensagem normalmente significa que um dos ficheiros ou diretórios no caminho completo de $HOME/.ssh/authorized_keys no Mac tem permissões de gravação ativadas para outros membros ou grupo.
Common fix: Execute
chmod og-w "$HOME"
em um prompt de comando do Terminal no Mac. Para obter detalhes sobre qual arquivo ou diretório específico está causando o problema, executegrep sshd /var/log/system.log > "$HOME/Desktop/sshd.log"
no Terminal e, em seguida, abra o arquivo de sshd.log na área de trabalho e procure por "Autenticação recusada: propriedade incorreta ou modos".
"Tentando se conectar..." nunca conclui
- Bug – Este problema pode acontecer no Xamarin 4.1 se o shell de login no menu de contexto Opções Avançadas do para o usuário do Mac no 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 do shell de login do de volta para o padrão original de /bin/bash.
"Não foi possível se conectar ao MacBuildHost.local. Por favor, tente novamente."
Causas relatadas:
Bug – Alguns utilizadores viram esta mensagem de erro, juntamente com um erro mais detalhado nos ficheiros de registo, "Ocorreu um erro inesperado ao configurar o SSH para o utilizador ... A operação da sessão atingiu o tempo limite", ao tentar iniciar sessão no servidor de compilação usando uma conta de utilizador de domínio de Active Directory ou de outro serviço de diretório. Solução alternativa: Faça login no host de compilação usando uma conta de usuário local.
Bug – Alguns usuários viram esse erro ao tentar se conectar ao host de compilação clicando duas vezes no nome do Mac na caixa de diálogo de conexão. Solução alternativa possível: Adicione 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. Possível solução alternativa: Mova ambos os computadores para uma conexão de rede com fio.
Bug – No Xamarin 4.0, esta mensagem aparecerá sempre que o arquivo $HOME/.bashrc no Mac contiver um erro. (A partir do Xamarin 4.1, os erros no arquivo de .bashrc do não afetarão mais o processo de conexão.) Solução alternativa: mova o arquivo de .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 utilizador do Mac em Preferências do Sistema > Usuários e Grupos & estiver definido como um valor diferente de /bin/bash. Solução alternativa: Altere o do shell de login do de volta para o padrão original de /bin/bash.
Limitação – Este erro pode aparecer se o host de compilação do Mac estiver ligado a um router que não tem acesso à Internet (ou se o Mac estiver a usar um servidor DNS que esgota o tempo de resposta quando solicitado para a procura por DNS reverso do computador Windows). O Visual Studio levará aproximadamente 30 segundos para recuperar a impressão digital SSH e, eventualmente, não conseguir se conectar.
Solução alternativa possível: Adicione "UseDNS no" ao arquivo sshd_config. Certifique-se de ler sobre esta configuração SSH antes de alterá-la. Ver, por exemplo, unix.stackexchange.com/questions/56941/what-is-the-point-of-sshd-usedns-option.
As etapas a seguir descrevem uma maneira de alterar a configuração. Você precisará estar conectado a 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 etapas restantes, certifique-se de usar o local que não retornar "No such file or directory".Execute
cp /etc/ssh/sshd_config "$HOME/Desktop/"
no Terminal para copiar o ficheiro para o ambiente de trabalho.Abra o ficheiro a partir do ambiente de trabalho num 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 ficheiro:
UseDNS no
Remova todas as linhas que dizem
UseDNS yes
para garantir que a nova configuração entre 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 ao lugar. Digite sua senha, se solicitado.Desative e reative de Login Remoto em Preferências do Sistema > Compartilhamento > de Login Remoto para reiniciar o servidor SSH.
Limpando os agentes Broker, IDB, Build e Designer no Mac
Se seus arquivos de log mostrarem um problema durante as etapas "Instalação", "Upload" ou "Iniciar" para qualquer um dos agentes Mac, você pode tentar excluir a pasta de cache XMA para forçar o Visual Studio a recarregá-los.
Execute o seguinte comando no Terminal no Mac:
open "$HOME/Library/Caches/Xamarin"
Mantenha a tecla Control pressionada enquanto clica na pasta XMA e selecione Mover para a Lixeira:
Há um cache no Windows também que pode ajudar a limpar. Abra um prompt cmd como Administrador no Windows:
del %localappdata%\Temp\Xamarin\XMA
Mensagens de aviso
Esta seção discute algumas mensagens que podem aparecer nas janelas de saída e nos logs e que geralmente podes ignorar.
"Há uma incompatibilidade entre o Xamarin.iOS instalado ... e o Xamarin.iOS local"
Desde que você tenha confirmado que o Mac e o Windows estão atualizados para o mesmo canal de distribuição do Xamarin, esse aviso é ignorado.
"Falha ao executar 'ls /usr/bin/mono': ExitStatus=1"
Esta mensagem é ignorada desde que o Mac esteja a executar 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 esperado correto para mono
no OS X 10.11.
"O serviço Bonjour 'MacBuildHost' não respondeu com seu endereço IP."
Esta mensagem pode ser ignorada, a menos que notes que a caixa de diálogo de conexão não exibe o endereço IP do servidor de compilação do Mac. Se o endereço IP estiver ausente nessa caixa de diálogo, você ainda poderá adicionar manualmente o Mac.
"Utilizador inválido a a partir de 10.1.8.95" e "input_userauth_request: utilizador inválido a [preauth]"
Poderá reparar nestas mensagens se procurar no sshd.log. Essas mensagens fazem parte do processo normal de conexão. Eles aparecem porque o Xamarin usa o nome de usuário a temporariamente ao recuperar o SSH Fingerprint.
Janela de saída e arquivos de log
Se o Visual Studio tiver um erro ao se conectar ao host de compilação, há dois locais para consultar mensagens adicionais: a Janela de Saída e os arquivos de log.
Janela de saída
A janela Saída é o melhor lugar para começar. Ele exibe mensagens sobre as principais etapas de conexão e erros. Para visualizar as mensagens do Xamarin na janela Saída:
- Selecione Exibir > de saída nos menus ou clique na guia de saída.
- Clique no Mostrar saída no menu suspenso.
- Selecione Xamarin.
Ficheiros de registo
Se a janela Saída não incluir informações suficientes para diagnosticar o problema, o próximo passo é verificar os arquivos de log. Os arquivos de log contêm mensagens de diagnóstico adicionais que não aparecem na janela Saída. Para visualizar os ficheiros de registo:
Inicie o Visual Studio.
Importante
Observe que .svclogs não estão habilitados por padrão. Para acedê-los, precisarás iniciar o Visual Studio com logs detalhados, como explicado no guia Version Logs. Para mais informações, consulte o blog Extensões para resolução de problemas com o registo de atividades.
Tente se conectar ao host de compilação.
Depois de o Visual Studio encontrar o erro de conexão, obtenha os registos da Ajuda > Xamarin > Zip Logs:
Ao abrir o arquivo .zip, você verá uma lista de arquivos semelhante ao exemplo abaixo. Para erros de conexão, os arquivos mais importantes são os *Ide.log e *Ide.svclog. Esses arquivos contêm as mesmas mensagens em dois formatos ligeiramente diferentes. O .svclog é XML e é útil se você quiser navegar pelas mensagens. O .log é texto sem formatação e é útil se você quiser filtrar as mensagens usando ferramentas de linha de comando.
Para navegar por todas as mensagens, selecione e abra o arquivo de .svclog:
O ficheiro .svclog será aberto no Microsoft Service Trace Viewer. Você pode navegar pelas mensagens por thread para ver grupos relacionados de mensagens. Para navegar por tópicos, selecione primeiro a guia Graph e, em seguida, clique na lista suspensa Layout Mode e selecione Thread:
Arquivos de log detalhados
Se os arquivos de log normais ainda não fornecerem informações suficientes para diagnosticar o problema, uma última técnica a ser tentada é habilitar o registro detalhado. Os logs detalhados também são preferidos em relatórios de erros.
Feche o Visual Studio.
Inicie o Prompt de Comando do Desenvolvedor.
Execute o seguinte comando no prompt de comando para iniciar o Visual Studio com log detalhado:
devenv /log
Tente se conectar ao host de compilação do Visual Studio.
Após o Visual Studio atingir o erro de conexão, recolha os logs do Ajuda > Xamarin > Zip Logs.
Execute o seguinte comando no Terminal no Mac para copiar quaisquer mensagens de log recentes do servidor SSH para 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 o problema diretamente, arquivar um novo de relatório de bug e anexar o arquivo .zip da etapa 5 e o arquivo .log da etapa 6.
Solução de problemas de provisionamento automático de Mac
Arquivos de log do IDE
Se você encontrar algum problema ao usar de provisionamento automático do Mac, dê uma olhada nos logs do IDE do Visual Studio 2017, armazenados em %LOCALAPPDATA%\Xamarin\Logs\15.0.
Solução de problemas de erros de compilação e implantação
Esta seção aborda alguns problemas que podem acontecer depois que o Visual Studio se conecta com êxito ao host de compilação.
Não é possível conectar-se ao Endereço='192.168.1.2:22' com Utilizador='macuser'
Causas conhecidas:
do recurso de segurança Xamarin 4.1 – Este de erro acontecerá se você fizer o downgrade para o Xamarin 4.0 depois de usar o Xamarin 4.1 ou superior. Neste caso, o erro será acompanhado pelo aviso adicional "A chave privada está encriptada, mas a frase secreta está vazia". Esta é uma alteração intencional devido a um novo recurso de segurança no Xamarin 4.1. de correção recomendada: exclua id_rsa e id_rsa.pub do %LOCALAPPDATA%\Xamarin\MonoTouch e reconecte-se ao host de compilação do Mac.
Restrição de segurança SSH – Quando esta mensagem é acompanhada pelo aviso adicional "Não foi possível autenticar o utilizador usando as chaves SSH existentes", na maioria das vezes 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 ou membros do grupo. Common fix: Execute
chmod og-w "$HOME"
em um prompt de comando do Terminal no Mac. Para obter detalhes sobre qual arquivo ou diretório específico está causando o problema, executegrep sshd /var/log/system.log > "$HOME/Desktop/sshd.log"
no Terminal e, em seguida, abra o arquivo de sshd.log na área de trabalho e procure por "Autenticação recusada: propriedade incorreta ou modos".
As soluções não podem ser carregadas a partir 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 se recusar completamente a compilar. Todos os arquivos .sln usados no Visual Studio devem ser salvos no sistema de arquivos local do Windows.
O seguinte erro é gerado devido a esse 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 uma biblioteca fat"
Inicie o Xcode no Mac e certifique-se de que a sua conta de programador Apple iniciou sessão e que o seu Perfil de Desenvolvimento iOS está descarregado.
Foi tentada uma operação de socket numa rede inacessível.
Causas relatadas:
- Enhancement – 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 compilação ainda não suporta endereços IPv6.)
O plug-in do Xamarin.iOS Visual Studio não é carregado após a reinstalação do canal beta/alfa
Esse problema pode acontecer quando o Visual Studio falha ao atualizar o cache do 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 do componente MEF do Visual Studio para resolver problemas de corrupção do cache.
Erros devido a processos de compilação de host existentes no Mac
Processos de conexões de host de compilação anteriores às vezes podem interferir no comportamento da conexão ativa atual. Para verificar se há processos existentes, feche o Visual Studio e execute os seguintes comandos no Terminal no Mac:
ps -A | grep mono
Para matar os processos existentes, use o seguinte comando:
killall mono
Limpando o cache de compilação do Mac
Se você estiver solucionando um problema de compilação e quiser ter certeza de que o comportamento não está relacionado a nenhum dos arquivos de compilação temporários armazenados no Mac, você pode excluir a pasta de cache de compilação.
Execute o seguinte comando no Terminal no Mac:
open "$HOME/Library/Caches/Xamarin"
Clique com a tecla Control na pasta mtbs e selecione Mover para a Lixeira: