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
(dondeMyApp
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:- Escriba
lldb MyApp.app/Contents/MacOS/MyApp
en el terminal. - Escriba
run
en el terminal. - Escriba
c
en el terminal. - Salga cuando termine de depurar.
- Escriba
Como último recurso, antes de llamar a
NSApplication.Init
en su métodoMain
(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".
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:
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:
Si hace doble clic en el archivo Entitlements.plist, aparecerá el editor de 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:
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:
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:
- Busque en el repositorio de 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.