From 892cb53c86981f35b1b219a7726da46b848e5ad2 Mon Sep 17 00:00:00 2001 From: Noah Martin Date: Thu, 24 Jul 2025 12:39:13 -0400 Subject: [PATCH 1/2] ref: Use SentryOptionsInternal --- .../RNSentryReplayOptionsTests.swift | 34 +++++++++---------- packages/core/ios/RNSentry.mm | 4 +-- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryReplayOptionsTests.swift b/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryReplayOptionsTests.swift index 9e4e7894c4..382fa58d47 100644 --- a/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryReplayOptionsTests.swift +++ b/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryReplayOptionsTests.swift @@ -67,7 +67,7 @@ final class RNSentryReplayOptions: XCTestCase { ] as NSDictionary).mutableCopy() as! NSMutableDictionary RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) XCTAssertEqual(actualOptions.sessionReplay.sessionSampleRate, 0.75) } @@ -78,7 +78,7 @@ final class RNSentryReplayOptions: XCTestCase { ] as NSDictionary).mutableCopy() as! NSMutableDictionary RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) XCTAssertEqual(actualOptions.sessionReplay.onErrorSampleRate, 0.75) } @@ -108,7 +108,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) XCTAssertEqual(actualOptions.sessionReplay.maskAllImages, true) assertContainsClass(classArray: actualOptions.sessionReplay.maskedViewClasses, stringClass: "RCTImageView") @@ -123,7 +123,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) XCTAssertEqual(actualOptions.sessionReplay.maskAllImages, false) XCTAssertEqual(actualOptions.sessionReplay.maskedViewClasses.count, 0) @@ -138,7 +138,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) XCTAssertEqual(actualOptions.sessionReplay.maskAllText, true) assertContainsClass(classArray: actualOptions.sessionReplay.maskedViewClasses, stringClass: "RCTTextView") @@ -162,7 +162,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) XCTAssertEqual(actualOptions.sessionReplay.maskAllText, false) XCTAssertEqual(actualOptions.sessionReplay.maskedViewClasses.count, 0) @@ -176,7 +176,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) XCTAssertTrue(actualOptions.sessionReplay.enableViewRendererV2) } @@ -190,7 +190,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) XCTAssertTrue(actualOptions.sessionReplay.enableViewRendererV2) } @@ -204,7 +204,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) XCTAssertFalse(actualOptions.sessionReplay.enableViewRendererV2) } @@ -217,7 +217,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) XCTAssertFalse(actualOptions.sessionReplay.enableFastViewRendering) } @@ -231,7 +231,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) XCTAssertTrue(actualOptions.sessionReplay.enableFastViewRendering) } @@ -245,7 +245,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) XCTAssertFalse(actualOptions.sessionReplay.enableFastViewRendering) } @@ -258,7 +258,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) XCTAssertEqual(actualOptions.sessionReplay.quality, SentryReplayOptions.SentryReplayQuality.medium) } @@ -272,7 +272,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) XCTAssertEqual(actualOptions.sessionReplay.quality, SentryReplayOptions.SentryReplayQuality.low) } @@ -286,7 +286,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) XCTAssertEqual(actualOptions.sessionReplay.quality, SentryReplayOptions.SentryReplayQuality.medium) } @@ -300,7 +300,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) XCTAssertEqual(actualOptions.sessionReplay.quality, SentryReplayOptions.SentryReplayQuality.high) } @@ -314,7 +314,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) XCTAssertEqual(actualOptions.sessionReplay.quality, SentryReplayOptions.SentryReplayQuality.medium) } diff --git a/packages/core/ios/RNSentry.mm b/packages/core/ios/RNSentry.mm index 267c41c30c..1073b9b771 100644 --- a/packages/core/ios/RNSentry.mm +++ b/packages/core/ios/RNSentry.mm @@ -24,7 +24,7 @@ #import #import #import -#import +#import #import // This guard prevents importing Hermes in JSC apps @@ -165,7 +165,7 @@ - (SentryOptions *_Nullable)createOptionsWithDictionary:(NSDictionary *_Nonnull) [RNSentryReplay updateOptions:mutableOptions]; #endif - SentryOptions *sentryOptions = [[SentryOptions alloc] initWithDict:mutableOptions + SentryOptions *sentryOptions = [SentryOptionsInternal initWithDict:mutableOptions didFailWithError:errorPointer]; if (*errorPointer != nil) { return nil; From c55c4c99e09747b4ee159a25ff18f7e3c80004a8 Mon Sep 17 00:00:00 2001 From: Noah Martin Date: Thu, 24 Jul 2025 17:33:49 -0400 Subject: [PATCH 2/2] Try supporting both versions --- .../RNSentryReplayOptionsTests.swift | 70 ++++++++++++++++++- packages/core/ios/RNSentry.mm | 13 +++- 2 files changed, 81 insertions(+), 2 deletions(-) diff --git a/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryReplayOptionsTests.swift b/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryReplayOptionsTests.swift index 382fa58d47..3b8765547f 100644 --- a/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryReplayOptionsTests.swift +++ b/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryReplayOptionsTests.swift @@ -67,7 +67,11 @@ final class RNSentryReplayOptions: XCTestCase { ] as NSDictionary).mutableCopy() as! NSMutableDictionary RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + #if CROSS_PLATFORM_TEST + let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + #else + let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + #endif XCTAssertEqual(actualOptions.sessionReplay.sessionSampleRate, 0.75) } @@ -78,7 +82,11 @@ final class RNSentryReplayOptions: XCTestCase { ] as NSDictionary).mutableCopy() as! NSMutableDictionary RNSentryReplay.updateOptions(optionsDict) + #if CROSS_PLATFORM_TEST let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + #else + let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + #endif XCTAssertEqual(actualOptions.sessionReplay.onErrorSampleRate, 0.75) } @@ -108,7 +116,11 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) + #if CROSS_PLATFORM_TEST let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + #else + let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + #endif XCTAssertEqual(actualOptions.sessionReplay.maskAllImages, true) assertContainsClass(classArray: actualOptions.sessionReplay.maskedViewClasses, stringClass: "RCTImageView") @@ -123,7 +135,11 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) + #if CROSS_PLATFORM_TEST let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + #else + let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + #endif XCTAssertEqual(actualOptions.sessionReplay.maskAllImages, false) XCTAssertEqual(actualOptions.sessionReplay.maskedViewClasses.count, 0) @@ -138,7 +154,11 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) + #if CROSS_PLATFORM_TEST let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + #else + let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + #endif XCTAssertEqual(actualOptions.sessionReplay.maskAllText, true) assertContainsClass(classArray: actualOptions.sessionReplay.maskedViewClasses, stringClass: "RCTTextView") @@ -162,7 +182,11 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) + #if CROSS_PLATFORM_TEST let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + #else + let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + #endif XCTAssertEqual(actualOptions.sessionReplay.maskAllText, false) XCTAssertEqual(actualOptions.sessionReplay.maskedViewClasses.count, 0) @@ -176,7 +200,11 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) + #if CROSS_PLATFORM_TEST let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + #else + let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + #endif XCTAssertTrue(actualOptions.sessionReplay.enableViewRendererV2) } @@ -190,7 +218,11 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) + #if CROSS_PLATFORM_TEST let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + #else + let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + #endif XCTAssertTrue(actualOptions.sessionReplay.enableViewRendererV2) } @@ -204,7 +236,11 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) + #if CROSS_PLATFORM_TEST let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + #else + let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + #endif XCTAssertFalse(actualOptions.sessionReplay.enableViewRendererV2) } @@ -217,7 +253,11 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) + #if CROSS_PLATFORM_TEST let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + #else + let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + #endif XCTAssertFalse(actualOptions.sessionReplay.enableFastViewRendering) } @@ -231,7 +271,11 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) + #if CROSS_PLATFORM_TEST let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + #else + let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + #endif XCTAssertTrue(actualOptions.sessionReplay.enableFastViewRendering) } @@ -245,7 +289,11 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) + #if CROSS_PLATFORM_TEST let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + #else + let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + #endif XCTAssertFalse(actualOptions.sessionReplay.enableFastViewRendering) } @@ -258,7 +306,11 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) + #if CROSS_PLATFORM_TEST let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + #else + let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + #endif XCTAssertEqual(actualOptions.sessionReplay.quality, SentryReplayOptions.SentryReplayQuality.medium) } @@ -272,7 +324,11 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) + #if CROSS_PLATFORM_TEST let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + #else + let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + #endif XCTAssertEqual(actualOptions.sessionReplay.quality, SentryReplayOptions.SentryReplayQuality.low) } @@ -286,7 +342,11 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) + #if CROSS_PLATFORM_TEST let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + #else + let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + #endif XCTAssertEqual(actualOptions.sessionReplay.quality, SentryReplayOptions.SentryReplayQuality.medium) } @@ -300,7 +360,11 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) + #if CROSS_PLATFORM_TEST let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + #else + let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + #endif XCTAssertEqual(actualOptions.sessionReplay.quality, SentryReplayOptions.SentryReplayQuality.high) } @@ -314,7 +378,11 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) + #if CROSS_PLATFORM_TEST let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + #else + let actualOptions = try! Options(dict: optionsDict as! [String: Any]) + #endif XCTAssertEqual(actualOptions.sessionReplay.quality, SentryReplayOptions.SentryReplayQuality.medium) } diff --git a/packages/core/ios/RNSentry.mm b/packages/core/ios/RNSentry.mm index 1073b9b771..b5fb68aa0d 100644 --- a/packages/core/ios/RNSentry.mm +++ b/packages/core/ios/RNSentry.mm @@ -24,7 +24,13 @@ #import #import #import -#import +#if __has_include() +# define USE_SENTRY_OPTIONS 1 +# import +#else +# define USE_SENTRY_OPTIONS 0 +# import +#endif #import // This guard prevents importing Hermes in JSC apps @@ -165,8 +171,13 @@ - (SentryOptions *_Nullable)createOptionsWithDictionary:(NSDictionary *_Nonnull) [RNSentryReplay updateOptions:mutableOptions]; #endif +#if USE_SENTRY_OPTIONS + SentryOptions *sentryOptions = [[SentryOptions alloc] initWithDict:mutableOptions + didFailWithError:errorPointer]; +#else SentryOptions *sentryOptions = [SentryOptionsInternal initWithDict:mutableOptions didFailWithError:errorPointer]; +#endif if (*errorPointer != nil) { return nil; }