You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS 11.3 Beta设备自定义UIApplication子类崩溃求助

解决iOS 11.3 Beta设备上自定义UIApplication子类的崩溃问题

你遇到的是iOS 11.3 Beta在真机端对自定义UIApplication子类新增的未公开调用要求。崩溃日志里的+[CustomClass registerAsSystemApp]: unrecognized selector sent to class已经给出了明确线索:UIKit在启动流程中尝试调用这个类方法,但你的CustomClass并没有实现它,而且这个行为只出现在真机设备上(模拟器的UIKit逻辑和真机存在差异)。

下面是具体的解决步骤,按优先级尝试:

1. 添加registerAsSystemApp类方法的空实现

系统在iOS 11.3 Beta的真机启动流程中,会对自定义UIApplication子类调用这个未公开的类方法。你只需要在CustomClass中添加它的声明和空实现即可:

在CustomClass.h中添加声明:

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

// 新增方法声明
+ (void)registerAsSystemApp;

+ (CustomClass *)sharedApp;
+ (NSString *)pushNotificationTokenKey;
- (void)loginWithUserInfo:(UserInfoMto *)userInfo;
- (void)logout;
- (void)registerPushNotifications;

@end

在CustomClass.m中添加实现:

@implementation CustomClass

// 新增空实现
+ (void)registerAsSystemApp {
    // 不需要任何逻辑,空实现即可满足系统调用要求
}

// 你的其他现有方法实现...

@end

2. 确保CustomClass在启动前被正确加载

有时候真机上的类加载时机可能比模拟器晚,导致UIApplicationMain调用时类还没完全初始化。可以在main.m中提前触发类加载:

int main(int argc, char * argv[]) {
    @autoreleasepool {
        // 提前加载CustomClass,确保类方法已注册
        [CustomClass class];
        return UIApplicationMain(argc, argv, NSStringFromClass([CustomClass class]), NSStringFromClass([AppDelegate class]));
    }
}

3. 检查编译配置是否正确

确认你的CustomClass.m已经被添加到项目的编译列表中:

  • 打开Xcode,进入项目的Build Phases选项卡
  • 检查Compile Sources列表中是否包含CustomClass.m
  • 如果没有,点击+按钮添加它(模拟器可能因为缓存或者编译设置差异没有这个问题,但真机严格遵循编译列表)

补充说明

这个问题应该是iOS 11.3 Beta的一个未公开行为变更,模拟器因为调试环境的特殊性没有触发这个逻辑。添加空实现后,应该就能绕过这个崩溃。如果后续正式版iOS 11.3移除了这个要求,你可以再删除这个方法实现。

内容的提问来源于stack exchange,提问作者redisky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:27:14