[_LSDefaults sharedInstance]:无法识别的选择器发送到 class 0x20cbf3aa0

[_LSDefaults sharedInstance]: unrecognized selector sent to class 0x20cbf3aa0

我最近将代码库升级到 Xcode11.3,在没有详细日志的情况下启动时出现此错误:

2019-12-18 15:18:40.461627+0530 XXXXX[2485:622148] +[_LSDefaults sharedInstance]: unrecognized selector sent to class 0x20cbf3aa0
2019-12-18 15:18:40.462868+0530 XXXXX[2485:622148] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[_LSDefaults sharedInstance]: unrecognized selector sent to class 0x20cbf3aa0'
*** First throw call stack:
(0x1c512498c 0x1c4e4d0a4 0x1c502ccc8 0x1c578f50c 0x1c53df908 0x1c512ad90 0x1c4ffabd0 0x10c717cf8 0x10c71abc0 0x10c7242e4 0x10c723e78 0x10c7239d0 0x10c71f55c 0x10c77b5e4 0x10c7740f0 0x10c7ed5cc 0x10c7740f0 0x10c7b2f78 0x10c7d69b4 0x10c7b9f48 0x10c776e5c 0x10c7433bc 0x1c4e411ec 0x1c4e44aec)
libc++abi.dylib: terminating with uncaught exception of type NSException

不确定这里出了什么问题,有什么方法可以让我在代码中为这个“0x20cbf3aa0”获得实际的 class?

注意:这仅发生在物理设备上 运行 iOS > 13

我找到了根本原因:

已添加 NSSetUncaughtExceptionHandler 以查找以下堆栈跟踪。

2019-12-18 16:37:55.892789+0530 XXXXX[2603:645006] Stack Trace: (   
0   CoreFoundation                      0x00000001c51249a0 DA838E75-6B30-360E-9661-C4800A7E1BF6 + 1227168   
1   libobjc.A.dylib                     0x00000001c4e4d0a4 objc_exception_throw + 56    
2   CoreFoundation                      0x00000001c502ccc8 DA838E75-6B30-360E-9661-C4800A7E1BF6 + 212168    
3   CoreServices                        0x00000001c578f50c 4631A29A-FFB2-3A9D-95FF-1037507BD066 + 840972    
4   Foundation                          0x00000001c53df908 0DF2911E-80CB-3289-8A1E-ED0913D55A12 + 43272 
5   CoreFoundation                      0x00000001c512ad90 DA838E75-6B30-360E-9661-C4800A7E1BF6 + 1252752   
6   CoreFoundation                      0x00000001c4ffabd0 DA838E75-6B30-360E-9661-C4800A7E1BF6 + 7120  
7   XXXXX                               0x00000001086d3cc0 - **[ONIMehtodId invokeWithTarget:Target:parameter:result:]** + 4372 
8   XXXXX                               0x00000001086d6b88 fdwPRGInHj7S + 140   
9   XXXXX                               0x00000001086e02ac fdioJuJ5X8sy + 60    
10  XXXXX                               0x00000001086dfe40 fdfAYA5Knk6m + 1180  
11  XXXXX                               0x00000001086df998 fderBiHVLVSO + 132   
12  XXXXX                               0x00000001086db524 fdpriAImFRX8 + 5820  
13  XXXXX                               0x00000001087375ac 10Qp8Dl9pVnp + 440   
14  XXXXX                               0x00000001087300b8 108jVd8JFekR + 232   
15  XXXXX                               0x00000001087a9594 10uqENVjb5qq + 244   
16  XXXXX                               0x00000001087300b8 108jVd8JFekR + 232   
17  XXXXX                               0x000000010876ef40 100iZEfbT6gW + 1608  
18  XXXXX                               0x000000010879297c 10QzlTW4v2Ir + 56    
19  XXXXX                               0x0000000108775f10 10yEsmvqVxay + 320   
20  XXXXX                               0x0000000108732e24 10mN8k4ha1CN + 496   
21  XXXXX                               0x00000001086ff384 10444cFtXXLs + 148   
22  libsystem_pthread.dylib             0x00000001c4e411ec _pthread_start + 124 
23  libsystem_pthread.dylib             0x00000001c4e44aec thread_start + 8)

观察第 7 行的崩溃日志表明它正在使用 ONIMethodId 的方法 invokeWithTarget

之后我检查了我所有第 3 方框架的符号(命令 - nm frameworkBinary ),我知道我的一个框架正在使用这种最终调用 _LSDefaults 私有方法的方法。并且该方法已从 iOS >= 13.0 SDK 中删除。

我向我的第 3 方供应商提出了这个问题,他们会为此提供一个更新的框架。

感谢大家的评论和观看问题,发布答案,以便它可以帮助以后遇到同样问题的其他人。

如果你 post 代码,我可以帮助你,但其他人注意到,应该是一个 no=n-apple 调用。 (ONIMehtodId 不是来自苹果)

请附上您在 Xcode 中使用的外部框架列表。