在 [BluetoothDevice classicDevice] 无法识别的选择器上寻找崩溃源
Posted
技术标签:
【中文标题】在 [BluetoothDevice classicDevice] 无法识别的选择器上寻找崩溃源【英文标题】:Seeking source of crash on [BluetoothDevice classicDevice] unrecognized selector 【发布时间】:2020-01-28 02:21:01 【问题描述】:我看到崩溃实例大幅增加,在几个不同的崩溃报告中都以相同的致命异常结束:
[BluetoothDevice classicDevice]: unrecognized selector sent to instance 0x2805a8ba0
它在 ios 12 中发生了几次,但在 iOS 13 中它偏离了轨道。还有人看到这个吗? 是否与iOS 13 中蓝牙的新隐私权限有关? 我没有其他线索可循,只是想找到其他看到这个的人。
导致它的堆栈跟踪与我的应用程序代码没有任何关系,只有 AppDelegate 的声明行。它是 Foundation、CoreFoundation 和一些称为 BluetoothSettings 的 Apple 框架的混合体。如您所见,我的崩溃日志缺少很多细节——可能是 dsyms 出了问题,对此不确定......但他们在这里。
Fatal Exception: NSInvalidArgumentException
-[BluetoothDevice classicDevice]: unrecognized selector sent to instance 0x2805a8ba0
0 CoreFoundation 0x191b8d54c (Missing)
1 libobjc.A.dylib 0x1918a80c8 (Missing)
2 CoreFoundation 0x191a8bb60 (Missing)
3 CoreFoundation 0x191b91bd4 (Missing)
4 CoreFoundation 0x191b93ac0 (Missing)
5 BluetoothSettings 0x1bb3ae944 (Missing)
6 Foundation 0x191f56a94 <redacted>
7 CoreFoundation 0x191ae5478 (Missing)
8 CoreFoundation 0x191ae54c8 (Missing)
9 CoreFoundation 0x191ae47c0 (Missing)
10 CoreFoundation 0x191ae446c (Missing)
11 CoreFoundation 0x191a5d434 (Missing)
12 CoreFoundation 0x191ae3d9c (Missing)
13 Foundation 0x191e457fc (Missing)
14 libobjc.A.dylib 0x1918a3af0 <redacted>
15 Foundation 0x191f81404 (Missing)
16 CoreFoundation 0x191b08b40 (Missing)
17 CoreFoundation 0x191b08a94 (Missing)
18 CoreFoundation 0x191b08200 (Missing)
19 CoreFoundation 0x191b030cc (Missing)
20 CoreFoundation 0x191b02978 (Missing)
21 GraphicsServices 0x19bc32534 (Missing)
22 UIKitCore 0x195bf4f0c (Missing)
23 MY APP 0x1003bf8e8 main + 42 (AppDelegate.swift:42)
24 libdyld.dylib 0x191982f04 <redacted>
【问题讨论】:
我也有同样的问题 @Marc_V 很高兴我并不孤单!你碰巧有比我更详细的崩溃日志吗?也许显示 CoreFoundation 方法名称的东西? 我在我的应用程序中也看到了这一点。这似乎是 iOS 13 中的一个错误。我将在“答案”中发布完整的堆栈跟踪,因为我无法将其作为评论发布。找到“Apple Bug”以外的根本原因? 我也收到了这些崩溃报告。你找到重现它的方法了吗?我做不到。 @Zmaster 我能够通过启动showBluetoothAccessoryPickerWithNameFilter:completion
对话框并尝试配对操作系统从未见过的蓝牙设备来始终如一地重现它。用被遗忘的设备尝试它不会触发崩溃。对我来说,只有全新的蓝牙设备。
【参考方案1】:
我在我的应用中也看到了这个问题。这是带有符号的堆栈轨道:
Fatal Exception: NSInvalidArgumentException
0 CoreFoundation 0x18595dc30 __exceptionPreprocess
1 libobjc.A.dylib 0x1856780c8 objc_exception_throw
2 CoreFoundation 0x18585bfc0 -[NSOrderedSet initWithSet:copyItems:]
3 CoreFoundation 0x1859623d4 ___forwarding___
4 CoreFoundation 0x185964570 _CF_forwarding_prep_0
5 BluetoothSettings 0x1af49f074 -[BTAlert showAlertWithResult:]
6 Foundation 0x185d28288 __57-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_2
7 CoreFoundation 0x1858b5b30 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__
8 CoreFoundation 0x1858b5b80 ___CFXRegistrationPost1_block_invoke
9 CoreFoundation 0x1858b4e78 _CFXRegistrationPost1
10 CoreFoundation 0x1858b4b10 ___CFXNotificationPost_block_invoke
11 CoreFoundation 0x18582db08 -[_CFXNotificationRegistrar find:object:observer:enumerator:]
12 CoreFoundation 0x1858b4440 _CFXNotificationPost
13 Foundation 0x185c16dcc -[NSNotificationCenter postNotificationName:object:userInfo:]
14 libobjc.A.dylib 0x185673af0 -[NSObject performSelector:withObject:]
15 Foundation 0x185d52c10 __NSThreadPerformPerform
16 CoreFoundation 0x1858d9260 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
17 CoreFoundation 0x1858d91b4 __CFRunLoopDoSource0
18 CoreFoundation 0x1858d8920 __CFRunLoopDoSources0
19 CoreFoundation 0x1858d37ec __CFRunLoopRun
20 CoreFoundation 0x1858d3098 CFRunLoopRunSpecific
21 GraphicsServices 0x18fa3d534 GSEventRunModal
22 UIKitCore 0x1899f37ac UIApplicationMain
23 <redacted> 0x104e0ded0 main + 25 (main.mm:25)
24 libdyld.dylib 0x185752f30 start
到目前为止,此问题似乎是 iOS 13 独有的(我有 25 份有关此崩溃的报告,均在 iOS 13 上)。
【讨论】:
我有同样的问题和非常相似的崩溃日志。也只有 iOS 13。我认为我们可以放心地假设这与 Apple 有关。【参考方案2】:我遇到了同样的问题。在调用时弹出的系统中选择蓝牙设备时,我们能够重现此崩溃
[[EAAccessoryManager sharedAccessoryManager] showBluetoothAccessoryPickerWithNameFilter:completion:]
我目前没有更多信息,但这可能是由于 IAP1 支持。您的应用是否处理蓝牙设备?
【讨论】:
是的,我们正在使用 IAP 和蓝牙设备。 就我而言,我们正在使用 iAP2 设备。我还应该注意,我为此向 Apple 提交了错误报告,但尚未收到回复。以上是关于在 [BluetoothDevice classicDevice] 无法识别的选择器上寻找崩溃源的主要内容,如果未能解决你的问题,请参考以下文章