diff --git a/.github/workflows/buildandtest.yml b/.github/workflows/buildandtest.yml index 2cf04870e1..c6ae136ffc 100644 --- a/.github/workflows/buildandtest.yml +++ b/.github/workflows/buildandtest.yml @@ -4,7 +4,6 @@ on: push: branches: - main - - v5 - release/** pull_request: diff --git a/.github/workflows/codegen.yml b/.github/workflows/codegen.yml index 1192121076..fc9f3563a8 100644 --- a/.github/workflows/codegen.yml +++ b/.github/workflows/codegen.yml @@ -4,7 +4,6 @@ on: push: branches: - main - - v5 - release/** pull_request: diff --git a/.github/workflows/e2e-v2.yml b/.github/workflows/e2e-v2.yml index 4c8cf7bce2..c905dccad4 100644 --- a/.github/workflows/e2e-v2.yml +++ b/.github/workflows/e2e-v2.yml @@ -4,7 +4,6 @@ on: push: branches: - main - - v5 - release/** pull_request: types: [opened, synchronize, reopened, labeled] diff --git a/.github/workflows/native-tests.yml b/.github/workflows/native-tests.yml index a09f68649e..051c340ba6 100644 --- a/.github/workflows/native-tests.yml +++ b/.github/workflows/native-tests.yml @@ -4,7 +4,6 @@ on: push: branches: - main - - v5 - release/** pull_request: types: [opened, synchronize, reopened, labeled] diff --git a/.github/workflows/sample-application-expo.yml b/.github/workflows/sample-application-expo.yml index 6cae2cee91..2d592cde95 100644 --- a/.github/workflows/sample-application-expo.yml +++ b/.github/workflows/sample-application-expo.yml @@ -4,7 +4,6 @@ on: push: branches: - main - - v5 pull_request: types: [opened, synchronize, reopened, labeled] diff --git a/.github/workflows/sample-application.yml b/.github/workflows/sample-application.yml index 0976972c6c..ba1ce3c5dd 100644 --- a/.github/workflows/sample-application.yml +++ b/.github/workflows/sample-application.yml @@ -4,7 +4,6 @@ on: push: branches: - main - - v5 pull_request: types: [opened, synchronize, reopened, labeled] diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e4e838615..1341a4341f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,9 @@ ### Dependencies +- Bump Cocoa SDK from v8.57.3 to v9.1.0 ([#5356](https://github.com/getsentry/sentry-react-native/pull/5356)) + - [changelog](https://github.com/getsentry/sentry-cocoa/blob/main/CHANGELOG.md#910) + - [diff](https://github.com/getsentry/sentry-cocoa/compare/8.57.3...9.1.0) - Bump JavaScript SDK from v10.30.0 to v10.31.0 ([#5480](https://github.com/getsentry/sentry-react-native/pull/5480)) - [changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md#10310) - [diff](https://github.com/getsentry/sentry-javascript/compare/10.30.0...10.31.0) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 548e75806d..0839860ae5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -136,8 +136,8 @@ cd sentry-react-native Comment out sentry dependency in `RNSentry.podspec`. ```diff -- s.dependency 'Sentry/HybridSDK', '7.31.0' -+ s.dependency 'Sentry/HybridSDK' +- s.dependency 'Sentry', '7.31.0' ++ s.dependency 'Sentry' ``` Add local pods to `sample/ios/Podfile`. @@ -147,7 +147,7 @@ target 'sample' do # ... react native config - pod 'Sentry/HybridSDK', :path => '../../../../sentry-cocoa' + pod 'Sentry', :path => '../../../../sentry-cocoa' # ... rest of the configuration end diff --git a/packages/core/RNSentry.podspec b/packages/core/RNSentry.podspec index 73fc82f87f..15c5e01d36 100644 --- a/packages/core/RNSentry.podspec +++ b/packages/core/RNSentry.podspec @@ -46,7 +46,7 @@ Pod::Spec.new do |s| s.compiler_flags = other_cflags - s.dependency 'Sentry/HybridSDK', '8.57.3' + s.dependency 'Sentry', '>= 9.1.0' if defined? install_modules_dependencies # Default React Native dependencies for 0.71 and above (new and legacy architecture) diff --git a/packages/core/RNSentryCocoaTester/RNSentryCocoaTester.xcodeproj/project.pbxproj b/packages/core/RNSentryCocoaTester/RNSentryCocoaTester.xcodeproj/project.pbxproj index 7ee546e8af..4b74c4b06a 100644 --- a/packages/core/RNSentryCocoaTester/RNSentryCocoaTester.xcodeproj/project.pbxproj +++ b/packages/core/RNSentryCocoaTester/RNSentryCocoaTester.xcodeproj/project.pbxproj @@ -40,9 +40,7 @@ 338739072A7D7D2800950DDD /* RNSentryReplay.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RNSentryReplay.h; path = ../ios/RNSentryReplay.h; sourceTree = ""; }; 33958C672BFCEF5A00AD1FB6 /* RNSentryOnDrawReporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RNSentryOnDrawReporter.h; path = ../ios/RNSentryOnDrawReporter.h; sourceTree = ""; }; 33AFDFEC2B8D14B300AAB120 /* RNSentryFramesTrackerListenerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNSentryFramesTrackerListenerTests.m; sourceTree = ""; }; - 33AFDFEE2B8D14C200AAB120 /* RNSentryFramesTrackerListenerTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RNSentryFramesTrackerListenerTests.h; sourceTree = ""; }; 33AFDFF02B8D15E500AAB120 /* RNSentryDependencyContainerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNSentryDependencyContainerTests.m; sourceTree = ""; }; - 33AFDFF22B8D15F600AAB120 /* RNSentryDependencyContainerTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RNSentryDependencyContainerTests.h; sourceTree = ""; }; 33AFE0132B8F31AF00AAB120 /* RNSentryDependencyContainer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RNSentryDependencyContainer.h; path = ../ios/RNSentryDependencyContainer.h; sourceTree = ""; }; 33DEDFE92D8DBE5B006066E4 /* RNSentryOnDrawReporterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RNSentryOnDrawReporterTests.swift; sourceTree = ""; }; 33DEDFEB2D8DC800006066E4 /* RNSentryOnDrawReporter+Test.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RNSentryOnDrawReporter+Test.h"; sourceTree = ""; }; @@ -52,6 +50,8 @@ 33F58ACF2977037D008F60EA /* RNSentryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNSentryTests.m; sourceTree = ""; }; 650CB718ACFBD05609BF2126 /* libPods-RNSentryCocoaTesterTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RNSentryCocoaTesterTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; E2321E7CFA55AB617247098E /* Pods-RNSentryCocoaTesterTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNSentryCocoaTesterTests.debug.xcconfig"; path = "Target Support Files/Pods-RNSentryCocoaTesterTests/Pods-RNSentryCocoaTesterTests.debug.xcconfig"; sourceTree = ""; }; + F48F26542EA2A481008A185E /* RNSentryEmitNewFrameEvent.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RNSentryEmitNewFrameEvent.h; path = ../ios/RNSentryEmitNewFrameEvent.h; sourceTree = SOURCE_ROOT; }; + F48F26552EA2A4D4008A185E /* RNSentryFramesTrackerListener.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = RNSentryFramesTrackerListener.h; path = ../ios/RNSentryFramesTrackerListener.h; sourceTree = SOURCE_ROOT; }; FADF868E2EBD053E00D6652D /* SentrySDKWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SentrySDKWrapper.h; path = ../ios/SentrySDKWrapper.h; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ @@ -109,9 +109,7 @@ 33F58ACF2977037D008F60EA /* RNSentryTests.m */, 3339C4802D6625570088EB3A /* RNSentryUserTests.m */, 33AFDFEC2B8D14B300AAB120 /* RNSentryFramesTrackerListenerTests.m */, - 33AFDFEE2B8D14C200AAB120 /* RNSentryFramesTrackerListenerTests.h */, 33AFDFF02B8D15E500AAB120 /* RNSentryDependencyContainerTests.m */, - 33AFDFF22B8D15F600AAB120 /* RNSentryDependencyContainerTests.h */, 3360843C2C340C76008CC412 /* RNSentryBreadcrumbTests.swift */, 332D33462CDBDBB600547D76 /* RNSentryReplayOptionsTests.swift */, 3380C6C32CE25ECA0018B9B6 /* RNSentryReplayPostInitTests.swift */, @@ -140,6 +138,8 @@ FADF868E2EBD053E00D6652D /* SentrySDKWrapper.h */, 33AFE0132B8F31AF00AAB120 /* RNSentryDependencyContainer.h */, 338739072A7D7D2800950DDD /* RNSentryReplay.h */, + F48F26542EA2A481008A185E /* RNSentryEmitNewFrameEvent.h */, + F48F26552EA2A4D4008A185E /* RNSentryFramesTrackerListener.h */, ); name = RNSentry; sourceTree = ""; @@ -238,10 +238,14 @@ inputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-RNSentryCocoaTesterTests/Pods-RNSentryCocoaTesterTests-resources-${CONFIGURATION}-input-files.xcfilelist", ); + inputPaths = ( + ); name = "[CP] Copy Pods Resources"; outputFileListPaths = ( "${PODS_ROOT}/Target Support Files/Pods-RNSentryCocoaTesterTests/Pods-RNSentryCocoaTesterTests-resources-${CONFIGURATION}-output-files.xcfilelist", ); + outputPaths = ( + ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNSentryCocoaTesterTests/Pods-RNSentryCocoaTesterTests-resources.sh\"\n"; @@ -436,7 +440,7 @@ "\"$(PODS_TARGET_SRCROOT)/include/\"", "\"${PODS_ROOT}/Sentry/Sources/Sentry/include\"", ); - IPHONEOS_DEPLOYMENT_TARGET = 12.4; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = io.sentry.RNSentryCocoaTesterTests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -503,7 +507,7 @@ "\"$(PODS_TARGET_SRCROOT)/include/\"", "\"${PODS_ROOT}/Sentry/Sources/Sentry/include\"", ); - IPHONEOS_DEPLOYMENT_TARGET = 12.4; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = io.sentry.RNSentryCocoaTesterTests; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryDependencyContainerTests.h b/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryDependencyContainerTests.h deleted file mode 100644 index c987776703..0000000000 --- a/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryDependencyContainerTests.h +++ /dev/null @@ -1,8 +0,0 @@ -#import "SentryFramesTracker.h" -#import -#import - -@interface SentryDependencyContainer : NSObject -+ (instancetype)sharedInstance; -@property (nonatomic, strong) SentryFramesTracker *framesTracker; -@end diff --git a/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryDependencyContainerTests.m b/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryDependencyContainerTests.m index 1cef19682c..eb53a6322e 100644 --- a/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryDependencyContainerTests.m +++ b/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryDependencyContainerTests.m @@ -1,8 +1,8 @@ -#import "RNSentryDependencyContainerTests.h" #import "RNSentryDependencyContainer.h" #import #import #import +@import Sentry; @interface RNSentryDependencyContainerTests : XCTestCase diff --git a/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryFramesTrackerListenerTests.h b/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryFramesTrackerListenerTests.h deleted file mode 100644 index c987776703..0000000000 --- a/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryFramesTrackerListenerTests.h +++ /dev/null @@ -1,8 +0,0 @@ -#import "SentryFramesTracker.h" -#import -#import - -@interface SentryDependencyContainer : NSObject -+ (instancetype)sharedInstance; -@property (nonatomic, strong) SentryFramesTracker *framesTracker; -@end diff --git a/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryFramesTrackerListenerTests.m b/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryFramesTrackerListenerTests.m index 7a877795d6..933d913cb5 100644 --- a/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryFramesTrackerListenerTests.m +++ b/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryFramesTrackerListenerTests.m @@ -1,8 +1,9 @@ -#import "RNSentryFramesTrackerListenerTests.h" #import "RNSentryDependencyContainer.h" +#import "RNSentryFramesTrackerListener.h" #import #import #import +@import Sentry; @interface RNSentryFramesTrackerListenerTests : XCTestCase diff --git a/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryOnDrawReporter+Test.h b/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryOnDrawReporter+Test.h index 8a9df3a94e..753983baae 100644 --- a/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryOnDrawReporter+Test.h +++ b/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryOnDrawReporter+Test.h @@ -1,3 +1,4 @@ +#import "RNSentryEmitNewFrameEvent.h" #import "RNSentryOnDrawReporter.h" #import diff --git a/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryReplayOptionsTests.swift b/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryReplayOptionsTests.swift index 0d7ef3aa12..7b0355f269 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! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + let actualOptions = try! PrivateSentrySDKOnly.options(with: 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! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + let actualOptions = try! PrivateSentrySDKOnly.options(with: optionsDict as! [String: Any]) XCTAssertEqual(actualOptions.sessionReplay.onErrorSampleRate, 0.75) } @@ -108,7 +108,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + let actualOptions = try! PrivateSentrySDKOnly.options(with: 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! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + let actualOptions = try! PrivateSentrySDKOnly.options(with: 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! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + let actualOptions = try! PrivateSentrySDKOnly.options(with: 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! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + let actualOptions = try! PrivateSentrySDKOnly.options(with: 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! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + let actualOptions = try! PrivateSentrySDKOnly.options(with: optionsDict as! [String: Any]) XCTAssertTrue(actualOptions.sessionReplay.enableViewRendererV2) } @@ -190,7 +190,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + let actualOptions = try! PrivateSentrySDKOnly.options(with: optionsDict as! [String: Any]) XCTAssertTrue(actualOptions.sessionReplay.enableViewRendererV2) } @@ -204,7 +204,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + let actualOptions = try! PrivateSentrySDKOnly.options(with: optionsDict as! [String: Any]) XCTAssertFalse(actualOptions.sessionReplay.enableViewRendererV2) } @@ -217,7 +217,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + let actualOptions = try! PrivateSentrySDKOnly.options(with: optionsDict as! [String: Any]) XCTAssertFalse(actualOptions.sessionReplay.enableFastViewRendering) } @@ -231,7 +231,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + let actualOptions = try! PrivateSentrySDKOnly.options(with: optionsDict as! [String: Any]) XCTAssertTrue(actualOptions.sessionReplay.enableFastViewRendering) } @@ -245,7 +245,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + let actualOptions = try! PrivateSentrySDKOnly.options(with: optionsDict as! [String: Any]) XCTAssertFalse(actualOptions.sessionReplay.enableFastViewRendering) } @@ -258,7 +258,7 @@ final class RNSentryReplayOptions: XCTestCase { RNSentryReplay.updateOptions(optionsDict) - let actualOptions = try! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + let actualOptions = try! PrivateSentrySDKOnly.options(with: 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! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + let actualOptions = try! PrivateSentrySDKOnly.options(with: 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! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + let actualOptions = try! PrivateSentrySDKOnly.options(with: 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! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + let actualOptions = try! PrivateSentrySDKOnly.options(with: 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! SentryOptionsInternal.initWithDict(optionsDict as! [String: Any]) + let actualOptions = try! PrivateSentrySDKOnly.options(with: optionsDict as! [String: Any]) XCTAssertEqual(actualOptions.sessionReplay.quality, SentryReplayOptions.SentryReplayQuality.medium) } diff --git a/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryTests.m b/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryTests.m index d4cd8e957d..e24ba83756 100644 --- a/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryTests.m +++ b/packages/core/RNSentryCocoaTester/RNSentryCocoaTesterTests/RNSentryTests.m @@ -40,7 +40,6 @@ - (void)testCreateOptionsWithDictionaryRemovesPerformanceProperties XCTAssertEqual( actualOptions.tracesSampleRate, nil, @"Traces sample rate should not be passed to native"); XCTAssertEqual(actualOptions.tracesSampler, nil, @"Traces sampler should not be passed to native"); -XCTAssertEqual(actualOptions.enableTracing, false, @"EnableTracing should not be passed to native"); } - (void)testCaptureFailedRequestsIsDisabled @@ -348,10 +347,7 @@ - (void)testCreateOptionsWithDictionaryEnableLogsEnabled XCTAssertNotNil(actualOptions, @"Did not create sentry options"); XCTAssertNil(error, @"Should not pass no error"); - id experimentalOptions = [actualOptions valueForKey:@"experimental"]; - XCTAssertNotNil(experimentalOptions, @"Experimental options should not be nil"); - - BOOL enableLogs = [[experimentalOptions valueForKey:@"enableLogs"] boolValue]; + BOOL enableLogs = [[actualOptions valueForKey:@"enableLogs"] boolValue]; XCTAssertTrue(enableLogs, @"enableLogs should be enabled"); } @@ -370,11 +366,7 @@ - (void)testCreateOptionsWithDictionaryEnableLogsDisabled XCTAssertNotNil(actualOptions, @"Did not create sentry options"); XCTAssertNil(error, @"Should not pass no error"); - - id experimentalOptions = [actualOptions valueForKey:@"experimental"]; - XCTAssertNotNil(experimentalOptions, @"Experimental options should not be nil"); - - BOOL enableLogs = [[experimentalOptions valueForKey:@"enableLogs"] boolValue]; + BOOL enableLogs = [[actualOptions valueForKey:@"enableLogs"] boolValue]; XCTAssertFalse(enableLogs, @"enableLogs should be disabled"); } diff --git a/packages/core/ios/RNSentry+fetchNativeStack.m b/packages/core/ios/RNSentry+fetchNativeStack.m index d10f82108c..8acdf73684 100644 --- a/packages/core/ios/RNSentry+fetchNativeStack.m +++ b/packages/core/ios/RNSentry+fetchNativeStack.m @@ -1,4 +1,5 @@ #import "RNSentry.h" +#import "RNSentry+formatters.h" #import "RNSentryBreadcrumb.h" #import "RNSentryId.h" #import diff --git a/packages/core/ios/RNSentry+formatters.h b/packages/core/ios/RNSentry+formatters.h new file mode 100644 index 0000000000..13a8348af0 --- /dev/null +++ b/packages/core/ios/RNSentry+formatters.h @@ -0,0 +1,34 @@ +#import + +// This file is a copy from https://github.com/getsentry/sentry-cocoa/blob/6c20265de0903b835a299e2e9da0f7af50af09f5/Sources/Sentry/include/HybridPublic/SentryFormatter.h + +// 2 for the 0x prefix, plus 16 for the hex value, plus 1 for the null terminator +#define SENTRY_HEX_ADDRESS_LENGTH 19 + +static inline NSString * +sentry_snprintfHexAddress(uint64_t value) +{ + char buffer[SENTRY_HEX_ADDRESS_LENGTH]; + snprintf(buffer, SENTRY_HEX_ADDRESS_LENGTH, "0x%016llx", value); + NSString *nsString = [NSString stringWithCString:buffer encoding:NSASCIIStringEncoding]; + return nsString; +} + +static inline NSString * +sentry_formatHexAddress(NSNumber *value) +{ + /* + * We observed a 41% speedup by using snprintf vs +[NSString stringWithFormat:]. In a trial + * using a profile, we observed the +[NSString stringWithFormat:] using 282ms of CPU time, vs + * 164ms of CPU time for snprintf. There is also an assumed space improvement due to not needing + * to allocate as many instances of NSString, like for the format string literal, instead only + * using stack-bound C strings. + */ + return sentry_snprintfHexAddress([value unsignedLongLongValue]); +} + +static inline NSString * +sentry_formatHexAddressUInt64(uint64_t value) +{ + return sentry_snprintfHexAddress(value); +} diff --git a/packages/core/ios/RNSentry.mm b/packages/core/ios/RNSentry.mm index 10586ab910..033c898e21 100644 --- a/packages/core/ios/RNSentry.mm +++ b/packages/core/ios/RNSentry.mm @@ -26,7 +26,6 @@ #import #import #import -#import #import // This guard prevents importing Hermes in JSC apps @@ -47,13 +46,14 @@ #endif #if SENTRY_HAS_UIKIT -# import "RNSentryFramesTrackerListener.h" +# import "RNSentryEmitNewFrameEvent.h" # import "RNSentryRNSScreen.h" #endif #import "RNSentryExperimentalOptions.h" #import "RNSentryVersion.h" #import "SentrySDKWrapper.h" +#import "SentryScreenFramesWrapper.h" static bool hasFetchedAppStart; @@ -486,21 +486,15 @@ - (void)stopObserving #if TARGET_OS_IPHONE || TARGET_OS_MACCATALYST if (PrivateSentrySDKOnly.isFramesTrackingRunning) { - SentryScreenFrames *frames = PrivateSentrySDKOnly.currentScreenFrames; - - if (frames == nil) { + if (![SentryScreenFramesWrapper canTrackFrames]) { resolve(nil); return; } - NSNumber *total = [NSNumber numberWithLong:frames.total]; - NSNumber *frozen = [NSNumber numberWithLong:frames.frozen]; - NSNumber *slow = [NSNumber numberWithLong:frames.slow]; - resolve(@ { - @"totalFrames" : total, - @"frozenFrames" : frozen, - @"slowFrames" : slow, + @"totalFrames" : [SentryScreenFramesWrapper totalFrames], + @"frozenFrames" : [SentryScreenFramesWrapper frozenFrames], + @"slowFrames" : [SentryScreenFramesWrapper slowFrames], }); } else { resolve(nil); diff --git a/packages/core/ios/RNSentryDependencyContainer.h b/packages/core/ios/RNSentryDependencyContainer.h index cd3eca59c7..b3b3ff5233 100644 --- a/packages/core/ios/RNSentryDependencyContainer.h +++ b/packages/core/ios/RNSentryDependencyContainer.h @@ -1,6 +1,7 @@ #import -#import "RNSentryFramesTrackerListener.h" +#import "RNSentryEmitNewFrameEvent.h" +@class RNSentryFramesTrackerListener; @interface RNSentryDependencyContainer : NSObject SENTRY_NO_INIT diff --git a/packages/core/ios/RNSentryDependencyContainer.m b/packages/core/ios/RNSentryDependencyContainer.m index a29b602d52..08c4f6a8bf 100644 --- a/packages/core/ios/RNSentryDependencyContainer.m +++ b/packages/core/ios/RNSentryDependencyContainer.m @@ -1,4 +1,5 @@ #import "RNSentryDependencyContainer.h" +#import "RNSentryFramesTrackerListener.h" @import Sentry; @implementation RNSentryDependencyContainer { diff --git a/packages/core/ios/RNSentryEmitNewFrameEvent.h b/packages/core/ios/RNSentryEmitNewFrameEvent.h new file mode 100644 index 0000000000..473c91cc77 --- /dev/null +++ b/packages/core/ios/RNSentryEmitNewFrameEvent.h @@ -0,0 +1,3 @@ +#import + +typedef void (^RNSentryEmitNewFrameEvent)(NSNumber *newFrameTimestampInSeconds); diff --git a/packages/core/ios/RNSentryExperimentalOptions.m b/packages/core/ios/RNSentryExperimentalOptions.m index 7e0974e527..7bb198ab60 100644 --- a/packages/core/ios/RNSentryExperimentalOptions.m +++ b/packages/core/ios/RNSentryExperimentalOptions.m @@ -24,7 +24,7 @@ + (void)setEnableLogs:(BOOL)enabled sentryOptions:(SentryOptions *)sentryOptions if (sentryOptions == nil) { return; } - sentryOptions.experimental.enableLogs = enabled; + sentryOptions.enableLogs = enabled; } + (void)setEnableSessionReplayInUnreliableEnvironment:(BOOL)enabled diff --git a/packages/core/ios/RNSentryFramesTrackerListener.h b/packages/core/ios/RNSentryFramesTrackerListener.h index 627b3059f4..630f0daeee 100644 --- a/packages/core/ios/RNSentryFramesTrackerListener.h +++ b/packages/core/ios/RNSentryFramesTrackerListener.h @@ -2,11 +2,11 @@ #if SENTRY_HAS_UIKIT +# import "RNSentryEmitNewFrameEvent.h" # import # import -# import -typedef void (^RNSentryEmitNewFrameEvent)(NSNumber *newFrameTimestampInSeconds); +@import Sentry; @protocol RNSentryFramesTrackerListenerProtocol diff --git a/packages/core/ios/RNSentryFramesTrackerListener.m b/packages/core/ios/RNSentryFramesTrackerListener.m index 4a3c7d99cd..2e090bc711 100644 --- a/packages/core/ios/RNSentryFramesTrackerListener.m +++ b/packages/core/ios/RNSentryFramesTrackerListener.m @@ -2,6 +2,8 @@ #if SENTRY_HAS_UIKIT +@import Sentry; + @implementation RNSentryFramesTrackerListener - (instancetype)initWithSentryFramesTracker:(SentryFramesTracker *)framesTracker diff --git a/packages/core/ios/RNSentryOnDrawReporter.h b/packages/core/ios/RNSentryOnDrawReporter.h index 5c4083015d..b462dc4f0b 100644 --- a/packages/core/ios/RNSentryOnDrawReporter.h +++ b/packages/core/ios/RNSentryOnDrawReporter.h @@ -2,10 +2,11 @@ #if SENTRY_HAS_UIKIT -# import "RNSentryFramesTrackerListener.h" # import # import +@protocol RNSentryFramesTrackerListenerProtocol; + @interface RNSentryOnDrawReporter : RCTViewManager @end diff --git a/packages/core/ios/RNSentryOnDrawReporter.m b/packages/core/ios/RNSentryOnDrawReporter.m index b069fcd6f6..6f63ca92d8 100644 --- a/packages/core/ios/RNSentryOnDrawReporter.m +++ b/packages/core/ios/RNSentryOnDrawReporter.m @@ -1,4 +1,6 @@ #import "RNSentryOnDrawReporter.h" +#import "RNSentryEmitNewFrameEvent.h" +#import "RNSentryFramesTrackerListener.h" #import "RNSentryTimeToDisplay.h" @import Sentry; diff --git a/packages/core/ios/RNSentryRNSScreen.m b/packages/core/ios/RNSentryRNSScreen.m index 20c42ab4c4..90b2e733d3 100644 --- a/packages/core/ios/RNSentryRNSScreen.m +++ b/packages/core/ios/RNSentryRNSScreen.m @@ -2,11 +2,10 @@ #if SENTRY_HAS_UIKIT -# import -# import -# import - # import "RNSentryDependencyContainer.h" +# import "RNSentryFramesTrackerListener.h" +# import +@import Sentry; @implementation RNSentryRNSScreen diff --git a/packages/core/ios/RNSentryReplayBreadcrumbConverter.m b/packages/core/ios/RNSentryReplayBreadcrumbConverter.m index 14dfdc32a0..59bf29e0e6 100644 --- a/packages/core/ios/RNSentryReplayBreadcrumbConverter.m +++ b/packages/core/ios/RNSentryReplayBreadcrumbConverter.m @@ -11,7 +11,7 @@ @implementation RNSentryReplayBreadcrumbConverter { - (instancetype _Nonnull)init { if (self = [super init]) { - self->defaultConverter = [SentrySessionReplayIntegration createDefaultBreadcrumbConverter]; + self->defaultConverter = [SentrySessionReplayHybridSDK createDefaultBreadcrumbConverter]; } return self; } @@ -36,11 +36,11 @@ - (instancetype _Nonnull)init } if ([breadcrumb.category isEqualToString:@"navigation"]) { - return [SentrySessionReplayIntegration createBreadcrumbwithTimestamp:breadcrumb.timestamp - category:breadcrumb.category - message:nil - level:breadcrumb.level - data:breadcrumb.data]; + return [SentrySessionReplayHybridSDK createBreadcrumbwithTimestamp:breadcrumb.timestamp + category:breadcrumb.category + message:nil + level:breadcrumb.level + data:breadcrumb.data]; } if ([breadcrumb.category isEqualToString:@"xhr"]) { @@ -68,11 +68,11 @@ - (instancetype _Nonnull)init NSMutableArray *path = [breadcrumb.data valueForKey:@"path"]; NSString *message = [RNSentryReplayBreadcrumbConverter getTouchPathMessageFrom:path]; - return [SentrySessionReplayIntegration createBreadcrumbwithTimestamp:breadcrumb.timestamp - category:@"ui.tap" - message:message - level:breadcrumb.level - data:breadcrumb.data]; + return [SentrySessionReplayHybridSDK createBreadcrumbwithTimestamp:breadcrumb.timestamp + category:@"ui.tap" + message:message + level:breadcrumb.level + data:breadcrumb.data]; } + (NSString *_Nullable)getTouchPathMessageFrom:(NSArray *_Nullable)path @@ -156,7 +156,7 @@ + (NSString *_Nullable)getTouchPathMessageFrom:(NSArray *_Nullable)path data[@"responseBodySize"] = breadcrumb.data[@"response_body_size"]; } - return [SentrySessionReplayIntegration + return [SentrySessionReplayHybridSDK createNetworkBreadcrumbWithTimestamp:[NSDate dateWithTimeIntervalSince1970:(startTimestamp .doubleValue diff --git a/packages/core/ios/SentrySDKWrapper.m b/packages/core/ios/SentrySDKWrapper.m index c11782d5ad..d724f74d04 100644 --- a/packages/core/ios/SentrySDKWrapper.m +++ b/packages/core/ios/SentrySDKWrapper.m @@ -35,8 +35,8 @@ + (SentryOptions *)createOptionsWithDictionary:(NSDictionary *)options error:(NSError *__autoreleasing *)errorPointer { NSString *dsn = [self getURLFromDSN:[options valueForKey:@"dsn"]]; - SentryOptions *sentryOptions = [SentryOptionsInternal initWithDict:options - didFailWithError:errorPointer]; + SentryOptions *sentryOptions = [PrivateSentrySDKOnly optionsWithDictionary:options + didFailWithError:errorPointer]; if (*errorPointer != nil) { return nil; } diff --git a/packages/core/ios/SentryScreenFramesWrapper.h b/packages/core/ios/SentryScreenFramesWrapper.h new file mode 100644 index 0000000000..4c664140e0 --- /dev/null +++ b/packages/core/ios/SentryScreenFramesWrapper.h @@ -0,0 +1,14 @@ +#import + +#if TARGET_OS_IPHONE || TARGET_OS_MACCATALYST + +@interface SentryScreenFramesWrapper : NSObject + ++ (BOOL)canTrackFrames; ++ (NSNumber *)totalFrames; ++ (NSNumber *)frozenFrames; ++ (NSNumber *)slowFrames; + +@end + +#endif // TARGET_OS_IPHONE || TARGET_OS_MACCATALYST diff --git a/packages/core/ios/SentryScreenFramesWrapper.m b/packages/core/ios/SentryScreenFramesWrapper.m new file mode 100644 index 0000000000..9df4e13070 --- /dev/null +++ b/packages/core/ios/SentryScreenFramesWrapper.m @@ -0,0 +1,39 @@ +#import "SentryScreenFramesWrapper.h" +@import Sentry; + +#if TARGET_OS_IPHONE || TARGET_OS_MACCATALYST + +@implementation SentryScreenFramesWrapper + ++ (BOOL)canTrackFrames +{ + return PrivateSentrySDKOnly.currentScreenFrames != nil; +} + ++ (NSNumber *)totalFrames +{ + if (![self canTrackFrames]) { + return nil; + } + return [NSNumber numberWithLong:PrivateSentrySDKOnly.currentScreenFrames.total]; +} + ++ (NSNumber *)frozenFrames +{ + if (![self canTrackFrames]) { + return nil; + } + return [NSNumber numberWithLong:PrivateSentrySDKOnly.currentScreenFrames.frozen]; +} + ++ (NSNumber *)slowFrames +{ + if (![self canTrackFrames]) { + return nil; + } + return [NSNumber numberWithLong:PrivateSentrySDKOnly.currentScreenFrames.slow]; +} + +@end + +#endif // TARGET_OS_IPHONE || TARGET_OS_MACCATALYST diff --git a/samples/react-native-macos/macos/Podfile b/samples/react-native-macos/macos/Podfile index 2a5c39963b..500d613ed2 100644 --- a/samples/react-native-macos/macos/Podfile +++ b/samples/react-native-macos/macos/Podfile @@ -4,7 +4,7 @@ require_relative '../node_modules/@react-native-community/cli-platform-ios/nativ prepare_react_native_project! target 'sentry-react-native-sample-macOS' do - platform :macos, '10.15' + platform :macos, '12.0' use_native_modules! # Flags change depending on the env values. diff --git a/scripts/update-cocoa.sh b/scripts/update-cocoa.sh index 86b60dae90..7d2a5ce0ed 100755 --- a/scripts/update-cocoa.sh +++ b/scripts/update-cocoa.sh @@ -3,7 +3,7 @@ set -euo pipefail file="$(dirname "$0")/../packages/core/RNSentry.podspec" content=$(cat $file) -regex="('Sentry/HybridSDK', *)'([0-9\.]+)'" +regex="('Sentry', *)'([0-9\.]+)'" if ! [[ $content =~ $regex ]]; then echo "Failed to find the plugin version in $file" exit 1