diff --git a/CHANGELOG.md b/CHANGELOG.md index 2657bfa5b..4982720ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Features + +- Add `Sentry.crashedLastRun()` ([#4014](https://github.com/getsentry/sentry-react-native/pull/4014)) + ### Fixes - Use `install_modules_dependencies` for React iOS dependencies ([#4040](https://github.com/getsentry/sentry-react-native/pull/4040)) diff --git a/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java b/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java index 7f13e5e21..2631cf715 100644 --- a/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java +++ b/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java @@ -852,6 +852,10 @@ public String fetchNativePackageName() { return packageInfo.packageName; } + public void crashedLastRun(Promise promise) { + promise.resolve(Sentry.isCrashedLastRun()); + } + private void setEventOriginTag(SentryEvent event) { SdkVersion sdk = event.getSdk(); if (sdk != null) { diff --git a/android/src/newarch/java/io/sentry/react/RNSentryModule.java b/android/src/newarch/java/io/sentry/react/RNSentryModule.java index 3d585b6b1..f5f6ea608 100644 --- a/android/src/newarch/java/io/sentry/react/RNSentryModule.java +++ b/android/src/newarch/java/io/sentry/react/RNSentryModule.java @@ -168,4 +168,9 @@ public void captureReplay(boolean isHardCrash, Promise promise) { public String getCurrentReplayId() { return this.impl.getCurrentReplayId(); } + + @Override + public void crashedLastRun(Promise promise) { + this.impl.crashedLastRun(promise); + } } diff --git a/android/src/oldarch/java/io/sentry/react/RNSentryModule.java b/android/src/oldarch/java/io/sentry/react/RNSentryModule.java index 33fa7283b..656b8c604 100644 --- a/android/src/oldarch/java/io/sentry/react/RNSentryModule.java +++ b/android/src/oldarch/java/io/sentry/react/RNSentryModule.java @@ -168,4 +168,9 @@ public void captureReplay(boolean isHardCrash, Promise promise) { public String getCurrentReplayId() { return this.impl.getCurrentReplayId(); } + + @ReactMethod + public void crashedLastRun(Promise promise) { + this.impl.crashedLastRun(promise); + } } diff --git a/ios/RNSentry.mm b/ios/RNSentry.mm index 10d40a2bf..392869cad 100644 --- a/ios/RNSentry.mm +++ b/ios/RNSentry.mm @@ -757,6 +757,12 @@ - (NSDictionary*) fetchNativeStackFramesBy: (NSArray*)instructionsAdd #endif } +RCT_EXPORT_METHOD(crashedLastRun:(RCTPromiseResolveBlock)resolve + rejecter:(RCTPromiseRejectBlock)reject) +{ + resolve(@([SentrySDK crashedLastRun])); +} + // Thanks to this guard, we won't compile this code when we build for the old architecture. #ifdef RCT_NEW_ARCH_ENABLED - (std::shared_ptr)getTurboModule: diff --git a/samples/react-native/src/Screens/ErrorsScreen.tsx b/samples/react-native/src/Screens/ErrorsScreen.tsx index 138ec193d..643044029 100644 --- a/samples/react-native/src/Screens/ErrorsScreen.tsx +++ b/samples/react-native/src/Screens/ErrorsScreen.tsx @@ -106,6 +106,13 @@ const ErrorsScreen = (_props: Props) => { Sentry.nativeCrash(); }} /> +