ios - Xamarin iOS 应用程序仅在通过 TestFlight 打开时崩溃

标签 ios xamarin testflight

我遇到了一个奇怪的错误。该应用程序在 Debug 和 Ad-Hoc 等环境中运行良好。当我将应用程序上传到 TestFlight 时,当您下载该应用程序并点击“打开”时它崩溃了。奇怪的是,如果你只是通过操作系统打开应用程序,一切都会按预期进行。我做了很多挖掘,怀疑这可能与 FinishedLaunching 事件和我对 RemoteNotificationKey 的检查有关......但我真的不能确定。通过 TestFlight 处理启动是否需要特殊条件?

我已将崩溃日志符号化并粘贴到下面(只是第一部分似乎相关)。任何帮助将不胜感激。

Date/Time: 2017-03-06 22:45:00.8870 -0500
Launch Time: 2017-03-06 22:45:00.0333 -0500
OS Version: iPhone OS 10.0.2 (14A456)
Report Version: 104

Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Triggered by Thread: 0

Application Specific Information:
abort() called

Filtered syslog:
None found

Thread 0 name: tid_a07 Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x000000018f892014 pthread_kill + 8
1 libsystem_pthread.dylib 0x000000018f959460 pthread_kill + 112
2 libsystem_c.dylib 0x000000018f8063f4 abort + 140
3 GlobalMeetiOS 0x00000001007e15fc mono_handle_native_sigsegv (mini-exceptions.c:2420)
4 libsystem_platform.dylib 0x000000018f953348 _sigtramp + 52
5 libsystem_pthread.dylib 0x000000018f959460 pthread_kill + 112
6 libsystem_c.dylib 0x000000018f8063f4 abort + 140
7 GlobalMeetiOS 0x00000001008c9530 print_all_exceptions(MonoObject*) (runtime.m:997)
8 GlobalMeetiOS 0x00000001007e1d34 mono_invoke_unhandled_exception_hook (mini-exceptions.c:2873)
9 GlobalMeetiOS 0x00000001007e1290 mono_handle_exception_internal (mini-exceptions.c:1798)
10 GlobalMeetiOS 0x00000001007e0370 mono_handle_exception (mini-exceptions.c:2027)
11 GlobalMeetiOS 0x00000001007d8e6c mono_arm_throw_exception (exceptions-arm64.c:390)
12 GlobalMeetiOS 0x0000000100b6d7e8 throw_exception + 168
13 GlobalMeetiOS 0x0000000101469940 Xamarin_Forms_Platform_iOS_Xamarin_Forms_Platform_iOS_FormsApplicationDelegate_OnActivated_UIKit_UIApplication + 0
14 GlobalMeetiOS 0x00000001008ced50 GlobalMeetiOS_GlobalMeet_iOS_AppDelegate_FinishedLaunching_UIKit_UIApplication_Foundation_NSDictionary + 412
15 GlobalMeetiOS 0x0000000100b4eb64 wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 244
16 GlobalMeetiOS 0x00000001007ee290 mono_jit_runtime_invoke (mini-runtime.c:2524)
17 GlobalMeetiOS 0x000000010084a524 do_runtime_invoke (object.c:2809)
18 GlobalMeetiOS 0x000000010084a480 mono_runtime_invoke (object.c:2967)
19 GlobalMeetiOS 0x00000001019e17b4 native_to_managed_trampoline_6(objc_object*, objc_selector*, _MonoMethod**, UIApplication*, NSDictionary*, char const*, char const*, char const*, char const*) (registrar.m:250)
20 GlobalMeetiOS 0x00000001019e1f4c -[AppDelegate application:didFinishLaunchingWithOptions:] (registrar.m:6765)
21 UIKit 0x000000019677f42c -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 400
22 UIKit 0x000000019698fb70 -[UIApplication _callInitializationDelegatesForMainScene:transitionContext:] + 3524
23 UIKit 0x00000001969958e0 -[UIApplication _runWithMainScene:transitionContext:completion:] + 1656
24 UIKit 0x00000001969aa080 __84-[UIApplication _handleApplicationActivationWithScene:transitionContext:completion:]_block_invoke.3134 + 48
25 UIKit 0x00000001969928c4 -[UIApplication workspaceDidEndTransaction:] + 168
26 FrontBoardServices 0x00000001924658bc __FBSSERIALQUEUE_IS_CALLING_OUT_TO_A_BLOCK + 36
27 FrontBoardServices 0x0000000192465728 -[FBSSerialQueue _performNext] + 176
28 FrontBoardServices 0x0000000192465ad0 -[FBSSerialQueue _performNextFromRunLoopSource] + 56
29 CoreFoundation 0x0000000190872278 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 24
30 CoreFoundation 0x0000000190871bc0 CFRunLoopDoSources0 + 524
31 CoreFoundation 0x000000019086f7c0 __CFRunLoopRun + 804
32 CoreFoundation 0x000000019079e048 CFRunLoopRunSpecific + 444
33 UIKit 0x00000001967785dc -[UIApplication _run] + 608
34 UIKit 0x0000000196773360 UIApplicationMain + 208
35 GlobalMeetiOS 0x0000000100c5fae4 wrapper_managed_to_native_UIKit_UIApplication_UIApplicationMain_int_string___intptr_intptr (/:1)
36 GlobalMeetiOS 0x0000000100be433c Xamarin_iOS_UIKit_UIApplication_Main_string___string_string (UIApplication.cs:63)
37 GlobalMeetiOS 0x00000001008ceb98 GlobalMeetiOS_GlobalMeet_iOS_Application_Main_string + 28
38 GlobalMeetiOS 0x0000000100b4eb64 wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr + 244
39 GlobalMeetiOS 0x00000001007ee290 mono_jit_runtime_invoke (mini-runtime.c:2524)
40 GlobalMeetiOS 0x000000010084a524 do_runtime_invoke (object.c:2809)
41 GlobalMeetiOS 0x000000010084c548 mono_runtime_exec_main (object.c:4585)
42 GlobalMeetiOS 0x000000010084c164 mono_runtime_run_main (object.c:4134)
43 GlobalMeetiOS 0x00000001007d868c mono_jit_exec (driver.g.c:1048)
44 GlobalMeetiOS 0x00000001008cd694 xamarin_main (monotouch-main.m:487)
45 GlobalMeetiOS 0x0000000101a02ef8 main (main.arm64.m:131)
46 libdyld.dylib 0x000000018f7805b8 start + 4

Thread 1:
0 libsystem_kernel.dylib 0x000000018f892a88 __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x000000018f95536c _pthread_wqthread + 1452
2 libsystem_pthread.dylib 0x000000018f954db4 start_wqthread + 4

Thread 2:
0 libsystem_kernel.dylib 0x000000018f892a88 __workq_kernreturn + 8
1 libsystem_pthread.dylib 0x000000018f955188 _pthread_wqthread + 968
2 libsystem_pthread.dylib 0x000000018f954db4 start_wqthread + 4

Thread 3:
0 libsystem_pthread.dylib 0x000000018f954db0 start_wqthread + 0

最佳答案

我想通了。原来是FinishedLaunching事件中的launchOptions参数有问题。同样,奇怪的是,这仅在从 TestFlight 打开应用程序时发生。我猜想在下载应用程序并从 TestFlight 中点击“打开”按钮后,它会导致 launchOptions 参数具有一些值。但是,这在我的其余代码中引起了一些奇怪的行为。

具体破坏的代码是检查 launchOptions 是否为 null。我能够查明崩溃的根源,并且只需 -> if (launchOptions!=null) {...此处的其余代码...} 就导致了崩溃。

我什至取出了那个代码块中的所有代码,应用程序仍然崩溃了。然后,我删除了空检查,应用程序在从 TestFlight 打开时不再崩溃。当然,现在只需以常规方式打开它就会崩溃,因为我在检查 launchOption 键时没有首先明确确保 launchOptions 不为空。

如果 Xamarin 的人可以解释这一点,那将非常有帮助。

修复是实现一种处理抛出的异常的方法;这篇文章帮助我解决了这个问题: https://forums.xamarin.com/discussion/931/how-to-prevent-ios-crash-reporters-from-crashing-monotouch-apps

从上面的示例中,我基本上将有问题的代码包装在所提到的那个方法中......一切都很顺利!

希望这能帮助其他人解决同样的问题。

关于ios - Xamarin iOS 应用程序仅在通过 TestFlight 打开时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42652409/

相关文章:

testing - Windows Phone 8 有类似 Testflight 的东西吗?

ios - 如何在运行时判断 iOS 应用程序是否正在通过 TestFlight Beta 安装运行

iphone - 按名称对 NSDocumentDirectory 进行排序

ios - 我可以在 iOS 应用程序中设置设备级代理吗?如何?

ios - 有没有办法在 MonoTouch 中制作原生的 cocoa 类库?

ios - TabBarController 不会更改选定的索引

ios - Xamarin iOS : Remove old bundle identifiers

visual-studio - 如果我的项目面向 MonoAndroid,Version=v5.1,为什么无法安装 Ninject 3.2.2?

visual-studio - 如何连接远程 MAC 作为 Visual Studio 上 Xamarin 的构建主机?

ios - 无效的代码签名权利 - 'previous-application-identifiers' ApplicationLoader 拒绝