Share via


Sugerencias de solución de problemas de Xamarin.Mac

Información general

A veces todos nos quedamos bloqueados mientras trabajamos en un proyecto, ya sea en la incapacidad de obtener una API para que funcione de la manera que queremos o intentamos solucionar un error. Nuestro objetivo en Xamarin es que usted tenga éxito al escribir sus aplicaciones móviles y de escritorio, y hemos proporcionado algunos recursos para ayudar.

Con cualquiera de estos recursos, hay algunos pasos de preparación que puede seguir 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 devolvo una matriz vacía a esta llamada" es mucho más fácil trabajar en la corrección.

    • "No puedo hacer que NSTable funcione" es menos útil que "Ninguno de los métodos de mi NSTableDelegate parece llamarse en este caso".

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

  • Saber qué cambios ha realizado en la aplicación para que aparezca un problema puede reducir rápidamente el origen del problema. Teniendo en cuenta si ha actualizado recientemente versiones de Xamarin.Mac, el recorte de secciones de la aplicación para encontrar la parte que causa el problema o probar las compilaciones anteriores para encontrar 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 rebotará en el dock y, a continuación, se cerrará con poca o ninguna salida. Estas pueden incluir:

  • Problemas de firma de código.
  • Se bloquea cierto tiempo de ejecución mono.
  • Algunas excepciones y bloqueos de Objective-c.
  • Algunos se bloquean muy pronto 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 ser 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 el Visual Studio para Mac Salida de la aplicación (Ver ->Pads ->Salida de la aplicación) para ver los seguimientos de pila o la salida en rojo de Cocoa que pueden describir la salida.

  • Ejecute la aplicación desde la línea de comandos y examine 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 (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 NSApplication.Init a en el Main 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á experimentando 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 aplicaciones de Xamarin.Mac a través de TCP, lo que significa que, de forma predeterminada, al habilitar 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 un error "No se puede conectar al depurador".

Editing the entitlements in the App sandbox.

El permiso Allow Outgoing Network Conectar ions (Client) es el necesario para el depurador, lo que permite la depuración normalmente. Puesto que no se puede depurar sin él, hemos actualizado el CompileEntitlements destino para msbuild agregar automáticamente ese permiso a los derechos de cualquier aplicación que esté en espacio aislado solo para las 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 en 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 para el proyecto de Xamarin.Mac, yendo a Mac Build>Internationalization y comprobando la internacionalización oeste:

Editing the build options

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 ejecute 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 Derechos del editor Info.plist y la ha colocado en un editor Entitlements.plist independiente (para una mejor compatibilidad multiplataforma con Xamarin.iOS).

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

Selecting entitlements

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

Editing the entitlements

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>:

Adding a new property list

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

Verifying the overwrite of a file

Soporte técnico de la comunidad 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 su experiencia. 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.