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