Xamarin 应用程序在一天未打开后启动时崩溃
Xamarin App Crashes On Launch After Not Being Opened For A Day
我的 Xamarin 项目在启动时运行一个简单的令牌识别检查,我认为这是它被阻止的地方。奇怪的是,它只会在长时间未打开后崩溃,比如 24 小时后。没有显示任何错误并且崩溃不是致命的,因为您仍然可以在后台看到它 运行,但它不会启动。一旦发生此初始错误,并且该应用程序从后台删除,它就会启动并运行良好。
[我之前发布过关于类似(可能相同)问题的帖子][1],但是当发生这种情况时,它会导致崩溃和崩溃报告。它在更改 iOS 链接器设置后停止 'crashing'。
[启动时执行的代码也可以在代码审查线程中看到。][2]
我不明白为什么会这样,令牌肯定没有过期,因为它们设置为在颁发后 14 天过期。
我将 Azure 用于所有后端,网络 API 是一个 ASP.NET 项目托管在免费测试网络托管计划上。
崩溃日志:
Exception Type: EXC_BAD_ACCESS (SIGABRT)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000000
VM Region Info: 0 is not in any region. Bytes before following region: 4336173056
REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL
UNUSED SPACE AT START
--->
__TEXT 000000010274c000-0000000102794000 [ 288K] r-x/r-x SM=COW ...co.Mobile.iOS
Triggered by Thread: 0
Thread 0 name:
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x00000001be530df0 __pthread_kill + 8
1 libsystem_pthread.dylib 0x00000001be450948 pthread_kill + 228 (pthread.c:1458)
2 libsystem_c.dylib 0x00000001be3dfc24 __abort + 116 (abort.c:147)
3 libsystem_c.dylib 0x00000001be3dfbb0 abort + 116 (abort.c:118)
4 Ecco.Mobile.iOS 0x0000000105209d8c xamarin_initialize.cold.1 + 0
5 Ecco.Mobile.iOS 0x00000001052014a8 xamarin_printf + 44782760 (runtime.m:2468)
6 Ecco.Mobile.iOS 0x0000000105118f80 mono_invoke_unhandled_exception_hook + 43831168 (exception.c:1299)
7 Ecco.Mobile.iOS 0x00000001050ba76c mono_handle_exception_internal + 43444076 (mini-exceptions.c:2783)
8 Ecco.Mobile.iOS 0x00000001050b9154 mono_handle_exception + 43438420 (mini-exceptions.c:3107)
9 Ecco.Mobile.iOS 0x00000001050b0478 mono_arm_throw_exception + 43402360 (exceptions-arm64.c:401)
10 Ecco.Mobile.iOS 0x0000000102ba7a7c throw_exception + 172
11 Ecco.Mobile.iOS 0x00000001029180fc System_Runtime_ExceptionServices_ExceptionDispatchInfo_Throw + 44
12 Ecco.Mobile.iOS 0x000000010291f924 System_Runtime_CompilerServices_AsyncMethodBuilderCore__c__ThrowAsyncb__7_0_object + 84
13 Ecco.Mobile.iOS 0x0000000103880e3c Foundation_NSAsyncSynchronizationContextDispatcher_Apply + 18042428 (NSAction.cs:178)
14 Ecco.Mobile.iOS 0x0000000102b640f0 wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 272
15 Ecco.Mobile.iOS 0x00000001050caab4 mono_jit_runtime_invoke + 43510452 (mini-runtime.c:3165)
16 Ecco.Mobile.iOS 0x0000000105163b9c mono_runtime_invoke_checked + 44137372 (object.c:3220)
17 Ecco.Mobile.iOS 0x0000000105167004 mono_runtime_invoke + 44150788 (object.c:3107)
18 Ecco.Mobile.iOS 0x0000000102754514 native_to_managed_trampoline_18(objc_object*, objc_selector*, _MonoMethod**, unsigned int) + 34068 (registrar.m:776)
19 Ecco.Mobile.iOS 0x0000000102755578 -[__MonoMac_NSAsyncSynchronizationContextDispatcher xamarinApplySelector] + 38264 (registrar.m:7896)
20 Foundation 0x00000001beb4ef94 __NSThreadPerformPerform + 188 (NSThread.m:807)
21 CoreFoundation 0x00000001be6c4d14 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28 (CFRunLoop.c:1922)
22 CoreFoundation 0x00000001be6c4c68 __CFRunLoopDoSource0 + 84 (CFRunLoop.c:1956)
23 CoreFoundation 0x00000001be6c43c4 __CFRunLoopDoSources0 + 188 (CFRunLoop.c:1992)
24 CoreFoundation 0x00000001be6bf1fc __CFRunLoopRun + 780 (CFRunLoop.c:2882)
25 CoreFoundation 0x00000001be6bebc8 CFRunLoopRunSpecific + 480 (CFRunLoop.c:3192)
26 GraphicsServices 0x00000001c8aa05cc GSEventRunModal + 164 (GSEvent.c:2246)
27 UIKitCore 0x00000001c2871744 UIApplicationMain + 1936 (UIApplication.m:4823)
28 Ecco.Mobile.iOS 0x00000001038dfa98 wrapper_managed_to_native_UIKit_UIApplication_UIApplicationMain_int_string___intptr_intptr + 344
29 Ecco.Mobile.iOS 0x000000010382a500 UIKit_UIApplication_Main_string___intptr_intptr + 17687808 (UIApplication.cs:86)
30 Ecco.Mobile.iOS 0x000000010382a484 UIKit_UIApplication_Main_string___string_string + 17687684 (UIApplication.cs:66)
31 Ecco.Mobile.iOS 0x0000000102796334 Ecco_Mobile_iOS_Application_Main_string__ + 303924 (/<unknown>:1)
32 Ecco.Mobile.iOS 0x0000000102b640f0 wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 272
33 Ecco.Mobile.iOS 0x00000001050caab4 mono_jit_runtime_invoke + 43510452 (mini-runtime.c:3165)
34 Ecco.Mobile.iOS 0x0000000105163b9c mono_runtime_invoke_checked + 44137372 (object.c:3220)
35 Ecco.Mobile.iOS 0x0000000105168c94 mono_runtime_exec_main_checked + 44158100 (object.c:5284)
36 Ecco.Mobile.iOS 0x00000001050affe0 mono_jit_exec + 43401184 (driver.c:1328)
37 Ecco.Mobile.iOS 0x0000000105208238 xamarin_main + 44810808 (monotouch-main.m:0)
38 Ecco.Mobile.iOS 0x0000000102796290 main + 303760 (main.m:312)
39 libdyld.dylib 0x00000001be53b384 start + 4
您提到您在免费测试计划中使用 webapi。我一直在为我正在处理的项目使用相同的计划,并且我注意到我在长时间(例如第二天)后第一次启动该应用程序时,后端应用程序已关闭同时由于缺少 activity,它的依赖项(如无服务器 SQL 实例)也是如此。
当第一个请求进来时,API 必须启动,然后 SQL 实例也必须启动。两者结合起来需要足够长的时间,以至于第一个请求基本上总是失败,但是下一个请求之后工作正常。
听起来这里可能正在发生类似的事情。 Xamarin 框架(也是我已经使用了几年的东西)一直......有趣......它如何处理一些异常。
无论如何,我有一些可能是解决方案,具体取决于这是否是问题所在。在尝试重新唤醒应用程序之前尝试在 API 上发出请求,然后查看它是否正常恢复。如果是这样,您可能需要 fiddle 应用服务设置以使应用程序“始终在线”。
这本来是一条评论,但超出了字符数限制,所以我认为值得一试作为答案。
我的 Xamarin 项目在启动时运行一个简单的令牌识别检查,我认为这是它被阻止的地方。奇怪的是,它只会在长时间未打开后崩溃,比如 24 小时后。没有显示任何错误并且崩溃不是致命的,因为您仍然可以在后台看到它 运行,但它不会启动。一旦发生此初始错误,并且该应用程序从后台删除,它就会启动并运行良好。 [我之前发布过关于类似(可能相同)问题的帖子][1],但是当发生这种情况时,它会导致崩溃和崩溃报告。它在更改 iOS 链接器设置后停止 'crashing'。 [启动时执行的代码也可以在代码审查线程中看到。][2] 我不明白为什么会这样,令牌肯定没有过期,因为它们设置为在颁发后 14 天过期。 我将 Azure 用于所有后端,网络 API 是一个 ASP.NET 项目托管在免费测试网络托管计划上。
崩溃日志:
Exception Type: EXC_BAD_ACCESS (SIGABRT)
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000000
VM Region Info: 0 is not in any region. Bytes before following region: 4336173056
REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL
UNUSED SPACE AT START
--->
__TEXT 000000010274c000-0000000102794000 [ 288K] r-x/r-x SM=COW ...co.Mobile.iOS
Triggered by Thread: 0
Thread 0 name:
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x00000001be530df0 __pthread_kill + 8
1 libsystem_pthread.dylib 0x00000001be450948 pthread_kill + 228 (pthread.c:1458)
2 libsystem_c.dylib 0x00000001be3dfc24 __abort + 116 (abort.c:147)
3 libsystem_c.dylib 0x00000001be3dfbb0 abort + 116 (abort.c:118)
4 Ecco.Mobile.iOS 0x0000000105209d8c xamarin_initialize.cold.1 + 0
5 Ecco.Mobile.iOS 0x00000001052014a8 xamarin_printf + 44782760 (runtime.m:2468)
6 Ecco.Mobile.iOS 0x0000000105118f80 mono_invoke_unhandled_exception_hook + 43831168 (exception.c:1299)
7 Ecco.Mobile.iOS 0x00000001050ba76c mono_handle_exception_internal + 43444076 (mini-exceptions.c:2783)
8 Ecco.Mobile.iOS 0x00000001050b9154 mono_handle_exception + 43438420 (mini-exceptions.c:3107)
9 Ecco.Mobile.iOS 0x00000001050b0478 mono_arm_throw_exception + 43402360 (exceptions-arm64.c:401)
10 Ecco.Mobile.iOS 0x0000000102ba7a7c throw_exception + 172
11 Ecco.Mobile.iOS 0x00000001029180fc System_Runtime_ExceptionServices_ExceptionDispatchInfo_Throw + 44
12 Ecco.Mobile.iOS 0x000000010291f924 System_Runtime_CompilerServices_AsyncMethodBuilderCore__c__ThrowAsyncb__7_0_object + 84
13 Ecco.Mobile.iOS 0x0000000103880e3c Foundation_NSAsyncSynchronizationContextDispatcher_Apply + 18042428 (NSAction.cs:178)
14 Ecco.Mobile.iOS 0x0000000102b640f0 wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 272
15 Ecco.Mobile.iOS 0x00000001050caab4 mono_jit_runtime_invoke + 43510452 (mini-runtime.c:3165)
16 Ecco.Mobile.iOS 0x0000000105163b9c mono_runtime_invoke_checked + 44137372 (object.c:3220)
17 Ecco.Mobile.iOS 0x0000000105167004 mono_runtime_invoke + 44150788 (object.c:3107)
18 Ecco.Mobile.iOS 0x0000000102754514 native_to_managed_trampoline_18(objc_object*, objc_selector*, _MonoMethod**, unsigned int) + 34068 (registrar.m:776)
19 Ecco.Mobile.iOS 0x0000000102755578 -[__MonoMac_NSAsyncSynchronizationContextDispatcher xamarinApplySelector] + 38264 (registrar.m:7896)
20 Foundation 0x00000001beb4ef94 __NSThreadPerformPerform + 188 (NSThread.m:807)
21 CoreFoundation 0x00000001be6c4d14 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28 (CFRunLoop.c:1922)
22 CoreFoundation 0x00000001be6c4c68 __CFRunLoopDoSource0 + 84 (CFRunLoop.c:1956)
23 CoreFoundation 0x00000001be6c43c4 __CFRunLoopDoSources0 + 188 (CFRunLoop.c:1992)
24 CoreFoundation 0x00000001be6bf1fc __CFRunLoopRun + 780 (CFRunLoop.c:2882)
25 CoreFoundation 0x00000001be6bebc8 CFRunLoopRunSpecific + 480 (CFRunLoop.c:3192)
26 GraphicsServices 0x00000001c8aa05cc GSEventRunModal + 164 (GSEvent.c:2246)
27 UIKitCore 0x00000001c2871744 UIApplicationMain + 1936 (UIApplication.m:4823)
28 Ecco.Mobile.iOS 0x00000001038dfa98 wrapper_managed_to_native_UIKit_UIApplication_UIApplicationMain_int_string___intptr_intptr + 344
29 Ecco.Mobile.iOS 0x000000010382a500 UIKit_UIApplication_Main_string___intptr_intptr + 17687808 (UIApplication.cs:86)
30 Ecco.Mobile.iOS 0x000000010382a484 UIKit_UIApplication_Main_string___string_string + 17687684 (UIApplication.cs:66)
31 Ecco.Mobile.iOS 0x0000000102796334 Ecco_Mobile_iOS_Application_Main_string__ + 303924 (/<unknown>:1)
32 Ecco.Mobile.iOS 0x0000000102b640f0 wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 272
33 Ecco.Mobile.iOS 0x00000001050caab4 mono_jit_runtime_invoke + 43510452 (mini-runtime.c:3165)
34 Ecco.Mobile.iOS 0x0000000105163b9c mono_runtime_invoke_checked + 44137372 (object.c:3220)
35 Ecco.Mobile.iOS 0x0000000105168c94 mono_runtime_exec_main_checked + 44158100 (object.c:5284)
36 Ecco.Mobile.iOS 0x00000001050affe0 mono_jit_exec + 43401184 (driver.c:1328)
37 Ecco.Mobile.iOS 0x0000000105208238 xamarin_main + 44810808 (monotouch-main.m:0)
38 Ecco.Mobile.iOS 0x0000000102796290 main + 303760 (main.m:312)
39 libdyld.dylib 0x00000001be53b384 start + 4
您提到您在免费测试计划中使用 webapi。我一直在为我正在处理的项目使用相同的计划,并且我注意到我在长时间(例如第二天)后第一次启动该应用程序时,后端应用程序已关闭同时由于缺少 activity,它的依赖项(如无服务器 SQL 实例)也是如此。
当第一个请求进来时,API 必须启动,然后 SQL 实例也必须启动。两者结合起来需要足够长的时间,以至于第一个请求基本上总是失败,但是下一个请求之后工作正常。
听起来这里可能正在发生类似的事情。 Xamarin 框架(也是我已经使用了几年的东西)一直......有趣......它如何处理一些异常。
无论如何,我有一些可能是解决方案,具体取决于这是否是问题所在。在尝试重新唤醒应用程序之前尝试在 API 上发出请求,然后查看它是否正常恢复。如果是这样,您可能需要 fiddle 应用服务设置以使应用程序“始终在线”。
这本来是一条评论,但超出了字符数限制,所以我认为值得一试作为答案。