Skip to content

Commit 3662a66

Browse files
committed
Merge branch 'main' into capture-app-start-errors-v7
# Conflicts: # packages/core/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java # samples/react-native/android/app/build.gradle
2 parents fe4edc7 + 80e4616 commit 3662a66

23 files changed

Lines changed: 154 additions & 38 deletions

File tree

.github/workflows/changelog-preview.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: Changelog Preview
22
on:
3-
pull_request:
3+
pull_request_target:
44
types:
55
- opened
66
- synchronize

CHANGELOG.md

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,26 @@
66
> make sure you follow our [migration guide](https://docs.sentry.io/platforms/react-native/migration/) first.
77
<!-- prettier-ignore-end -->
88
9-
## Unreleased
9+
## 7.9.0
10+
11+
### Features
12+
13+
- Experimental support of UI profiling on Android ([#5518](https://github.com/getsentry/sentry-react-native/pull/5518))
14+
- Expose iOS options to ignore views from subtree traversal ([#5545](https://github.com/getsentry/sentry-react-native/pull/5545))
15+
- Use `includedViewClasses` to only traverse specific view classes, or `excludedViewClasses` to skip problematic view classes during session replay and screenshot capture
16+
```js
17+
import * as Sentry from '@sentry/react-native';
18+
19+
Sentry.init({
20+
replaysSessionSampleRate: 1.0,
21+
integrations: [
22+
Sentry.mobileReplayIntegration({
23+
includedViewClasses: ['UILabel', 'UIView', 'MyCustomView'],
24+
excludedViewClasses: ['WKWebView', 'UIWebView'],
25+
}),
26+
],
27+
});
28+
```
1029

1130
### Features
1231

dev-packages/e2e-tests/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "sentry-react-native-e2e-tests",
3-
"version": "7.8.0",
3+
"version": "7.9.0",
44
"private": true,
55
"description": "Sentry React Native End to End Tests Library",
66
"main": "dist/index.js",
@@ -14,7 +14,7 @@
1414
"@babel/preset-env": "^7.25.3",
1515
"@babel/preset-typescript": "^7.18.6",
1616
"@sentry/core": "10.34.0",
17-
"@sentry/react-native": "7.8.0",
17+
"@sentry/react-native": "7.9.0",
1818
"@types/node": "^20.9.3",
1919
"@types/react": "^18.2.64",
2020
"appium": "2.4.1",

dev-packages/type-check/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "sentry-react-native-type-check",
33
"private": true,
4-
"version": "7.8.0",
4+
"version": "7.9.0",
55
"scripts": {
66
"type-check": "./run-type-check.sh"
77
}

dev-packages/utils/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "sentry-react-native-samples-utils",
3-
"version": "7.8.0",
3+
"version": "7.9.0",
44
"description": "Internal Samples Utils",
55
"main": "index.js",
66
"license": "MIT",

lerna.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
3-
"version": "7.8.0",
3+
"version": "7.9.0",
44
"packages": [
55
"packages/*",
66
"dev-packages/*",

packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryReplayOptionsTests.swift

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ final class RNSentryReplayOptions: XCTestCase {
4848
}
4949

5050
func assertAllDefaultReplayOptionsAreNotNil(replayOptions: [String: Any]) {
51-
XCTAssertEqual(replayOptions.count, 9)
51+
XCTAssertEqual(replayOptions.count, 11)
5252
XCTAssertNotNil(replayOptions["sessionSampleRate"])
5353
XCTAssertNotNil(replayOptions["errorSampleRate"])
5454
XCTAssertNotNil(replayOptions["maskAllImages"])
@@ -58,6 +58,8 @@ final class RNSentryReplayOptions: XCTestCase {
5858
XCTAssertNotNil(replayOptions["enableViewRendererV2"])
5959
XCTAssertNotNil(replayOptions["enableFastViewRendering"])
6060
XCTAssertNotNil(replayOptions["quality"])
61+
XCTAssertNotNil(replayOptions["includedViewClasses"])
62+
XCTAssertNotNil(replayOptions["excludedViewClasses"])
6163
}
6264

6365
func testSessionSampleRate() {
@@ -318,4 +320,64 @@ final class RNSentryReplayOptions: XCTestCase {
318320

319321
XCTAssertEqual(actualOptions.sessionReplay.quality, SentryReplayOptions.SentryReplayQuality.medium)
320322
}
323+
324+
func testIncludedViewClasses() {
325+
let optionsDict = ([
326+
"dsn": "https://abc@def.ingest.sentry.io/1234567",
327+
"replaysOnErrorSampleRate": 0.75,
328+
"mobileReplayOptions": [ "includedViewClasses": ["UILabel", "UIView", "UITextView"] ]
329+
] as NSDictionary).mutableCopy() as! NSMutableDictionary
330+
331+
RNSentryReplay.updateOptions(optionsDict)
332+
333+
let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any])
334+
335+
let includedViewClasses = actualOptions.sessionReplay.includedViewClasses
336+
XCTAssertEqual(includedViewClasses.count, 3)
337+
XCTAssertTrue(includedViewClasses.contains("UILabel"))
338+
XCTAssertTrue(includedViewClasses.contains("UIView"))
339+
XCTAssertTrue(includedViewClasses.contains("UITextView"))
340+
}
341+
342+
func testExcludedViewClasses() {
343+
let optionsDict = ([
344+
"dsn": "https://abc@def.ingest.sentry.io/1234567",
345+
"replaysOnErrorSampleRate": 0.75,
346+
"mobileReplayOptions": [ "excludedViewClasses": ["UICollectionView", "UITableView", "UIScrollView"] ]
347+
] as NSDictionary).mutableCopy() as! NSMutableDictionary
348+
349+
RNSentryReplay.updateOptions(optionsDict)
350+
351+
let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any])
352+
353+
let excludedViewClasses = actualOptions.sessionReplay.excludedViewClasses
354+
XCTAssertEqual(excludedViewClasses.count, 3)
355+
XCTAssertTrue(excludedViewClasses.contains("UICollectionView"))
356+
XCTAssertTrue(excludedViewClasses.contains("UITableView"))
357+
XCTAssertTrue(excludedViewClasses.contains("UIScrollView"))
358+
}
359+
360+
func testIncludedAndExcludedViewClasses() {
361+
let optionsDict = ([
362+
"dsn": "https://abc@def.ingest.sentry.io/1234567",
363+
"replaysOnErrorSampleRate": 0.75,
364+
"mobileReplayOptions": [
365+
"includedViewClasses": ["UILabel", "UIView"],
366+
"excludedViewClasses": ["UICollectionView"]
367+
]
368+
] as NSDictionary).mutableCopy() as! NSMutableDictionary
369+
370+
RNSentryReplay.updateOptions(optionsDict)
371+
372+
let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any])
373+
374+
let includedViewClasses = actualOptions.sessionReplay.includedViewClasses
375+
XCTAssertEqual(includedViewClasses.count, 2)
376+
XCTAssertTrue(includedViewClasses.contains("UILabel"))
377+
XCTAssertTrue(includedViewClasses.contains("UIView"))
378+
379+
let excludedViewClasses = actualOptions.sessionReplay.excludedViewClasses
380+
XCTAssertEqual(excludedViewClasses.count, 1)
381+
XCTAssertTrue(excludedViewClasses.contains("UICollectionView"))
382+
}
321383
}

packages/core/android/src/main/java/io/sentry/react/RNSentryVersion.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
class RNSentryVersion {
44
static final String REACT_NATIVE_SDK_PACKAGE_NAME = "npm:@sentry/react-native";
5-
static final String REACT_NATIVE_SDK_PACKAGE_VERSION = "7.8.0";
5+
static final String REACT_NATIVE_SDK_PACKAGE_VERSION = "7.9.0";
66
static final String NATIVE_SDK_NAME = "sentry.native.android.react-native";
77
static final String ANDROID_SDK_NAME = "sentry.java.android.react-native";
88
static final String REACT_NATIVE_SDK_NAME = "sentry.javascript.react-native";

packages/core/ios/RNSentryReplay.mm

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ + (BOOL)updateOptions:(NSMutableDictionary *)options
2727

2828
NSString *qualityString = options[@"replaysSessionQuality"];
2929

30+
NSArray *includedViewClasses = replayOptions[@"includedViewClasses"];
31+
NSArray *excludedViewClasses = replayOptions[@"excludedViewClasses"];
32+
3033
[options setValue:@{
3134
@"sessionSampleRate" : sessionSampleRate ?: [NSNull null],
3235
@"errorSampleRate" : errorSampleRate ?: [NSNull null],
@@ -36,6 +39,8 @@ + (BOOL)updateOptions:(NSMutableDictionary *)options
3639
@"enableViewRendererV2" : replayOptions[@"enableViewRendererV2"] ?: [NSNull null],
3740
@"enableFastViewRendering" : replayOptions[@"enableFastViewRendering"] ?: [NSNull null],
3841
@"maskedViewClasses" : [RNSentryReplay getReplayRNRedactClasses:replayOptions],
42+
@"includedViewClasses" : includedViewClasses ?: [NSNull null],
43+
@"excludedViewClasses" : excludedViewClasses ?: [NSNull null],
3944
@"sdkInfo" :
4045
@ { @"name" : REACT_NATIVE_SDK_NAME, @"version" : REACT_NATIVE_SDK_PACKAGE_VERSION }
4146
}

packages/core/ios/RNSentryVersion.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
NSString *const NATIVE_SDK_NAME = @"sentry.cocoa.react-native";
44
NSString *const REACT_NATIVE_SDK_NAME = @"sentry.javascript.react-native";
55
NSString *const REACT_NATIVE_SDK_PACKAGE_NAME = @"npm:@sentry/react-native";
6-
NSString *const REACT_NATIVE_SDK_PACKAGE_VERSION = @"7.8.0";
6+
NSString *const REACT_NATIVE_SDK_PACKAGE_VERSION = @"7.9.0";

0 commit comments

Comments
 (0)