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(dondeMyAppes 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/MyAppPuede 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.- Escriba
lldb MyApp.app/Contents/MacOS/MyAppen terminal. - Escriba
runen terminal. - Escriba
cen terminal. - Salga cuando termine la depuración.
- Escriba
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.InitMainproblemas.
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".
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:
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:

Si hace doble clic en el archivo Entitlements.plist, se mostrará el Editor de 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:

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:
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:
- Busque en el repositorio de problemas.
- Antes de la migración a GitHub, los problemas de Xamarin se recopilaban en Bugzilla. Busque allí para ver si están los mismos problemas.
- Si no encuentra un problema, registre uno nuevo en el repositorio de problemas de GitHub.
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.



