我在iOS 9.3.x上的OpenURL崩溃非常奇怪。管道如下:
主线程的崩溃日志:
0 libsystem_kernel.dylib 0x0000000181c83f6c __psynch_mutexwait + 8
1 libsystem_pthread.dylib 0x0000000181d5239c _pthread_mutex_lock_wait + 96
2 libsystem_pthread.dylib 0x0000000181d5257c _pthread_mutex_lock_slow + 296
3 libobjc.A.dylib 0x000000018175b780 recursive_mutex_tt<false>::lock() + 16
4 libobjc.A.dylib 0x000000018175e110 objc_sync_enter + 28
5 App 0x00000001001ef7c4 -[TouchIDLoginManager isShowingTouchId] + 20
6 App 0x000000010019c0c0 +[UIApplicationDelegate applicationDidBecomeActive:] + 64
7 App 0x000000010019aa14 -[NSObject(UIApplicationDelegate) p_ApplicationDidBecomeActive:] + 64
来自线程的堆栈,我在其中调用openURL:
Thread 17 name: Dispatch queue: la_client
Thread 17:
0 libsystem_kernel.dylib 0x0000000181c69014 semaphore_wait_trap + 8
1 libdispatch.dylib 0x0000000181b463e8 _dispatch_semaphore_wait_slow + 244
2 libxpc.dylib 0x0000000181d82620 xpc_connection_send_message_with_reply_sync + 204
3 MobileCoreServices 0x000000018391214c _LSStartOpenOperation + 232
4 MobileCoreServices 0x0000000183939e18 -[LSOpenOperation main] + 1160
5 MobileCoreServices 0x0000000183919ad4 -[LSApplicationWorkspace openURL:withOptions:error:] + 472
6 UIKit 0x00000001874f0ec8 -[UIApplication _openURL:] + 356
7 AppKinetics-SaveEditClient 0x00000001001ebda0 -[UIApplication(some_category) openURLReplacement:] + 500
因此,有些类别会替换openURL,但在某些特定的调用中只会调用openURL。我发现解决方案使用不同的队列来调用openURL,但在我的情况下它已经调用了不同的线程。
常见原因:
Exception Type: 00000020
Exception Codes: 0x000000008badf00d
Exception Note: SIMULATED (this is NOT a crash)
Highlighted by Thread: 17
因此,应用程序被操作系统杀死。问题在Xcode调试下不可重现,并且只是偶尔重现。
缺少objc_sync_enter
是否意味着主线程出现死锁?我的问题是关于死锁的根源,我知道,0x000000008badf00d代码意味着什么
是否有人知道此案例的解决方法?
这个问题的根源是什么?
提前致谢。