From 7835fd0f3af43bca9c246a9b32b5d49bc07aeb6e Mon Sep 17 00:00:00 2001 From: Krystof Woldrich Date: Wed, 8 Feb 2023 14:30:23 +0100 Subject: [PATCH 1/3] Set RN SDK metadata to the native SDKs --- .../java/io/sentry/react/RNSentryModuleImpl.java | 12 ++++++++++++ ios/RNSentry.mm | 9 +++++++++ sample-new-architecture/src/App.tsx | 1 + 3 files changed, 22 insertions(+) diff --git a/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java b/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java index f96c839673..ad9d9b9218 100644 --- a/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java +++ b/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java @@ -10,6 +10,7 @@ import android.util.SparseIntArray; import androidx.annotation.Nullable; +import androidx.annotation.NonNull; import androidx.core.app.FrameMetricsAggregator; import com.facebook.react.bridge.Arguments; @@ -102,6 +103,17 @@ Activity getCurrentActivity() { public void initNativeSdk(final ReadableMap rnOptions, Promise promise) { SentryAndroid.init(this.getReactApplicationContext(), options -> { + if (rnOptions.hasKey("_metadata")) { + @Nullable final ReadableMap metadata = rnOptions.getMap("_metadata"); + @Nullable final ReadableMap sdkMap = metadata != null ? metadata.getMap("sdk") : null; + @Nullable final String sdkMapName = sdkMap != null ? sdkMap.getString("name") : null; + @Nullable final String sdkMapVersion = sdkMap != null ? sdkMap.getString("version") : null; + if (sdkMapName != null && sdkMapVersion != null) { + @NonNull final SdkVersion sdkVersion = new SdkVersion(sdkMapName, sdkMapVersion); + options.setSentryClientName(sdkMapName + "/" + sdkMapVersion); + options.setSdkVersion(sdkVersion); + } + } if (rnOptions.hasKey("debug") && rnOptions.getBoolean("debug")) { options.setDebug(true); } diff --git a/ios/RNSentry.mm b/ios/RNSentry.mm index 80db9de992..b280a28245 100644 --- a/ios/RNSentry.mm +++ b/ios/RNSentry.mm @@ -56,6 +56,15 @@ + (BOOL)requiresMainQueueSetup { return; } + if ([options[@"_metadata"] isKindOfClass: [NSDictionary class]] + && [options[@"_metadata"][@"sdk"] isKindOfClass: [NSDictionary class]] + && [options[@"_metadata"][@"sdk"][@"name"] isKindOfClass:[NSString class]] + && [options[@"_metadata"][@"sdk"][@"version"] isKindOfClass:[NSString class]]) { + [PrivateSentrySDKOnly + setSdkName:options[@"_metadata"][@"sdk"][@"name"] + andVersionString: options[@"_metadata"][@"sdk"][@"version"]]; + } + [SentrySDK startWithOptions:sentryOptions]; #if TARGET_OS_IPHONE || TARGET_OS_MACCATALYST diff --git a/sample-new-architecture/src/App.tsx b/sample-new-architecture/src/App.tsx index 28d9ad60e7..41fd610030 100644 --- a/sample-new-architecture/src/App.tsx +++ b/sample-new-architecture/src/App.tsx @@ -59,6 +59,7 @@ Sentry.init({ // This will capture ALL TRACES and likely use up all your quota tracesSampleRate: 1.0, attachStacktrace: true, + attachScreenshot: true, // Sets the `release` and `dist` on Sentry events. Make sure this matches EXACTLY with the values on your sourcemaps // otherwise they will not work. // release: 'myapp@1.2.3+1', From 3368a42647bc662727d5b6d1eff4e35b5d32dda9 Mon Sep 17 00:00:00 2001 From: Krystof Woldrich Date: Wed, 8 Feb 2023 16:21:11 +0100 Subject: [PATCH 2/3] Add changelog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b43ab01796..1d8b1a18a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Unreleased + +### Breaking changes + +- Events captured by Native SDKs are reporting as RN SDK ([#2814](https://github.com/getsentry/sentry-react-native/pull/2814)) + ## 5.0.0-beta.2 ### Features From 120ca26a8d55bfc35d815f10a9da05cb4c6dc116 Mon Sep 17 00:00:00 2001 From: Krystof Woldrich Date: Fri, 7 Apr 2023 13:06:09 +0200 Subject: [PATCH 3/3] Use react-native at the end of native sdks names --- .../io/sentry/react/RNSentryModuleImpl.java | 21 ++++++++++--------- ios/RNSentry.mm | 11 +++------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java b/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java index ad9d9b9218..daa1b94b0a 100644 --- a/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java +++ b/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java @@ -52,6 +52,7 @@ import io.sentry.android.core.AndroidLogger; import io.sentry.android.core.AnrIntegration; import io.sentry.android.core.AppStartState; +import io.sentry.android.core.BuildConfig; import io.sentry.android.core.BuildInfoProvider; import io.sentry.android.core.CurrentActivityHolder; import io.sentry.android.core.NdkIntegration; @@ -103,17 +104,17 @@ Activity getCurrentActivity() { public void initNativeSdk(final ReadableMap rnOptions, Promise promise) { SentryAndroid.init(this.getReactApplicationContext(), options -> { - if (rnOptions.hasKey("_metadata")) { - @Nullable final ReadableMap metadata = rnOptions.getMap("_metadata"); - @Nullable final ReadableMap sdkMap = metadata != null ? metadata.getMap("sdk") : null; - @Nullable final String sdkMapName = sdkMap != null ? sdkMap.getString("name") : null; - @Nullable final String sdkMapVersion = sdkMap != null ? sdkMap.getString("version") : null; - if (sdkMapName != null && sdkMapVersion != null) { - @NonNull final SdkVersion sdkVersion = new SdkVersion(sdkMapName, sdkMapVersion); - options.setSentryClientName(sdkMapName + "/" + sdkMapVersion); - options.setSdkVersion(sdkVersion); - } + @NonNull final String sdkName = "sentry.java.android.react-native"; + @Nullable SdkVersion sdkVersion = options.getSdkVersion(); + if (sdkVersion == null) { + sdkVersion = new SdkVersion(sdkName, BuildConfig.VERSION_NAME); + } else { + sdkVersion.setName(sdkName); } + + options.setSentryClientName(sdkVersion.getName() + "/" + sdkVersion.getVersion()); + options.setSdkVersion(sdkVersion); + if (rnOptions.hasKey("debug") && rnOptions.getBoolean("debug")) { options.setDebug(true); } diff --git a/ios/RNSentry.mm b/ios/RNSentry.mm index cc335f222c..78b0a24dd3 100644 --- a/ios/RNSentry.mm +++ b/ios/RNSentry.mm @@ -56,14 +56,9 @@ + (BOOL)requiresMainQueueSetup { return; } - if ([options[@"_metadata"] isKindOfClass: [NSDictionary class]] - && [options[@"_metadata"][@"sdk"] isKindOfClass: [NSDictionary class]] - && [options[@"_metadata"][@"sdk"][@"name"] isKindOfClass:[NSString class]] - && [options[@"_metadata"][@"sdk"][@"version"] isKindOfClass:[NSString class]]) { - [PrivateSentrySDKOnly - setSdkName:options[@"_metadata"][@"sdk"][@"name"] - andVersionString: options[@"_metadata"][@"sdk"][@"version"]]; - } + NSString *sdkName = @"sentry.cocoa.react-native"; + NSString *sdkVersion = [PrivateSentrySDKOnly getSdkVersionString]; + [PrivateSentrySDKOnly setSdkName: sdkName andVersionString: sdkVersion]; [SentrySDK startWithOptions:sentryOptions];