小伙伴们排队坐好,我们来上课啦~~
一、 崩溃一
崩溃代码:__27-[HCIAsrCommon cancelRecog]_block_invoke + 36 (HCIAsrCommon.mm:184)
崩溃截图:
崩溃堆栈:
Thread 24 name:
Thread 24 Crashed:
0 HXMobileBank 0x0000000100526998 __27-[HCIAsrCommon cancelRecog]_block_invoke + 36 (HCIAsrCommon.mm:184)
1 Foundation 0x0000000184b7d814 __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 16 (NSOperation.m:1341)
2 Foundation 0x0000000184ac2770 -[NSBlockOperation main] + 96 (NSOperation.m:1360)
3 Foundation 0x0000000184ab2b28 -[__NSOperationInternal _start:] + 612 (NSOperation.m:793)
4 Foundation 0x0000000184b7fbb0 __NSOQSchedule_f + 228 (NSOperation.m:1767)
5 libdispatch.dylib 0x0000000182f669a0 _dispatch_client_callout + 16 (object.m:473)
6 libdispatch.dylib 0x0000000182f74ad4 _dispatch_queue_serial_drain + 928 (inline_internal.h:2431)
7 libdispatch.dylib 0x0000000182f6a2cc _dispatch_queue_invoke + 884 (queue.c:4853)
8 libdispatch.dylib 0x0000000182f76a50 _dispatch_root_queue_drain + 540 (inline_internal.h:2468)
9 libdispatch.dylib 0x0000000182f767d0 _dispatch_worker_thread3 + 124 (queue.c:5550)
10 libsystem_pthread.dylib 0x000000018316f100 _pthread_wqthread + 1096 (pthread.c:2196)
11 libsystem_pthread.dylib 0x000000018316ecac start_wqthread + 4
崩溃解决:
这个闪退的原因是在取消语音识别的时候发生的,在退出页面后引用了当前视图引发的崩溃。解决办法是判断当然页面是否属于语音识别页面,是在进行后续操作。
二、 崩溃二
崩溃代码:HXMobileBank: -[HCITtsPlayerManager onSynthSyllables:andSyllablesList:andOffset:andLength:] + 268
崩溃截图:
崩溃堆栈:
Incident Identifier: 75AF9976-19C7-4C8D-B8BC-1704E242217B
Beta Identifier: 5CA78583-3864-4775-8F11-BE0F0E58A8B0
Hardware Model: iPhone11,2
Process: HXMobileBank [1622]
Path: /private/var/containers/Bundle/Application/5300D22A-2C7E-4993-A0CD-8AAF024F1B8F/HXMobileBank.app/HXMobileBank
Identifier: com.hxb.mobile.client
Version: 5.0.0.6 (5.0.0)
AppStoreTools: 10G3
AppVariant: 1:iPhone11,2:12.2
Beta: YES
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd [1]
Coalition: com.hxb.mobile.client [629]
Date/Time: 2019-08-22 21:16:43.3657 +0800
Launch Time: 2019-08-22 20:57:44.5489 +0800
OS Version: iPhone OS 12.4 (16G77)
Baseband Version: 1.06.02
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Triggered by Thread: 0
Last Exception Backtrace:
0 CoreFoundation 0x1d16deab8 __exceptionPreprocess + 232 (NSException.m:172)
1 libobjc.A.dylib 0x1d08e3d00 objc_exception_throw + 60 (objc-exception.mm:557)
2 CoreFoundation 0x1d1655f80 _CFThrowFormattedException + 116 (CFObject.m:1958)
3 CoreFoundation 0x1d15db49c -[__NSPlaceholderDictionary initWithObjects:forKeys:count:] + 372 (NSPlaceholderDictionary.m:0)
4 CoreFoundation 0x1d15cba40 +[NSDictionary dictionaryWithObjects:forKeys:count:] + 68 (NSDictionary.m:627)
5 HXMobileBank 0x100880524 -[HCITtsPlayerManager onSynthSyllables:andSyllablesList:andOffset:andLength:] + 268 (HCITtsPlayerManager.m:155)
6 HXMobileBank 0x1008828ec __82-[HCITtsSynthesizer onSynthSyllablesWithSentence:andSyllable:andOffset:andLength:]_block_invoke + 120 (HCITtsSynthesizer.mm:188)
7 libdispatch.dylib 0x1d10ec308 _dispatch_call_block_and_release + 32 (init.c:1372)
8 libdispatch.dylib 0x1d10ed888 _dispatch_client_callout + 20 (object.m:511)
9 libdispatch.dylib 0x1d10f973c _dispatch_main_queue_callback_4CF + 1012 (inline_internal.h:2441)
10 CoreFoundation 0x1d166e734 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16 (CFRunLoop.c:1813)
11 CoreFoundation 0x1d16693e4 __CFRunLoopRun + 1888 (CFRunLoop.c:3113)
12 CoreFoundation 0x1d1668964 CFRunLoopRunSpecific + 452 (CFRunLoop.c:3247)
13 GraphicsServices 0x1d38a9d8c GSEventRunModal + 108 (GSEvent.c:2245)
14 UIKitCore 0x1feb05758 UIApplicationMain + 216 (UIApplication.m:4353)
15 HXMobileBank 0x1002cbd98 main + 736 (main_2.arm64.m_:109)
16 libdyld.dylib 0x1d1124fd8 start + 4
崩溃解决:
这个很明显是用nil来初始化NSDictionary,判空即可解决该问题
三、 崩溃三
崩溃代码:HXMobileBank: -[MCVolumeQueue popVolume] + 176
崩溃截图:
崩溃堆栈:
Thread 20 name:
Thread 20 Crashed:
0 libobjc.A.dylib 0x0000000195be7bf0 objc_retain + 16 (objc-object.h:441)
1 HXMobileBank 0x0000000100757d20 -[MCVolumeQueue popVolume] + 176 (MCVoiceWaveView_2.arm64.m_:245)
2 HXMobileBank 0x00000001007596b4 -[MCVoiceWaveView updateMeters] + 100 (MCVoiceWaveView_2.arm64.m_:798)
3 HXMobileBank 0x000000010075962c -[MCVoiceWaveView invokeWaveCallback] + 72 (MCVoiceWaveView_2.arm64.m_:787)
4 QuartzCore 0x000000019ad7cf90 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 636 (CADisplay.mm:2349)
5 IOKit 0x0000000196c514b0 IODispatchCalloutFromCFMessage + 488 (IOKitLib.c:1216)
6 CoreFoundation 0x0000000196960a8c __CFMachPortPerform + 188 (CFMachPort.c:522)
7 CoreFoundation 0x0000000196987690 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 56 (CFRunLoop.c:1996)
8 CoreFoundation 0x0000000196986ddc __CFRunLoopDoSource1 + 440 (CFRunLoop.c:2133)
9 CoreFoundation 0x0000000196981c00 __CFRunLoopRun + 2096 (CFRunLoop.c:3152)
10 CoreFoundation 0x00000001969810b0 CFRunLoopRunSpecific + 436 (CFRunLoop.c:3247)
11 Foundation 0x000000019734efac -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 300 (NSRunLoop.m:367)
12 Foundation 0x000000019738a46c -[NSRunLoop(NSRunLoop) run] + 88 (NSRunLoop.m:389)
13 HXMobileBank 0x0000000100758510 -[MCVoiceWaveView voiceWaveThreadEntryPoint:] + 304 (MCVoiceWaveView_2.arm64.m_:465)
14 Foundation 0x000000019747b6a4 __NSThread__start__ + 984 (NSThread.m:1175)
15 libsystem_pthread.dylib 0x00000001966142c0 _pthread_body + 128 (pthread.c:857)
16 libsystem_pthread.dylib 0x0000000196614220 _pthread_start + 44 (pthread.c:884)
17 libsystem_pthread.dylib 0x0000000196617cdc thread_start + 4
崩溃解决:
这个可以看到崩溃的文件是MCVoiceWaveView_2.arm64.m_,这个文件是加固后的代码文件,增加音量的时候发生的异常,使用try catch即可避免
四、 崩溃四
崩溃代码:HXMobileBank: -[PCLoginSettingViewController viewDidLoad] + 1924
崩溃截图:
崩溃堆栈:
Last Exception Backtrace:
0 CoreFoundation 0x1e543927c __exceptionPreprocess + 228 (NSException.m:172)
1 libobjc.A.dylib 0x1e46139f8 objc_exception_throw + 56 (objc-exception.mm:557)
2 CoreFoundation 0x1e5355ab8 -[NSObject(NSObject) doesNotRecognizeSelector:] + 140 (NSObject.m:323)
3 CoreFoundation 0x1e543eac4 ___forwarding___ + 1408 (NSForwarding.m:3224)
4 CoreFoundation 0x1e544075c _CF_forwarding_prep_0 + 92
5 HXMobileBank 0x10254c878 -[PCLoginSettingViewController viewDidLoad] + 1924 (PCLoginSettingViewController_2.arm64.m_:1387)
6 UIKitCore 0x211651fc8 -[UIViewController loadViewIfRequired] + 1012 (UIViewController.m:3211)
7 UIKitCore 0x2116523cc -[UIViewController view] + 28 (UIViewController.m:3233)
8 UIKitCore 0x2115af4c8 -[UINavigationController _startCustomTransition:] + 1072 (UINavigationController.m:1828)
9 UIKitCore 0x2115c34b8 -[UINavigationController _startDeferredTransitionIfNeeded:] + 708 (UINavigationController.m:6707)
10 UIKitCore 0x2115c48e0 -[UINavigationController __viewWillLayoutSubviews] + 164 (UINavigationController.m:6972)
11 UIKitCore 0x2115a7af0 -[UILayoutContainerView layoutSubviews] + 224 (UILayoutContainerView.m:87)
12 UIKitCore 0x212092ed0 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1292 (UIView.m:15707)
13 QuartzCore 0x1e98eda20 -[CALayer layoutSublayers] + 184 (CALayer.mm:9450)
14 QuartzCore 0x1e98f29c8 CA::Layer::layout_if_needed(CA::Transaction*) + 332 (CALayer.mm:9330)
15 QuartzCore 0x1e98552d0 CA::Context::commit_transaction(CA::Transaction*) + 348 (CALayer.mm:2468)
16 QuartzCore 0x1e9883330 CA::Transaction::commit() + 640 (CATransactionInternal.mm:444)
17 QuartzCore 0x1e9883f20 CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) + 92 (CATransactionInternal.mm:845)
18 CoreFoundation 0x1e53ca5f8 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32 (CFRunLoop.c:1822)
19 CoreFoundation 0x1e53c5320 __CFRunLoopDoObservers + 412 (CFRunLoop.c:1932)
20 CoreFoundation 0x1e53c589c __CFRunLoopRun + 1228 (CFRunLoop.c:2950)
21 CoreFoundation 0x1e53c50b0 CFRunLoopRunSpecific + 436 (CFRunLoop.c:3247)
22 GraphicsServices 0x1e75c579c GSEventRunModal + 104 (GSEvent.c:2245)
23 UIKitCore 0x211bfb978 UIApplicationMain + 212 (UIApplication.m:4353)
24 HXMobileBank 0x10267bd98 main + 736 (main_2.arm64.m_:109)
25 libdyld.dylib 0x1e4e8a8e0 start + 4
崩溃解决:
这个崩溃的代码是doesNotRecognizeSelector说明没找到这个方法,最好的解决办法是:将未知的方法打包成一个NSInvocation转交给别的对象,但我们在forwardInvocation:完全可以不实现任何真的转发,就可以拦截掉这次的转发,所以采用这种方式最合适。在实现的时候,我们在MethodSignature方法里,将方法签名指向一个我们自定义的类的方法,并且拿到签名,返回给系统。在forwardInvocation里,不做任何实现就可以了。
欢迎留言互动和推荐课题!
我们会继续努力,感谢阅读~