diff --git a/React/Base/RCTAssert.h b/React/Base/RCTAssert.h index 977720377..cb55d58ac 100644 --- a/React/Base/RCTAssert.h +++ b/React/Base/RCTAssert.h @@ -55,6 +55,11 @@ RCT_EXTERN NSString *const RCTErrorDomain; */ RCT_EXTERN NSString *const RCTJSStackTraceKey; +/** + * Raw JS Stack trace string provided as part of an NSError's userInfo + */ +RCT_EXTERN NSString *const RCTJSRawStackTraceKey; + /** * Name of fatal exceptions generated by RCTFatal */ diff --git a/React/Base/RCTAssert.m b/React/Base/RCTAssert.m index d31f85b3f..345dae021 100644 --- a/React/Base/RCTAssert.m +++ b/React/Base/RCTAssert.m @@ -12,6 +12,7 @@ NSString *const RCTErrorDomain = @"RCTErrorDomain"; NSString *const RCTJSStackTraceKey = @"RCTJSStackTraceKey"; +NSString *const RCTJSRawStackTraceKey = @"RCTJSRawStackTraceKey"; NSString *const RCTFatalExceptionName = @"RCTFatalException"; static NSString *const RCTAssertFunctionStack = @"RCTAssertFunctionStack"; diff --git a/React/Modules/RCTRedBox.h b/React/Modules/RCTRedBox.h index 7703f5f8b..c586091a7 100644 --- a/React/Modules/RCTRedBox.h +++ b/React/Modules/RCTRedBox.h @@ -17,6 +17,7 @@ - (void)showError:(NSError *)error; - (void)showErrorMessage:(NSString *)message; - (void)showErrorMessage:(NSString *)message withDetails:(NSString *)details; +- (void)showErrorMessage:(NSString *)message withRawStack:(NSString *)rawStack; - (void)showErrorMessage:(NSString *)message withStack:(NSArray *)stack; - (void)updateErrorMessage:(NSString *)message withStack:(NSArray *)stack; diff --git a/React/Modules/RCTRedBox.m b/React/Modules/RCTRedBox.m index b01ca7857..436417f9c 100644 --- a/React/Modules/RCTRedBox.m +++ b/React/Modules/RCTRedBox.m @@ -339,6 +339,13 @@ RCT_EXPORT_MODULE() [self showErrorMessage:combinedMessage]; } +- (void)showErrorMessage:(NSString *)message withRawStack:(NSString *)rawStack +{ + // TODO #11638796: convert rawStack into something useful + message = [NSString stringWithFormat:@"%@\n\n%@", message, rawStack]; + [self showErrorMessage:message withStack:nil isUpdate:NO]; +} + - (void)showErrorMessage:(NSString *)message withStack:(NSArray *)stack { [self showErrorMessage:message withStack:stack isUpdate:NO];