我正在开发 Xamarin.forms 应用程序。我已经实现了 google firebase crashlytics 来追踪崩溃。我在 IOS 中经常遇到崩溃。崩溃的标题是“xamarin_find_protocol_wrapper_type,SIGABRT ABORT 0x00000001c7a06558”。这是我从 firebase 获得的轨迹。不知道重现的原因和方式。
Crashed: Thread Pool Worker
0 libsystem_kernel.dylib 0x7558 __pthread_kill + 8
1 libsystem_pthread.dylib 0x7118 pthread_kill + 268
2 libsystem_c.dylib 0x1d178 abort + 180
3 RHHMobile.iOS 0x3273ea0 xamarin_find_protocol_wrapper_type + 1189 (runtime.m:1189)
4 RHHMobile.iOS 0x313a944 mono_invoke_unhandled_exception_hook + 1299 (exception.c:1299)
5 RHHMobile.iOS 0x31e898c mono_thread_internal_unhandled_exception + 6010 (threads.c:6010)
6 RHHMobile.iOS 0x31e0004 worker_callback + 392 (threadpool.c:392)
7 RHHMobile.iOS 0x31dd810 worker_thread + 502 (threadpool-worker-default.c:502)
8 RHHMobile.iOS 0x31e8fa4 start_wrapper_internal + 1289 (threads.c:1289)
9 RHHMobile.iOS 0x31e8e28 start_wrapper + 1310 (threads.c:1310)
10 libsystem_pthread.dylib 0x16b8 _pthread_start + 148
11 libsystem_pthread.dylib 0xb88 thread_start + 8
如果在调试时无法重现问题,则可能是链接问题。一种解决方案是将
[Preserve(AllMembers=true)]
属性添加到所有 iOS 项目类和常见 Xamarin 类(模型、ViewModel)的顶部。
然后,使用以下代码在您的 iOS 项目中添加一个
LinkerKeep.xml
文件:
<?xml version="1.0" encoding="utf-8"?>
<linker>
<assembly fullname="System.Core">
<type fullname="System.Linq.Expressions.Expression`1"></type>
<type fullname="System.Linq.Queryable"></type>
</assembly>
</linker>
然后,将文件设置为 LinkDescription。 您可以右键单击 LinkerKeep.xml 文件并选择“Build Action”并将其设置为 BundleResource。或者,您可以在 Xamarin.iOS 项目文件的
<ItemGroups>
内添加此属性: <LinkDescription Include="LinkerKeep.xml" />
这应该可以解决您可能遇到的任何链接问题。