Sugerencias para la solución de problemas de Xamarin.Mac

Información general

A veces, todos nos quedemos bloqueados mientras trabajamos en un proyecto, ya sea en la incapacidad de conseguir que una API funcione de la manera que queremos o en intentar solucionar un error. Nuestro objetivo en Xamarin es que pueda escribir correctamente sus aplicaciones móviles y de escritorio, y hemos proporcionado algunos recursos para ayudarle.

Con cualquiera de estos recursos, hay algunos pasos de preparación que puede realizar para ayudarles a resolver el problema rápidamente:

  • 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 devolución una matriz vacía a esta llamada" es mucho más fácil de solucionar.

    • "I can't get NSTable to work" is less helpful than "None of the methods on my NSTableDelegate seem to be called in this case".

  • Si es posible, proporcione un pequeño programa de ejemplo que muestre el problema. Profundizar en las páginas de código fuente que buscan el problema toma pedidos de magnitud más tiempo y esfuerzo.

  • Saber qué cambios ha realizado en la aplicación para que aparezca un problema puede restringir rápidamente el origen del problema. Tenga en cuenta si ha actualizado recientemente versiones de Xamarin.Mac, recortar secciones de la aplicación para encontrar la parte que causa el problema o probar compilaciones anteriores para averiguar qué cambio introdujo el problema puede ser muy útil.

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 la aplicación se saltará en el dock y, a continuación, se cerrará con poca o ninguna salida. Estas pueden incluir:

  • Problemas de firma de código.
  • Ciertos bloqueos de tiempo de ejecución mono.
  • Algunas excepciones y bloqueos de Objective-c.
  • Algunos bloqueos se bloquean muy pronto en la duración del proceso.
  • Algunos desbordamientos de pila.
  • La versión de macOS que aparece en Info.plist es más reciente que la versión de macOS instalada actualmente o no es válida.

La depuración de estos programas puede resultar frustrante, ya que encontrar la información necesaria puede ser 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 Visual Studio para Mac application output(View - Pads - Application Output) (Ver - Pads - Salida de la aplicación) para ver los seguimientos de pila o la salida en rojo de Cocoa que puedan describir la salida.

  • Ejecute la aplicación desde la línea de comandos y mire la salida (en la aplicación Terminal) mediante:

    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 ( ) al proceso para ver si proporciona más información lldb (esto requiere una licencia de pago). Por ejemplo, haga lo siguiente.

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

Problemas conocidos

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

No se puede conectar al depurador en aplicaciones en espacio aislado

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

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

El permiso Permitir conexiones de red salientes (cliente) es el que se necesita para el depurador, lo que permite la depuración con normalidad. Puesto que no se puede depurar sin él, hemos actualizado el destino para para agregar automáticamente ese permiso a los derechos de cualquier aplicación que esté en espacio aislado solo para compilaciones CompileEntitlementsmsbuild 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 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 Mac Build Internationalization (Internacionalización de Mac Build)y comprobando la internacionalización de Oeste:

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 se 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, envíe un error.

Falta entitlements.plist

La versión más reciente de Visual Studio para Mac ha quitado la sección Entitlements (Derechos) del editor Info.plist y la ha colocado en un editor de Entitlements.plist independiente (para mejorar la 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 Selección

Si hace doble clic en el archivo Entitlements.plist, se mostrará el Editor de derechos:

Edición de los derechos

Para los proyectos existentes de Xamarin.Mac, deberá crear manualmente el archivo Entitlements.plist haciendo clic con el botón derecho en el proyecto en el Panel de solución y seleccionando Agregar nuevo archivo.... A continuación, seleccione Lista de propiedades vacías de Xamarin.Mac:

Agregar una nueva lista de propiedades Adición

Escriba Entitlements como nombre y haga clic en el Entitlements Nuevo. Si el proyecto incluyó previamente un archivo Entitlements, se le pedirá que lo agregue al proyecto en lugar de crear un nuevo archivo:

Comprobación de la sobrescritura de un archivo

Community soporte técnico en los foros

La comunidad de desarrolladores que usan productos de 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.