71 lines
1.8 KiB
Plaintext
71 lines
1.8 KiB
Plaintext
//
|
|
// JJException.m
|
|
// UnityFramework
|
|
//
|
|
// Created by Castbox on 2023/2/28.
|
|
//
|
|
|
|
#import <Foundation/Foundation.h>
|
|
#import <UIKit/UIKit.h>
|
|
#import "UnityAppController+UnityInterface.h"
|
|
#import <JJException/JJException.h>
|
|
#import <FirebaseCrashlytics/FirebaseCrashlytics.h>
|
|
|
|
@interface U3DException : NSObject<JJExceptionHandle>
|
|
|
|
|
|
@end
|
|
|
|
@implementation U3DException
|
|
|
|
static U3DException *_instance;
|
|
|
|
+ (instancetype)sharedInstance {
|
|
static dispatch_once_t oneToken;
|
|
dispatch_once(&oneToken,^{
|
|
_instance = [[self alloc]init];
|
|
});
|
|
return _instance;
|
|
}
|
|
|
|
+ (instancetype)allocWithZone:(NSZone *)zone{
|
|
static dispatch_once_t onceToken;
|
|
dispatch_once(&onceToken, ^{
|
|
_instance = [super allocWithZone:zone];
|
|
});
|
|
return _instance;
|
|
}
|
|
|
|
- (void)start {
|
|
[JJException configExceptionCategory:JJExceptionGuardUnrecognizedSelector];
|
|
[JJException startGuardException];
|
|
[JJException registerExceptionHandle:self];
|
|
}
|
|
|
|
#pragma mark - Exception Delegate
|
|
|
|
- (void)handleCrashException:(NSString*)exceptionMessage extraInfo:(NSDictionary*)info{
|
|
NSLog(@"handleCrashException: %@ info: %@", exceptionMessage, info);
|
|
NSArray *messages = [exceptionMessage componentsSeparatedByString:@"\n"];
|
|
NSString *domain = @"[U3DException]-handler exception";
|
|
if (messages.count > 2) {
|
|
// messages.objectat
|
|
domain = [messages objectAtIndex:2];
|
|
}
|
|
NSError *error = [[NSError alloc] initWithDomain:domain code:-1 userInfo:@{NSLocalizedDescriptionKey: exceptionMessage}];
|
|
[[FIRCrashlytics crashlytics] recordError:error];
|
|
}
|
|
|
|
@end
|
|
|
|
|
|
extern "C" {
|
|
void unityInitException() {
|
|
[[U3DException sharedInstance] start];
|
|
}
|
|
|
|
void unityTestUnrecognizedSelectorCrash() {
|
|
[[U3DException sharedInstance] performSelector:NSSelectorFromString(@"testUnrecognizedSelectorCrash")];
|
|
}
|
|
}
|