Sugerencias de solución de problemas de Xamarin.Mac

Información general

Todos nos quedamos bloqueados a veces mientras trabajamos en un proyecto, ya sea al no poder conseguir que una API funcione de la forma deseada o al intentar solucionar un error. Nuestro objetivo en Xamarin es que pueda escribir aplicaciones móviles y de escritorio correctamente, por lo que hemos proporcionado algunos recursos para ayudarle.

Con cualquiera de estos recursos, hay algunos pasos de preparación que puede seguir para facilitar la resolución rápida del problema:

  • Determine la causa principal del problema lo mejor posible para notificar bloqueos:

    • "Mi aplicación se bloquea" es difícil de diagnosticar. "Mi aplicación se bloquea cuando devuelvo una matriz vacía a esta llamada" es mucho más fácil de solucionar.

    • "No consigo que NSTable funcione" es menos útil que "Ninguno de los métodos de mi NSTableDelegate parece ser llamado en este caso".

  • Si es posible, proporcione un pequeño programa de ejemplo que muestre el problema. Escarbar en páginas de código fuente en busca del problema lleva muchísimo más tiempo y esfuerzo.

  • Saber qué cambios ha realizado en su aplicación para que aparezca un problema puede acotar rápidamente el origen del mismo. Puede resultarle muy útil saber si ha actualizado recientemente las versiones de Xamarin.Mac, recortar secciones de su aplicación para encontrar la parte que provoca la incidencia o compilar versiones anteriores para averiguar qué cambio introdujo este problema.

Qué hacer cuando la aplicación se bloquea sin salida

En la mayoría de los casos, el depurador de Visual Studio para Mac detectará excepciones y bloqueos en la aplicación y le ayudará a realizar un seguimiento de la causa principal. Sin embargo, hay algunos casos en los que su aplicación se cerrará con poca o ninguna salida. Estas pueden incluir:

  • Problemas de firma de código.
  • Ciertos bloqueos de mono runtime.
  • Algunas Objective-c excepciones y bloqueos.
  • Algunos bloqueos muy al principio de la vida del proceso.
  • Algunos desbordamientos de pila.
  • La versión de macOS que aparece en su Info.plist es más reciente que la versión de macOS que tiene instalada actualmente o no es válida.

Depurar estos programas puede ser frustrante, ya que encontrar la información necesaria puede resultar difícil. Estos son algunos enfoques que pueden ayudar:

  • Asegúrese de que la versión de macOS que aparece en Info.plist es la misma que la versión de macOS instalada actualmente en el equipo.

  • Compruebe la salida de la aplicación de Visual Studio para Mac ( Vista ->Paneles ->Salida de la aplicación) en busca de seguimientos de la pila o salidas en rojo de Cocoa que puedan describir la salida.

  • Ejecute su aplicación desde la línea de comandos y observe la salida (en la aplicación Terminal) usando:

    MyApp.app/Contents/MacOS/MyApp (donde MyApp es el nombre de la aplicación)

  • Puede aumentar la salida agregando "MONO_LOG_LEVEL" al comando en la línea de comandos, por ejemplo:

    MONO_LOG_LEVEL=debug MyApp.app/Contents/MacOS/MyApp

  • Puede adjuntar un depurador nativo (lldb) al proceso para ver si proporciona más información (esto requiere una licencia de pago). Por ejemplo, haga lo siguiente:

    1. Escriba lldb MyApp.app/Contents/MacOS/MyApp en el terminal.
    2. Escriba run en el terminal.
    3. Escriba c en el terminal.
    4. Salga cuando termine de depurar.
  • Como último recurso, antes de llamar a NSApplication.Init en su método Main (o en otros lugares según sea necesario), podría escribir texto en un archivo en una ubicación conocida para supervisar en qué paso del lanzamiento está teniendo problemas.

Problemas conocidos

En las secciones siguientes se tratan los problemas conocidos y sus soluciones.

No se puede conectar al depurador en aplicaciones de espacio aislado

El depurador se conecta a las aplicaciones de Xamarin.Mac a través de TCP, lo que significa que, de manera predeterminada, cuando se habilita el espacio aislado, no puede conectarse a la aplicación, por lo que si intenta ejecutar la aplicación sin los permisos adecuados habilitados, obtendrá un error "No se puede conectar con el depurador".

Edición de los derechos en el espacio aislado de la aplicación.

El permiso Permitir conexiones de red salientes (cliente) es el necesario para el depurador, al habilitarlo permitirá depurar con normalidad. Dado que no se puede depurar sin él, hemos actualizado el destino CompileEntitlements para msbuild agregar automáticamente ese permiso a los derechos de cualquier aplicación que esté en un espacio aislado solo para compilaciones de depuración. Las compilaciones de versión deben usar los derechos especificados en el archivo de derechos, sin modificar.

System.NotSupportedException: no hay datos disponibles para la codificación 437

Al incluir bibliotecas de terceros en la aplicación de Xamarin.Mac, es posible que reciba un error con el formato "System.NotSupportedException: No hay datos disponibles para la codificación 437" al intentar compilar y ejecutar la aplicación. Por ejemplo, las bibliotecas, como Ionic.Zip.ZipFile, pueden producir esta excepción durante la operación.

Esto se puede resolver abriendo las opciones del proyecto de Xamarin.Mac yendo a Compilación de Mac>Internacionalización y comprobando la internacionalización de Occidente:

Edición de las opciones de compilación

No se pudo compilar (mm5103)

Este error suele deberse a que se publica una nueva versión de Xcode y se ha instalado la nueva versión, pero aún no se ha ejecutado. Antes de intentar compilar con una nueva versión de Xcode, primero debe ejecutar esa versión al menos una vez.

La primera vez que ejecuta una nueva versión de Xcode, instala varias herramientas de línea de comandos necesarias para Xamarin.Mac. Además, debe realizar una compilación limpia después de actualizar Xcode o la versión de Xamarin.Mac.

Si no puede resolver este problema, notifique un error.

Falta entitlements.plist

La versión más reciente de Visual Studio para Mac ha eliminado la sección Derechos del editor Info.plist y la ha colocado en un editor independiente Entitlements.plist (para una mejor compatibilidad multiplataforma con Xamarin.iOS).

Con el nuevo Visual Studio para Mac instalado, al crear un nuevo proyecto de aplicación de Xamarin.Mac, se agregará automáticamente un archivo Entitlements.plist al árbol del proyecto:

Selección de derechos

Si hace doble clic en el archivo Entitlements.plist, aparecerá el editor de derechos:

Edición de los derechos

Para los proyectos de Xamarin.Mac existentes, tendrá que crear manualmente el archivo Entitlements.plist haciendo clic con el botón derecho en el proyecto en el Panel de solución y seleccionando Añadir>Nuevo archivo.... A continuación, seleccione Xamarin.Mac>Lista de propiedades vacía:

Agregar una nueva lista de propiedades

Escriba Entitlements para el nombre y haga clic en el botón Nuevo. Si su proyecto incluía previamente un archivo de derechos, se le solicitará que lo agregue al proyecto en lugar de crear un archivo nuevo:

Comprobación de la sobrescritura de un archivo

Soporte técnico de la comunidad en los foros

La comunidad de desarrolladores que usan productos Xamarin es increíble y muchos visitan nuestros Foros de Xamarin.Mac para compartir experiencias y sus conocimientos. Además, los ingenieros de Xamarin visitan periódicamente el foro para ayudar.

Presentación de un error

Sus comentarios son importantes. Si encuentra algún problema con Xamarin.Mac:

Los problemas de GitHub son públicos. No es posible ocultar comentarios ni datos adjuntos.

De la siguiente información, incluya toda la que pueda:

  • Un ejemplo sencillo que reproduzca el problema. Siempre que sea posible, esta información es muy útil.
  • El seguimiento de la pila completo del bloqueo.
  • El código de C# del bloqueo.