Solución de problemas de enlace
Algunas sugerencias para solucionar problemas de enlaces a las API de macOS (anteriormente conocidas como OS X) en Xamarin.Mac.
Faltan enlaces
Aunque Xamarin.Mac cubre gran parte de las API de Apple, a veces es posible que tenga que llamar a alguna API de Apple que aún no tenga un enlace. En otros casos, debe llamar a C/ de terceros que se encuentra fuera Objective-C del ámbito de los enlaces de Xamarin.Mac.
Si está trabajando con una API de Apple, el primer paso es que Xamarin sepa que está alcanzando una sección de la API para la que todavía no tenemos cobertura. Enviar un error la API que falta. Usamos informes de los clientes para priorizar en qué API trabajamos a continuación. Además, si tiene una licencia business o Enterprise y esta falta de un enlace bloquea el progreso, siga también las instrucciones de Soporte técnico para presentar una vale. No podemos pronostar un enlace, pero en algunos casos podemos conseguir un trabajo.
Una vez que notifique a Xamarin (si procede) el enlace que falta, el siguiente paso es considerar la posibilidad de enlazarlo usted mismo. Aquí tenemos una guía completa y documentación no oficial para ajustar los enlaces a mano. Si llama a una API de C, puede usar el mecanismo P/Invoke de C#; la documentación está aquí.
Si decide trabajar en el enlace usted mismo, tenga en cuenta que los errores del enlace pueden producir todo tipo de bloqueos interesantes en el tiempo de ejecución nativo. En concreto, tenga mucho cuidado de que la firma de C# coincida con la firma nativa en número de argumentos y el tamaño de cada argumento. Si no lo hace, puede dañar la memoria o la pila, y podría bloquearse inmediatamente o en algún punto arbitrario en el futuro o dañar los datos.
Excepciones de argumento al pasar null a un enlace
Aunque Xamarin funciona para proporcionar enlaces de alta calidad y bien probados para las API de Apple, a veces se deslizan errores y errores. Con diferencia, el problema más común con el que podría encontrarse es una API que inicia cuando pasa null cuando la API subyacente ArgumentNullException acepta nil . Los archivos de encabezado nativos que definen la API a menudo no proporcionan suficiente información sobre qué API aceptan cero y cuáles se bloquearán si la pasa.
Si se encuentra con un caso en el que pasar produce una excepción , pero cree que nullArgumentNullException debería funcionar, siga estos pasos:
- Consulte la documentación o los ejemplos de Apple para ver si puede encontrar una prueba de que acepta
nil. Si está cómodo con , puede escribir un pequeño programa Objective-C de prueba para comprobarlo. - Enviar un error.
- ¿Puede solucionar el error? Si puede evitar llamar a la API con , una simple comprobación de valores NULL en torno a las llamadas
nullpuede ser una solución fácil. - Sin embargo, algunas API requieren pasar null para desactivar o deshabilitar algunas características. En estos casos, puede evitar el problema si muestra el explorador de ensamblados (consulte Búsqueda del miembro de C#para un selector determinado), copiando el enlace y quitando la comprobación de valores NULL. Asegúrese de presentar un error (paso 2) si lo hace, ya que el enlace copiado no recibirá actualizaciones ni correcciones que realicemos en Xamarin.Mac, y esto debe considerarse un trabajo a corto plazo.
Notificación de errores
Sus comentarios son importantes. Si encuentra algún problema con Xamarin.Mac:
- Compruebe los foros de 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.