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")];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |