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
Trayectoria de la pila:
FastColumnSetter+<>c__DisplayClass2_02[ObjectType,ColumnMemberType].<CreateTypedSetterDelegate>b__0 (System.Object o, SQLitePCL.sqlite3_stmt stmt, System.Int32 i)
1[T].MoveNext ()
SQLiteCommand+<ExecuteDeferredQuery>d__12
List1[T].AddEnumerable (System.Collections.Generic.IEnumerable
1[T] enumerable)
System.Collections.Generic.List1[T]..ctor (System.Collections.Generic.IEnumerable
1[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.
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.