从调用 registerAsSystemApp iOS 11.3 崩溃

Posted

技术标签:

【中文标题】从调用 registerAsSystemApp iOS 11.3 崩溃【英文标题】:Crash from call registerAsSystemApp iOS 11.3 【发布时间】:2018-07-05 23:03:33 【问题描述】:

我有自定义类:UIApplication

在 main.m 中

retVal = UIApplicationMain(argc, argv, NSStringFromClass([CustomClass class]), NSStringFromClass([AppDelegate class]));

当我在 ios 11.2.2 中启动时,没关系。如果我在 iOS 11.3 beta 中启动应用程序崩溃的原因:

+[CustomClass registerAsSystemApp]: unrecognized selector sent to class 0x1b4ff8648

    Call stack: (
    0   CoreFoundation                      0x00000001836bc250 <redacted> + 252
    1   libobjc.A.dylib                     0x00000001828845ec objc_exception_throw + 56
    2   CoreFoundation                      0x00000001836c9488 <redacted> + 0
    3   CoreFoundation                      0x00000001836c1a74 <redacted> + 1380
    4   CoreFoundation                      0x00000001835a7b0c _CF_forwarding_prep_0 + 92
    5   UIKit                               0x000000018dbcb744 <redacted> + 852
    6   UIKit                               0x000000018d9cc1e8 UIApplicationMain + 184
    7   company.product                   0x0000000100ceb264 main + 176
    8   libdyld.dylib                       0x0000000183021fc0 <redacted> + 4
)   libc++abi.dylib: terminate_handler unexpectedly threw an exception

我不明白为什么?

UPD 在模拟器 iOS 11.3 中运行良好...但从设备上我崩溃了

UPD2自定义类

.h

@interface CustomClass : UIApplication 
    TCBIdleService *_idleService;
    LocationManager *_locationManager;
    TCBUserSession *_userSession;


+ (CustomClass *)sharedApp;
+ (NSString *)pushNotificationTokenKey;

- (void)loginWithUserInfo:(UserInfoMto *)userInfo;
- (void)logout;
- (void)registerPushNotifications;

.m

@interface CustomClass ()<TCBIdleServiceObserving, UIAlertViewDelegate, QCSSendListener>

【问题讨论】:

你能显示你的CustomClass吗? @lee 这个类有 325 行。具体需要展示什么?唯一有时间从自定义类调用它:+ (void)load // Installing handler in app's delegate do not allow to intercept uncaught exceptions thrown by init method. InstallUncaughtExceptionHandler(); 假设您是调用 registerAsSystemApp 的人,首先检查该类是否响应该选择器。 我在考虑运行时检查,例如:if ([[CustomClass class] respondsToSelector:@selector(registerAsSystemApp)]) 那么,您是说if ([[CustomClass class] respondsToSelector:@selector(registerAsSystemApp)]) [CustomClass registerAsSystemApp]; 以同样的方式崩溃?即使对于私有 API,这听起来也像是一个错误。 【参考方案1】:

问题是我在项目中的班级被命名为MBApp(这是CustomClass),事实证明这个名字与来自MobileBackup.framework的一个已经有这个班级的班级相交。所以registerAsSystemApp这个方法是从MobileBackup.framework中调用的,自然没有找到。也就是说,我的解决方案是更改我的 MBApp 类的名称。唯一的困惑是为什么它以前没有发生过,因为带有该类的库在 iOS 5 中存在。感谢所有的帮助,很抱歉我没有写原始的类名,因为这是机密信息。

【讨论】:

以上是关于从调用 registerAsSystemApp iOS 11.3 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个方法调用异步方法

(JNI)从cpp lib调用函数时的数据类型转换

1、编写一个程序实现如下功能,要求调用函数实现。 1)从键盘上输入10个整数存入一数组中,将它们按照从

如何从 C# 代码的库中调用 C 方法?

tomcat7-maven-plugin 插件调用本地的tomcat吗

函数嵌套调用