Формы Xamarin: спорадические сбои с момента переноса на WKWebView

#ios #xamarin.forms #wkwebview #crash-reports #watchdog

#iOS #xamarin.forms #wkwebview #отчеты о сбоях #сторожевой пес #сторожевой таймер

Вопрос:

Мы перенесли наше приложение с UIWebView на WKWebView.

С тех пор приложение периодически выходит из строя (иногда через несколько минут, иногда через несколько часов, иногда вообще не работает), находясь в фоновом режиме.

Глядя на причину завершения 0x8badf00d (см. Отчет о сбое ниже) и документацию разработчика Apple (понимание и анализ отчетов о сбое приложения), сбой, похоже, связан с таймаутом сторожевого таймера.

Единственная задача, которую мы запускаем в нашем коде, когда приложение переходит в фоновый режим, встроена в соответствующие вызовы UIApplication.Совместное приложение.BeginBackgroundTask и UIApplication.Совместное приложение.endBackgroundTask. Эта задача представляет собой сетевой запрос, который не выполняется в основном потоке пользовательского интерфейса и завершается в течение секунды.

Тем не менее, я предполагаю, что сбой связан с проблемой WebKit / JavaScriptCore.

Кто-нибудь еще сталкивался с такими сбоями (тип исключения EXC_BAD_ACCESS (SIGKILL) и утверждение пространства имен причины завершения, код 0x8badf00d) и может предоставить какую-либо конкретную подсказку о том, как их избежать?

Заранее большое спасибо и с наилучшими пожеланиями!

Марио.

 Incident Identifier: 2084FF7B-EDFB-41D4-849F-E03F75335214
CrashReporter Key:   0af317c4eee2f011df0e1a9fc253199241998699
Hardware Model:      iPhone10,6
Process:             App [1798]
Path:                /private/var/containers/Bundle/Application/A4FF0F47-4ED6-4A97-8F15-E6AC432FC62D/App.app/App
Identifier:          com.abc.app
Version:             7000025 (7.0.25)
Code Type:           ARM-64 (Native)
Role:                Non UI
Parent Process:      launchd [1]
Coalition:           com.abc.app [792]


Date/Time:           2019-03-20 10:15:43.9491  0100
Launch Time:         2019-03-20 09:55:44.7537  0100
OS Version:          iPhone OS 12.1.4 (16D57)
Baseband Version:    2.02.51
Report Version:      104

Exception Type:  EXC_BAD_ACCESS (SIGKILL)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000000
VM Region Info: 0 is not in any region.  Bytes before following region: 4370874368
      REGION TYPE                      START - END             [ VSIZE] PRT/MAX SHRMOD  REGION DETAIL
      UNUSED SPACE AT START
--->  
      __TEXT                 0000000104864000-0000000105bdc000 [ 19.5M] r-x/r-x SM=COW  ...honeMobileiOS

Termination Reason: Namespace ASSERTIOND, Code 0x8badf00d
Triggered by Thread:  0

Thread 0 name:  tid_303  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x00000001841bef0c __psynch_cvwait   8
1   libsystem_pthread.dylib         0x0000000184241410 _pthread_cond_wait$VARIANT$armv81   620
2   JavaScriptCore                  0x000000018b95b7d8 WTF::ThreadCondition::timedWait  305112 (WTF::Mutexamp;, WTF::WallTime)   148
3   JavaScriptCore                  0x000000018b9429a0 WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> constamp;, WTF::ScopedLambda<void   203168 ()> constamp;, WTF::TimeWithDynamicClockType constamp;)   2004
4   JavaScriptCore                  0x000000018b91c2e4 bool WTF::Condition::waitUntil<WTF::Lock>  45796 (WTF::Lockamp;, WTF::TimeWithDynamicClockType constamp;)   184
5   JavaScriptCore                  0x000000018b920010 WTF::BinarySemaphore::wait  61456 (WTF::TimeWithDynamicClockType)   112
6   WebKit                          0x000000019400a2b0 IPC::Connection::waitForSyncReply  455344 (unsigned long long, WTF::Seconds, WTF::OptionSet<IPC::SendSyncOption>)   276
7   WebKit                          0x0000000194009af8 IPC::Connection::sendSyncMessage  453368 (unsigned long long, std::__1::unique_ptr<IPC::Encoder, std::__1::default_delete<IPC::Encoder> >, WTF::Seconds, WTF::OptionSet<IPC::SendSyncOption>)   416
8   WebKit                          0x00000001942cac3c bool IPC::Connection::sendSync<Messages::WebProcess::ProcessWillSuspendImminently>  3341372 (Messages::WebProcess::ProcessWillSuspendImminentlyamp;amp;, Messages::WebProcess::ProcessWillSuspendImminently::Replyamp;amp;, unsigned long long, WTF::Seconds, WTF::OptionSet<IPC::SendSyncOption>)   176
9   WebKit                          0x00000001942c5a70 bool WebKit::ChildProcessProxy::sendSync<Messages::WebProcess::ProcessWillSuspendImminently>  3320432 (Messages::WebProcess::ProcessWillSuspendImminentlyamp;amp;, Messages::WebProcess::ProcessWillSuspendImminently::Replyamp;amp;, unsigned long long, WTF::Seconds, WTF::OptionSet<IPC::SendSyncOption>)   120
10  WebKit                          0x00000001942c59e8 WebKit::WebProcessProxy::sendProcessWillSuspendImminently  3320296 ()   76
11  WebKit                          0x0000000193fafabc -[WKProcessAssertionBackgroundTaskManager _notifyClientsOfImminentSuspension]   72
12  WebKit                          0x00000001940ea7fc __64-[WKProcessAssertionBackgroundTaskManager _updateBackgroundTask]_block_invoke   168
13  UIKitCore                       0x00000001b1801a8c _fireBackgroundExpirationHandlers   300
14  FrontBoardServices              0x0000000187057504 __69-[FBSUIApplicationWorkspace clientHandleAssertionExpirationImminent:]_block_invoke   76
15  FrontBoardServices              0x000000018706ae94 __40-[FBSWorkspace _performDelegateCallOut:]_block_invoke   64
16  libdispatch.dylib               0x0000000184062484 _dispatch_client_callout   16
17  libdispatch.dylib               0x00000001840393e0 _dispatch_block_invoke_direct$VARIANT$armv81   216
18  FrontBoardServices              0x000000018709fa9c __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK__   40
19  FrontBoardServices              0x000000018709f728 -[FBSSerialQueue _performNext]   416
20  FrontBoardServices              0x000000018709fd44 -[FBSSerialQueue _performNextFromRunLoopSource]   56
21  CoreFoundation                  0x00000001845ba0e0 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__   24
22  CoreFoundation                  0x00000001845ba060 __CFRunLoopDoSource0   88
23  CoreFoundation                  0x00000001845b9944 __CFRunLoopDoSources0   176
24  CoreFoundation                  0x00000001845b4810 __CFRunLoopRun   1040
25  CoreFoundation                  0x00000001845b40e0 CFRunLoopRunSpecific   436
26  GraphicsServices                0x000000018682d584 GSEventRunModal   100
27  UIKitCore                       0x00000001b1804c00 UIApplicationMain   212
28  Xamarin.Sdk                     0x0000000106da9518 0x106224000   12080408
29  Xamarin.Sdk                     0x0000000106cfac8c 0x106224000   11365516
30  Xamarin.Sdk                     0x0000000106cfac4c 0x106224000   11365452
31  App                             0x00000001049cf7fc App_Application_Main_string__   1488892 (/<unknown>:1)
32  Xamarin.Sdk                     0x0000000106526bb8 0x106224000   3156920
33  Mono                            0x0000000105fd7374 mono_jit_runtime_invoke   904
34  Mono                            0x000000010605d1a0 mono_runtime_invoke_checked   148
35  Mono                            0x0000000106063084 mono_runtime_exec_main_checked   120
36  Mono                            0x0000000105fb6c1c mono_jit_exec   268
37  Xamarin                         0x0000000105d76cc8 xamarin_main   1132
38  App                             0x00000001049c8e4c main   1461836 (main.m:155)
39  libdyld.dylib                   0x0000000184072bb4 start   4
  

Комментарии:

1. Я предлагаю вам использовать APP Center для анализа журнала ошибок. learn.microsoft.com/en-us/appcenter/sdk/getting-started/xamarin .

2. @LucasZhang-Диагностика MSFT App Center в этом случае была бы бесполезна, так как приложение будет уничтожено (SIGKILL) и, следовательно, его не будет. Исключение NET runtime.