Xamarin.Forms / Xamarin iOS 中的 Akavache 可能存在错误

Possible bug in Akavache in Xamarin.Forms / Xamarin iOS

Akavache 的实施适用于 Android 调试和发布以及 iOS 调试模式。但是,它在 iOS 发布模式下崩溃。

The type initializer for 'Akavache.Sqlite3.Internal.SQLiteConnection' throw an exception.

抛出的异常,从 Raygun 截获

只需部署 iOS 发布模式并得到异常提示。如果有遇到过类似问题的人可以提供帮助,我们将不胜感激。

Akavache 版本为 6.0.0-alpha0038。

完整堆栈跟踪如下:

Akavache.Sqlite3.SQLitePersistentBlobCache..ctor(System.String databaseFile, System.Reactive.Concurrency.IScheduler scheduler) in :0 Akavache.Sqlite3.Registrations+<>c__DisplayClass0_0.b__2() in :0

Akavache.Sqlite3.Registrations+<>c__DisplayClass0_0.b__3() in :0 Splat.ModernDependencyResolver.GetService(System.Type serviceType, System.String contract) in <412cf7afb8e84872aee33a6b0acc7f20#a572ceb4cff14caae1629fe17a67dfc3>:0 Splat.DependencyResolverMixins.GetService[T](Splat.IDependencyResolver This, System.String contract) in <412cf7afb8e84872aee33a6b0acc7f20#a572ceb4cff14caae1629fe17a67dfc3>:0 Akavache.BlobCache.get_UserAccount() in <6b3110b6f37348ddb9bd9456cdb85f61#a572ceb4cff14caae1629fe17a67dfc3>:0 XXX.UI.CompositionRoot.CreateBlobCache() in <2815cf10ecb04f8fa012a0a005f4202e#a572ceb4cff14caae1629fe17a67dfc3>:0

XXX.UI.CompositionRoot.CreateApp() in <2815cf10ecb04f8fa012a0a005f4202e#a572ceb4cff14caae1629fe17a67dfc3>:0 XXX.UI.CompositionRoot.LoggedCreation[T](System.Func`1[TResult] factory) in <2815cf10ecb04f8fa012a0a005f4202e#a572ceb4cff14caae1629fe17a67dfc3>:0 XXX.UI.CompositionRoot.CreateApp() in <2815cf10ecb04f8fa012a0a005f4202e#a572ceb4cff14caae1629fe17a67dfc3>:0

XXX.UI.CompositionRoot.ResolveApp() in <2815cf10ecb04f8fa012a0a005f4202e#a572ceb4cff14caae1629fe17a67dfc3>:0 XXX.UI.iOS.AppDelegate.ResolveApplication(XXX.UI.CompositionRoot compositionRoot) in :0 XXX.UI.iOS.AppDelegate.FinishedLaunching(UIKit.UIApplication app, Foundation.NSDictionary options) in :0 UIKit.UIApplication.Main(System.String[] args, System.IntPtr principal, System.IntPtr delegate) in :0 UIKit.UIApplication.Main(System.String[] args, System.String principalClassName, System.String delegateClassName) in :0 XXX.UI.iOS.Application.Main(System.String[] args) in :0

这可能是 linking...

的问题

您可以尝试 link 跳过 Akavache Dll 吗?

或者使用 linker 文件来排除它们,看看是否可行?

还要确保您有 https://github.com/PureWeen/Akavache/blob/3bd03246a6e198bde5eb93a54646dd9f25fc15a1/src/Akavache.Sqlite3/content/AkavacheSqliteLinkerOverride.cs.pp

您的平台项目中的文件

iOS 的主要问题是 Xamarin 工具使用静态分析来删除它认为没有任何代码引用的 dll。 Akavache 使用反射来查找您是否正在使用 Xamarin 无法检测到的 SqlLite Dll,因此对于删除 DLL 的发行版本:-/

Override class 只是给出了你想要那个 Dll

的工具信息