Solucionar problemas de conexión del host de compilación de Xamarin.iOS

En esta guía se proporcionan los pasos necesarios para solucionar los problemas que se pueden producir al usar el nuevo administrador de conexiones, incluidos los problemas de conectividad y SSH.

Ubicación de archivo de registro

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

Para encontrar los archivos de registro, vaya a Ayuda > Xamarin > Comprimir registros en Visual Studio.

¿Dónde está la aplicación host de compilación de Xamarin?

El host de compilación de Xamarin de versiones anteriores de Xamarin.iOS ya no es necesario. Visual Studio ahora implementa automáticamente el agente en el inicio de sesión remoto y lo ejecuta en segundo plano. No se ejecutará ninguna aplicación adicional en la máquina Mac o Windows.

Solucionar problemas del inicio de sesión remoto

Importante

Estos pasos están pensados principalmente para solucionar los problemas que se producen durante la instalación inicial en un sistema nuevo. Si ha estado utilizando anteriormente la conexión sin problemas en un entorno concreto y la conexión dejó de funcionar de repente o de vez en cuando, puede (en la mayoría de los casos) pasar directamente a comprobar si ayuda algo de lo siguiente:

  1. Compruebe que tiene instaladas versiones de Xamarin.iOS compatibles en el equipo Mac. Para hacer esto con Visual Studio 2017, asegúrese de que se encuentra en el canal de distribución estable en Visual Studio para Mac. En Visual Studio 2015 y anterior, asegúrese de que se encuentra en el mismo canal de distribución en ambos IDE.

    • En Visual Studio para Mac, vaya a Visual Studio para Mac > Buscar Novedades... para ver o cambiar el canal de actualización.
    • En Visual Studio 2015 y versiones anteriores, compruebe el canal de distribución en Opciones de herramientas > Xamarin > Otros>.
  2. Asegúrese de que esté habilitada la opción Inicio de sesión remoto en el equipo Mac. Establezca el acceso para Solo estos usuarios y asegúrese de que su usuario de Mac esté incluido en la lista o grupo:

    Set access for Only these users

  3. Compruebe que el firewall permita las conexiones entrantes a través del puerto 22, el predeterminado para SSH:

    Check that the firewall allows incoming connections through port 22

    Si ha desactivado Automatically allow signed software to receive incoming connections (Permitir automáticamente que el software firmado reciba conexiones entrantes), OS X mostrará un cuadro de diálogo durante el proceso de emparejamiento en el que se le preguntará si se permite que mono-sgen o mono-sgen32 reciban conexiones entrantes. Haga clic en Permitir en este cuadro de diálogo:

    Click Allow on this dialog

  4. Confirme que ha iniciado sesión en la cuenta de usuario en ese equipo Mac y que tiene una sesión activa en la GUI.

  5. Asegúrese de que se está conectando al equipo Mac con el nombre de usuario, en lugar de con el nombre completo. De este modo se evita una limitación conocida que se aplica a los nombres completos que incluyen caracteres acentuados.

    Para encontrar su nombre de usuario, ejecute el comando whoami en Terminal.app.

    Por ejemplo, en la siguiente captura de pantalla, el nombre de cuenta será amyb y no Amy Burns:

    Getting the account name from the Terminal app

  6. Compruebe que la dirección IP que usa para el equipo Mac es correcta. Encontrará la dirección IP en Preferencias del sistema > Compartir > Inicio de sesión remoto en el equipo Mac.

    The IP address in the System Preferences app

  7. Una vez que haya confirmado la dirección IP del equipo Mac, intente hacer ping a esa dirección en cmd.exe en Windows:

    ping 10.1.8.95
    

    Si se produce un error al hacer ping, significa que el equipo Mac no es enrutable desde el equipo Windows. Deberá resolver ese problema en la configuración de red de área local entre los dos equipos. Asegúrese de que ambas máquinas estén en la misma red local.

  8. Después, pruebe si el cliente ssh OpenSSH puede conectarse correctamente al equipo Mac desde Windows. Una manera de instalar este programa consiste en instalar Git para Windows. Luego, puede iniciar un símbolo del sistema Git Bash e intentar conectarlo mediante ssh al equipo Mac con su nombre de usuario y dirección IP:

    ssh amyb@10.1.8.95
    

  9. Si el paso 8 se realiza correctamente, puede intentar ejecutar un comando simple como ls en la conexión:

    ssh amyb@10.1.8.95 'ls'
    

    Esto debería mostrar el contenido de su directorio particular en el equipo Mac. Si el comando ls funciona correctamente pero la conexión de Visual Studio sigue sin funcionar, puede comprobar la sección titulada Problemas y limitaciones conocidos sobre problemas específicos de Xamarin. Si ninguno de ellos coincide con el problema, registre un nuevo informe de errores en la Comunidad de desarrolladores; para ello, vaya a Ayuda para > enviar un informe de comentarios > en Visual Studio y adjunte los registros descritos en Comprobar los archivos de registro detallados.

  10. Si se produce un error en el paso 8, puede ejecutar el comando siguiente en Terminal en el equipo Mac para ver si el servidor SSH acepta alguna conexión:

    ssh localhost
    
  11. Si se produce un error en el paso 8 pero el paso 10 se realiza correctamente, lo más probable es que el problema se deba a que el puerto 22 del host de compilación de Mac no es accesible desde Windows debido a la configuración de red. Entre los posibles problemas de configuración se incluyen los siguientes:

    • La configuración del firewall de OS X no permite la conexión. Asegúrese de comprobar de nuevo el paso 3.

      En ocasiones, la configuración por aplicación del firewall de OS X también puede derivar en un estado no válido, en el que la configuración que se muestra en las preferencias del sistema no refleja el comportamiento real. Si elimina el archivo de configuración (/Library/Preferences/com.apple.alf.plist) y reinicia el equipo, puede ayudar a restaurar el comportamiento predeterminado. Una manera de eliminar el archivo consiste en escribir /Library/Preferences en Ir > Ir a la carpeta en el Finder y, después, mover el archivo com.apple.alf.plist a la papelera.

    • La configuración del firewall de uno de los enrutadores entre el equipo Mac y el equipo Windows está bloqueando la conexión.

    • Windows no permite las conexiones salientes al puerto remoto 22. Esto no es habitual. Es posible configurar el Firewall de Windows de modo que no permita las conexiones salientes, pero la configuración predeterminada permite todas las conexiones salientes.

    • El host de compilación de Mac no permite el acceso al puerto 22 desde ningún host externo mediante una regla pfctl. Esto es poco probable, a menos que se haya configurado pfctl en el pasado.

  12. Si se produce un error en el paso 8 y también se produce un error en el paso 10, es probable que el problema se deba a que el proceso del servidor SSH del equipo Mac no se está ejecutando o no está configurado para permitir que el usuario actual inicie sesión. En este caso, asegúrese de comprobar de nuevo la configuración del inicio de sesión remoto del paso 2 antes de investigar posibilidades más complicadas.

Problemas y limitaciones conocidos

Nota:

Esta sección solo se aplica si ya se ha conectado correctamente al host de compilación de Mac con su nombre de usuario de Mac y su contraseña mediante el cliente SSH OpenSSH, tal como se describió en los pasos 8 y 9 anteriores.

"Invalid credentials. Inténtelo de nuevo."

Causas conocidas:

  • Limitación: este error puede aparecer al intentar iniciar sesión en el host de compilación con el nombre completo de la cuenta si dicho nombre incluye un carácter acentuado. Se trata de una limitación de la biblioteca SSH.NET que Xamarin usa para la conexión SSH. Solución alternativa: consulte el paso 5 anterior.

"Unable to authenticate with SSH keys. Please try to log in with credentials first" (No se pudo autenticar con claves SSH. Intente primero iniciar sesión con las credenciales.)

Causa conocida:

  • Restricción de seguridad ssh: este mensaje suele significar que uno de los archivos o directorios de la ruta de acceso completa de $HOME/.ssh/authorized_keys en el Equipo Mac tiene permisos de escritura habilitados para otros miembros del grupo o . Corrección habitual: ejecute chmod og-w "$HOME" en un símbolo del sistema de Terminal en el equipo Mac. Para obtener más información sobre qué archivo o directorio en concreto está causando el problema, ejecute grep sshd /var/log/system.log > "$HOME/Desktop/sshd.log" en Terminal, abra el archivo sshd.log desde el escritorio y busque "Authentication refused: bad ownership or modes" (Autenticación rechazada: propiedad o modos incorrectos).

"Intentando conectar..." nunca finaliza

  • Error : este problema puede ocurrir en Xamarin 4.1 si el shell de inicio de sesión en el menú contextual Opciones avanzadas para el usuario Mac en Preferencias del > sistema Usuarios y grupos se establece en un valor distinto de /bin/bash. (A partir de Xamarin 4.2, en su lugar, este escenario conduce al mensaje de error "No se pudo conectar". Solución alternativa: vuelva a cambiar el shell de inicio de sesión al valor predeterminado original de /bin/bash.

"Couldn't connect to MacBuildHost.local. Inténtelo de nuevo."

Causas notificadas:

  • Error : algunos usuarios han visto este mensaje de error junto con un error más detallado en los archivos de registro "Error inesperado al configurar SSH para el usuario... Se agota el tiempo de espera de la operación de sesión al intentar iniciar sesión en el host de compilación mediante una cuenta de usuario de dominio de servicio de directorio u otro directorio. Solución alternativa: inicie sesión en el host de compilación con una cuenta de usuario local.

  • Error: algunos usuarios han visto este error al hacer doble clic en el nombre del equipo Mac en el cuadro de diálogo de conexión para intentar conectarse con el host de compilación. Posible solución alternativa: use la dirección IP para agregar manualmente el equipo Mac.

  • Error : algunos usuarios han encontrado este error al usar una conexión de red inalámbrica entre el host de compilación de Mac y Windows. Posible solución alternativa: mueva ambos equipos a una conexión de red con cable.

  • Error : en Xamarin 4.0, este mensaje aparecerá siempre que el archivo $HOME/.bashrc en el equipo Mac contenga un error. (A partir de Xamarin 4.1, los errores del archivo .bashrc ya no afectarán al proceso de conexión). Solución alternativa: mueva el archivo .bashrc a una ubicación de copia de seguridad (o elimínelo si sabe que no lo necesita).

  • Error : este error puede aparecer si el shell de inicio de sesión en el menú contextual Opciones avanzadas para el usuario mac en Preferencias del > sistema Usuarios y grupos se establece en un valor distinto de /bin/bash. Solución alternativa: revierta el valor de Shell de inicio de sesión al original predeterminado, que es /bin/bash.

  • Limitación: este error puede aparecer si el host de compilación de Mac está conectado a un enrutador que no tiene acceso a Internet (o si el equipo Mac usa un servidor DNS que agota el tiempo de espera cuando se pide la búsqueda de DNS inversa del equipo de Windows). Visual Studio tardará cerca de 30 segundos en recuperar la huella digital de SSH y finalmente producirá un error de conexión.

    Posible solución alternativa: agregue "UseDNS no" al archivo sshd_config . Infórmese sobre esta configuración de SSH antes de cambiarla. Por ejemplo, consulte unix.stackexchange.com/questions/56941/what-is-the-point-of-sshd-usedns-option.

    En los pasos siguientes se describe una manera de cambiar la configuración. Deberá haber iniciado sesión con una cuenta de administrador en el equipo Mac para completar los pasos.

    1. Confirme la ubicación del archivo sshd_config ejecutando ls /etc/ssh/sshd_config y ls /etc/sshd_config en un símbolo del sistema de Terminal. En los demás pasos, asegúrese de usar la ubicación que no devuelva "No existe el archivo o directorio".

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

    2. Ejecute cp /etc/ssh/sshd_config "$HOME/Desktop/" en Terminal para copiar el archivo en el escritorio.

    3. Abra el archivo desde el escritorio en un editor de texto. Por ejemplo, puede ejecutar open -a TextEdit "$HOME/Desktop/sshd_config" en Terminal.

    4. Agregue la línea siguiente en la parte inferior del archivo:

      UseDNS no
      
    5. Quite las líneas que contengan UseDNS yes para asegurarse de que la nueva configuración surta efecto.

    6. Guarde el archivo.

    7. Ejecute sudo cp "$HOME/Desktop/sshd_config" /etc/ssh/sshd_config en Terminal para copiar el archivo editado de nuevo en su lugar. Si se le solicita, escriba su contraseña.

    8. Deshabilite y vuelva a habilitar el inicio de sesión remoto en Preferencias del sistema > Compartir > Inicio de sesión remoto para reiniciar el servidor SSH.

Desactivar los agentes de Broker, IDB, compilación y diseñador en el equipo Mac

Si los archivos de registro muestran un problema durante los pasos de instalación, carga o inicio para cualquiera de los agentes de Mac, pruebe a eliminar la carpeta de caché XMA para obligar a Visual Studio a volver a cargarlos.

  1. En el equipo Mac, ejecute el comando siguiente en Terminal:

    open "$HOME/Library/Caches/Xamarin"
    
  2. Pulse la tecla Control y haga clic en la carpeta XMA y, después, seleccione Mover a la papelera:

    Move the XMA folder to Trash

  3. También puede resultar útil borrar una caché que hay en Windows. Abra un símbolo del sistema como administrador en Windows:

    del %localappdata%\Temp\Xamarin\XMA
    

Mensajes de advertencia

En esta sección se describen algunos de los mensajes que pueden aparecer en las ventanas de salida y los registros y que normalmente se pueden pasar por alto.

"There is a mismatch between the installed Xamarin.iOS… and the local Xamarin.iOS" (Hay un error de coincidencia entre la versión de Xamarin.iOS instalada… y la versión local de Xamarin.iOS)

Siempre y cuando haya confirmado que el equipo Mac y el equipo Windows están actualizados con el mismo canal de distribución de Xamarin, puede pasar por alto esta advertencia.

"Failed to execute 'ls /usr/bin/mono': ExitStatus=1" (Error al ejecutar 'ls /usr/bin/mono': ExitStatus=1)

Este mensaje se puede pasar por alto siempre y cuando el equipo Mac ejecute OS X 10.11 (El Capitan) o una versión posterior. Este mensaje no es un problema en OS X 10.11, ya que Xamarin también comprueba /usr/local/bin/mono, que es la ubicación correcta que se espera para mono en OS X 10.11.

"Bonjour service 'MacBuildHost' did not respond with its IP address." ("MacBuildHost" del servicio Bonjour no ha respondido con su dirección IP.)

Puede pasar por alto este mensaje a menos que vea que el cuadro de diálogo de conexión no muestra la dirección IP del host de la compilación de Mac. Si falta la dirección IP en ese cuadro de diálogo, puede agregar manualmente el equipo Mac.

"Usuario no válido a partir de la versión 10.1.8.95" y "input_userauth_request: usuario no válido a [autenticación previa]"

Podría ver este mensaje si consulta el archivo sshd.log. Estos mensajes forman parte del proceso de conexión normal y aparecen porque Xamarin usa el nombre de usuario a temporalmente al recuperar la huella digital de SSH.

Ventana de salida y archivos de registro

Si Visual Studio produce un error al conectar con el host de compilación, hay dos ubicaciones en las que puede buscar mensajes adicionales: la ventana de salida y los archivos de registro.

Ventana de salida

La ventana de salida es el mejor lugar para comenzar. En ella se muestran mensajes sobre los principales pasos de conexión y errores. Para ver los mensajes de Xamarin en la ventana de salida:

  1. Seleccione Ver > salida en los menús o haga clic en la pestaña Salida .
  2. En el menú de lista desplegable, haga clic en Mostrar salida de.
  3. Seleccione Xamarin.

Select Xamarin in the Output tab

Archivos de registro (documentación del SDK de POS para .NET v1.14)

Si la ventana de salida no incluye suficiente información para diagnosticar el problema, los archivos de registro son el siguiente lugar que debe consultar. Los archivos de registro contienen mensajes de diagnóstico adicionales que no aparecen en la ventana de salida. Para ver los archivos de registro:

  1. Inicie Visual Studio.

    Importante

    Tenga en cuenta que .svclogs no está habilitado de forma predeterminada. Para tener acceso, necesitará iniciar Visual Studio con registros detallados, como se explica en la guía Registros de versión. Para obtener más información, vea el blog Troubleshooting Extensions with the Activity Log (Solución de problemas de las extensiones con el registro de actividad).

  2. Intente conectarse al host de compilación.

  3. Después de que Visual Studio alcance el error de conexión, recopile los registros de la Ayuda > de Xamarin > Zip Logs:

    Collect the logs from Help > Xamarin > Zip Logs

  4. Cuando abra el archivo .zip, verá una lista de archivos similar al ejemplo siguiente. Para los errores de conexión, los archivos más importantes son los archivos *Ide.log y *Ide.svclog . Estos archivos contienen los mismos mensajes en dos formatos ligeramente diferentes. .svclog es un archivo XML y resulta útil para examinar los mensajes. .log es un archivo de texto sin formato y es útil si quiere filtrar los mensajes mediante herramientas de línea de comandos.

    Para examinar todos los mensajes, seleccione y abra el archivo .svclog:

    Select the svclog file

  5. El archivo .svclog se abrirá en Microsoft Service Trace Viewer. Puede examinar los mensajes por subproceso para ver grupos de mensajes relacionados. Para examinar por subproceso, seleccione la pestaña Gráfico, haga clic en el menú desplegable Modo de diseño y seleccione Subproceso:

    Click the Layout Mode drop-down menu and select Thread

Archivos de registro detallados

Si los archivos de registro normales todavía no proporcionan suficiente información para diagnosticar el problema, puede probar como último recurso habilitar el registro detallado. Los registros detallados también se prefieren para los informes de errores.

  1. Salga de Visual Studio.

  2. Inicie un símbolo del sistema para desarrolladores.

  3. Ejecute el comando siguiente en el símbolo del sistema para iniciar Visual Studio con el registro detallado:

    devenv /log
    
  4. Intente conectarse al host de compilación desde Visual Studio.

  5. Una vez que Visual Studio haya producido el error de conexión, recopile los registros en Ayuda > Xamarin > Comprimir registros.

  6. Ejecute el comando siguiente en Terminal en el equipo Mac para copiar los mensajes de registro recientes del servidor SSH en un archivo en el escritorio:

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

Si estos archivos de registro detallado no proporcionan suficiente información para solucionar el problema directamente, registre un nuevo informe de errores y adjunte el archivo .zip del paso 5 y el archivo .log del paso 6.

Solución de problemas de aprovisionamiento automático del equipo Mac

Archivos de registro del IDE

Si se produce algún problema con el aprovisionamiento automático del equipo Mac, eche un vistazo a los registros del IDE de Visual Studio 2017, que se almacenan en %LOCALAPPDATA%\Xamarin\Logs\15.0.

Solución de problemas de errores de compilación e implementación

En esta sección se tratan algunos de los problemas que se pueden producir después de que Visual Studio se haya conectado correctamente al host de compilación.

"No se puede conectar a la dirección = '192.168.1.2:22 ' con el usuario = 'macuser'"

Causas conocidas:

  • Característica de seguridad de Xamarin 4.1: este error se producirá si cambia a la versión Xamarin 4.0 después de usar Xamarin 4.1 o una versión superior. En este caso, el error irá acompañado de la advertencia "Private key is encrypted but passphrase is empty" (La clave privada está cifrada, pero la frase de contraseña está vacía). Se trata de un cambio intencional debido a una nueva característica de seguridad de Xamarin 4.1. Corrección recomendada: elimine id_rsa y id_rsa.pub de %LOCALAPPDATA%\Xamarin\MonoTouch y vuelva a conectarse al host de compilación de Mac.

  • Restricción de seguridad ssh: cuando este mensaje va acompañado de la advertencia adicional "No se pudo autenticar al usuario mediante las claves ssh existentes", suele significar uno de los archivos o directorios de la ruta de acceso completa de $HOME/.ssh/authorized_keys en el Equipo Mac tiene permisos de escritura habilitados para otros miembros del grupo o . Corrección habitual: ejecute chmod og-w "$HOME" en un símbolo del sistema de Terminal en el equipo Mac. Para obtener más información sobre qué archivo o directorio en concreto está causando el problema, ejecute grep sshd /var/log/system.log > "$HOME/Desktop/sshd.log" en Terminal, abra el archivo sshd.log desde el escritorio y busque "Authentication refused: bad ownership or modes" (Autenticación rechazada: propiedad o modos incorrectos).

No se puede cargar soluciones desde un recurso compartido de red

Las soluciones solo se compilarán si están en el sistema de archivos local de Windows o en una unidad asignada.

Las soluciones que estén guardadas en un recurso compartido de red podrían producir errores o directamente no compilarse. Los archivos .sln que se usen en Visual Studio se deben guardar en el sistema de archivos local de Windows.

Debido a este problema, se produce el siguiente error:

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.

Faltan perfiles de aprovisionamiento o error "Failed to create the a fat library" (No se pudo crear la biblioteca fat)

Inicie Xcode en el equipo Mac y asegúrese de que ha iniciado sesión con su cuenta de desarrollador de Apple y que se ha descargado su perfil de desarrollo de iOS:

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

"Se intentó realizar una operación de socket en una red inaccesible"

Causas notificadas:

  • Mejora : este error puede evitar compilaciones correctas cuando Visual Studio usa una dirección IPv6 para conectarse al host de compilación. (La conexión del host de compilación todavía no admite direcciones IPv6).

El complemento de Visual Studio de Xamarin.iOS no se puede cargar después de la reinstalación del canal beta/alfa

Este problema puede ocurrir si se produce un error cuando Visual Studio actualiza la caché de componentes de MEF. Si es así, instalar esta extensión de Visual Studio puede ser de ayuda: https://visualstudiogallery.msdn.microsoft.com/22b94661-70c7-4a93-9ca3-8b6dd45f47cd

De este modo, se borrará la caché de componentes de MEF de Visual Studio para solucionar los problemas relacionados con daños en la caché.

Errores debidos a los procesos de host de compilación existentes en el equipo Mac

En ocasiones, los procesos de conexiones anteriores de host de compilación pueden interferir en el comportamiento de la conexión activa actual. Para comprobar los procesos existentes, cierre Visual Studio y, después, ejecute los comandos siguientes en Terminal en el equipo Mac:

ps -A | grep mono

Running commands in Terminal on the Mac

Para terminar los procesos existentes, use el siguiente comando:

killall mono

Borrar la caché de compilación de Mac

Si está solucionando un problema de compilación y quiere asegurarse de que el comportamiento no esté relacionado con ningún archivo de compilación temporal almacenado en el equipo Mac, puede eliminar la carpeta de caché de compilación.

  1. En el equipo Mac, ejecute el comando siguiente en Terminal:

    open "$HOME/Library/Caches/Xamarin"
    
  2. Pulse la tecla Control y haga clic en la carpeta mtbs y, después, seleccione Mover a la papelera:

    Move the mtbs folder to Trash