es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problemas JIT con IOS Xamarin SQLite

Tengo algunas clases que he estado guardando en una base de datos local SQLite en una aplicación Xamarin Forms. Funciona bien en UWP, Android e iOS, excepto para Release en un dispositivo físico. Sigo recibiendo advertencias JIT. He intentado eliminar vínculos de varias maneras para asegurarme de que se está compilando, pero sin éxito. La raíz del problema parece estar dentro del uso de la biblioteca nuget SQLite-Net-pcl. ¿Alguien tiene consejos sobre cómo asegurar que el código haya sido compilado AOT? ¿Mi clase abstracta, tal vez demasiado abstracta? No estoy seguro.

Informes de error:

SIGABRT: Intento de compilación JIT del método ‘(invocación de delegado) void :invoke_callvirt_void_CharacterItem_int (PFAssistant.Core.Services.CharacterItem,int)’ mientras se ejecuta en modo solo aot. Consulte https://learn.microsoft.com/xamarin/ios/internals/limitations para obtener más información.

Trayectoria de la pila:

FastColumnSetter+<>c__DisplayClass2_02[ObjectType,ColumnMemberType].<CreateTypedSetterDelegate>b__0 (System.Object o, SQLitePCL.sqlite3_stmt stmt, System.Int32 i)
SQLiteCommand+<ExecuteDeferredQuery>d__12
1[T].MoveNext ()
List1[T].AddEnumerable (System.Collections.Generic.IEnumerable1[T] enumerable)
System.Collections.Generic.List1[T]..ctor (System.Collections.Generic.IEnumerable1[T] collection) <0x1052cce30 + 0x0021f> in <25bf495f7d6b4944aa395b3ab5293479#0dcf7231fb8229d159bd9a1419156fe3>:0
Enumerable.ToList[TSource] (System.Collections.Generic.IEnumerable`1[T] source)
SQLiteCommand.ExecuteQuery[T] ()

Actualización: Parece que actualizar Sqlite-net-pcl a v1.8.116 fue una parte importante de mi problema, también tuve problemas con 1.6.292. 1.7.335 funcionó perfectamente.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con las advertencias de JIT al ejecutar una aplicación de Xamarin Forms en un dispositivo físico en modo Release, mientras se utiliza la biblioteca SQLite-Net-pcl en un nuget, se puede resolver asegurando que el código se haya compilado AOT (Ahead of Time).

    Una forma de lograr esto es actualizando la biblioteca SQLite-net-pcl en un nuget a la versión 1.7.335 o superior. También es importante asegurarse de que la configuración de enlace esté correctamente configurada para la aplicación.

    En los informes de fallas proporcionados, la pila de llamadas muestra que el problema está relacionado con la clase FastColumnSetter, que es parte de la biblioteca SQLite-Net-pcl en un nuget. Actualizar a una versión más nueva de la biblioteca puede ayudar a resolver este problema.

    Es importante tener en cuenta que el uso de clases abstractas, como la clase SqlRepositoryLite que se muestra en el fragmento de código, también puede causar problemas con la compilación AOT. Se recomienda revisar la documentación de Xamarin sobre la compilación AOT para obtener más información.

Comments are closed.