From 077e94086236b0be69cb0982b64053b94f2c9ea4 Mon Sep 17 00:00:00 2001 From: Dhiogo Brustolin Date: Mon, 26 Aug 2024 16:41:54 +0200 Subject: [PATCH 1/3] Fix: Proper redact SR during animation (#4289) * Update UIRedactBuilder.swift * Update CHANGELOG.md --- CHANGELOG.md | 4 ++++ Sources/Swift/Tools/UIRedactBuilder.swift | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b284bb4eacd..b2cc43fe614 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## Unreleased +### Fixes + +- Proper redact SR during animation (#4289) ## 8.35.1 diff --git a/Sources/Swift/Tools/UIRedactBuilder.swift b/Sources/Swift/Tools/UIRedactBuilder.swift index e74ff98e708..8b1d8d8a852 100644 --- a/Sources/Swift/Tools/UIRedactBuilder.swift +++ b/Sources/Swift/Tools/UIRedactBuilder.swift @@ -111,7 +111,7 @@ class UIRedactBuilder { var redactingRegions = [RedactRegion]() self.mapRedactRegion(fromView: view, - to: view, + to: view.layer.presentation() ?? view.layer, redacting: &redactingRegions, area: view.frame, redactText: options?.redactAllText ?? true, @@ -141,8 +141,8 @@ class UIRedactBuilder { return image.imageAsset?.value(forKey: "_containingBundle") == nil } - private func mapRedactRegion(fromView view: UIView, to: UIView, redacting: inout [RedactRegion], area: CGRect, redactText: Bool, redactImage: Bool) { - let rectInWindow = view.convert(view.bounds, to: to) + private func mapRedactRegion(fromView view: UIView, to: CALayer, redacting: inout [RedactRegion], area: CGRect, redactText: Bool, redactImage: Bool) { + let rectInWindow = (view.layer.presentation() ?? view.layer).convert(view.bounds, to: to) guard (redactImage || redactText) && area.intersects(rectInWindow) && !view.isHidden && view.alpha != 0 else { return } let ignore = shouldIgnore(view: view) From 3fd6a8b8dbc50dc9adcbfa24a7e7fece1351b3b4 Mon Sep 17 00:00:00 2001 From: Andrew McKnight Date: Mon, 26 Aug 2024 23:50:45 -0700 Subject: [PATCH 2/3] feat(profiling): expose continuous profiling API (#4010) --- CHANGELOG.md | 4 ++++ Samples/iOS-Swift/iOS-Swift/AppDelegate.swift | 1 + Sources/Sentry/Public/SentryOptions.h | 23 +++++++++++-------- Sources/Sentry/Public/SentrySDK.h | 20 ++++++++++++++++ Sources/Sentry/include/SentrySDK+Private.h | 16 ------------- .../include/SentrySampleDecision+Private.h | 2 ++ .../SentryFramesTrackerTests.swift | 5 ++++ Tests/SentryTests/SentryOptionsTest.m | 14 +++++++---- Tests/SentryTests/SentrySDKTests.swift | 9 ++++---- .../Transaction/SentryTransactionTests.swift | 8 ++++++- 10 files changed, 66 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b2cc43fe614..d96a7c24a93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Changelog ## Unreleased +### Features + +- Continuous mode profiling (see `SentrySDK.startProfiler` and `SentryOptions.profilesSampleRate`) (#4010) + ### Fixes - Proper redact SR during animation (#4289) diff --git a/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift b/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift index 76e21d8eaca..96595acb14e 100644 --- a/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift +++ b/Samples/iOS-Swift/iOS-Swift/AppDelegate.swift @@ -89,6 +89,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { options.enableTimeToFullDisplayTracing = true options.enablePerformanceV2 = true options.enableMetrics = !args.contains("--disable-metrics") + options.profilesSampleRate = ProcessInfo.processInfo.arguments.contains("--io.sentry.enable-continuous-profiling") ? nil : 1 options.add(inAppInclude: "iOS_External") diff --git a/Sources/Sentry/Public/SentryOptions.h b/Sources/Sentry/Public/SentryOptions.h index 465c31a9eb2..9b549a3266f 100644 --- a/Sources/Sentry/Public/SentryOptions.h +++ b/Sources/Sentry/Public/SentryOptions.h @@ -466,11 +466,12 @@ NS_SWIFT_NAME(Options) /** * @warning This is an experimental feature and may still have bugs. * Set to @c YES to run the profiler as early as possible in an app launch, before you would - * normally have the opportunity to call @c SentrySDK.start . If enabled, the @c tracesSampleRate - * and @c profilesSampleRate are persisted to disk and read on the next app launch to decide whether - * to profile that launch. - * @see @c tracesSampler and @c profilesSampler for more information on how they work for this - * feature. + * normally have the opportunity to call @c SentrySDK.start . If @c profilesSampleRate is nonnull, + * the @c tracesSampleRate and @c profilesSampleRate are persisted to disk and read on the next app + * launch to decide whether to profile that launch. + * @warning If @c profilesSampleRate is @c nil then a continuous profile will be started on every + * launch; if you desire sampling profiled launches, you must compute your own sample rate to decide + * whether to set this property to @c YES or @c NO . * @note Profiling is automatically disabled if a thread sanitizer is attached. */ @property (nonatomic, assign) BOOL enableAppLaunchProfiling; @@ -478,12 +479,11 @@ NS_SWIFT_NAME(Options) /** * @note Profiling is not supported on watchOS or tvOS. * Indicates the percentage profiles being sampled out of the sampled transactions. - * @note The default is @c 0. * @note The value needs to be >= @c 0.0 and \<= @c 1.0. When setting a value out of range - * the SDK sets it to the default of @c 0. - * This property is dependent on @c tracesSampleRate -- if @c tracesSampleRate is @c 0 (default), - * no profiles will be collected no matter what this property is set to. This property is - * used to undersample profiles *relative to* @c tracesSampleRate . + * the SDK sets it to @c 0. When set to a valid nonnull value, this property is dependent on + * @c tracesSampleRate -- if @c tracesSampleRate is @c 0 (default), no profiles will be collected no + * matter what this property is set to. This property is used to undersample profiles *relative to* + * @c tracesSampleRate . * @note Setting this value to @c nil enables an experimental new profiling mode, called continuous * profiling. This allows you to start and stop a profiler any time with @c SentrySDK.startProfiler * and @c SentrySDK.stopProfiler, which can run with no time limit, periodically uploading profiling @@ -493,6 +493,9 @@ NS_SWIFT_NAME(Options) * automatically started for app launches. If you wish to sample them, you must do so at the * callsites where you use the API or configure launch profiling. Continuous profiling is not * automatically started for performance transactions as was the previous version of profiling. + * @seealso https://docs.sentry.io/platforms/apple/profiling/ for more information about the + * different profiling modes. + * @note The default is @c nil (which implies continuous profiling mode). * @warning The new continuous profiling mode is experimental and may still contain bugs. * @note Profiling is automatically disabled if a thread sanitizer is attached. */ diff --git a/Sources/Sentry/Public/SentrySDK.h b/Sources/Sentry/Public/SentrySDK.h index 73b3432dd94..9f728c26380 100644 --- a/Sources/Sentry/Public/SentrySDK.h +++ b/Sources/Sentry/Public/SentrySDK.h @@ -353,6 +353,26 @@ SENTRY_NO_INIT #endif +#if SENTRY_TARGET_PROFILING_SUPPORTED +/** + * Start a new continuous profiling session if one is not already running. + * @note Unlike trace-based profiling, continuous profiling does not take into account @c + * SentryOptions.profilesSampleRate ; a call to this method will always start a profile if one is + * not already running. This includes app launch profiles configured with @c + * SentryOptions.enableAppLaunchProfiling . + * @warning Continuous profiling mode is experimental and may still contain bugs. + * @seealso https://docs.sentry.io/platforms/apple/guides/ios/profiling/#continuous-profiling + */ ++ (void)startProfiler; + +/** + * Stop a continuous profiling session if there is one ongoing. + * @warning Continuous profiling mode is experimental and may still contain bugs. + * @seealso https://docs.sentry.io/platforms/apple/guides/ios/profiling/#continuous-profiling + */ ++ (void)stopProfiler; +#endif // SENTRY_TARGET_PROFILING_SUPPORTED + @end NS_ASSUME_NONNULL_END diff --git a/Sources/Sentry/include/SentrySDK+Private.h b/Sources/Sentry/include/SentrySDK+Private.h index 5dcca1a1347..9e502178c53 100644 --- a/Sources/Sentry/include/SentrySDK+Private.h +++ b/Sources/Sentry/include/SentrySDK+Private.h @@ -52,22 +52,6 @@ SentrySDK () */ + (void)captureEnvelope:(SentryEnvelope *)envelope; -#if SENTRY_TARGET_PROFILING_SUPPORTED -/** - * Start a new continuous profiling session if one is not already running. - * @seealso https://docs.sentry.io/platforms/apple/profiling/ - */ -+ (void)startProfiler; - -/** - * Stop a continuous profiling session if there is one ongoing. This doesn't immediately - * stop the profiler, rather, the current profiling chunk timer will be allowed to expire and will - * not be renewed afterwards. - * @seealso https://docs.sentry.io/platforms/apple/profiling/ - */ -+ (void)stopProfiler; -#endif // SENTRY_TARGET_PROFILING_SUPPORTED - @end NS_ASSUME_NONNULL_END diff --git a/Sources/Sentry/include/SentrySampleDecision+Private.h b/Sources/Sentry/include/SentrySampleDecision+Private.h index 93e781ec8e0..fe904ff95b2 100644 --- a/Sources/Sentry/include/SentrySampleDecision+Private.h +++ b/Sources/Sentry/include/SentrySampleDecision+Private.h @@ -1,5 +1,7 @@ #import +#import "SentrySampleDecision.h" + /** Returns the value to use when serializing a SentrySampleDecision. */ diff --git a/Tests/SentryTests/Integrations/Performance/FramesTracking/SentryFramesTrackerTests.swift b/Tests/SentryTests/Integrations/Performance/FramesTracking/SentryFramesTrackerTests.swift index d1012cf4548..69d419ac6d7 100644 --- a/Tests/SentryTests/Integrations/Performance/FramesTracking/SentryFramesTrackerTests.swift +++ b/Tests/SentryTests/Integrations/Performance/FramesTracking/SentryFramesTrackerTests.swift @@ -33,6 +33,11 @@ class SentryFramesTrackerTests: XCTestCase { fixture = Fixture() } + override func tearDown() { + super.tearDown() + clearTestState() + } + func testIsNotRunning_WhenNotStarted() { XCTAssertFalse(self.fixture.sut.isRunning) } diff --git a/Tests/SentryTests/SentryOptionsTest.m b/Tests/SentryTests/SentryOptionsTest.m index c0c25f03175..8757799eab6 100644 --- a/Tests/SentryTests/SentryOptionsTest.m +++ b/Tests/SentryTests/SentryOptionsTest.m @@ -732,7 +732,7 @@ - (void)assertDefaultValues:(SentryOptions *)options # pragma clang diagnostic pop XCTAssertNil(options.profilesSampleRate); XCTAssertNil(options.profilesSampler); - XCTAssert([options isContinuousProfilingEnabled]); + XCTAssertTrue([options isContinuousProfilingEnabled]); #endif // SENTRY_TARGET_PROFILING_SUPPORTED XCTAssertTrue([options.spotlightUrl isEqualToString:@"http://localhost:8969/stream"]); @@ -1151,7 +1151,7 @@ - (void)testDefaultProfilesSampleRate // rev XCTAssertFalse(options.isProfilingEnabled); - XCTAssert([options isContinuousProfilingEnabled]); + XCTAssertTrue([options isContinuousProfilingEnabled]); } - (void)testProfilesSampleRate_SetToNil @@ -1182,6 +1182,8 @@ - (void)testProfilesSampleRateLowerBound options.profilesSampleRate = tooLow; XCTAssertEqual(options.profilesSampleRate.doubleValue, 0); + // setting an invalid sample rate effectively now enables continuous profiling, since it can let + // the backing variable remain nil XCTAssertFalse([options isContinuousProfilingEnabled]); } @@ -1200,6 +1202,8 @@ - (void)testProfilesSampleRateUpperBound options.profilesSampleRate = tooLow; XCTAssertEqual(options.profilesSampleRate.doubleValue, 0); + // setting an invalid sample rate effectively now enables continuous profiling, since it can let + // the backing variable remain nil XCTAssertFalse([options isContinuousProfilingEnabled]); } @@ -1212,7 +1216,7 @@ - (void)testIsProfilingEnabled_NothingSet_IsDisabled XCTAssertFalse(options.isProfilingEnabled); XCTAssertNil(options.profilesSampleRate); - XCTAssert([options isContinuousProfilingEnabled]); + XCTAssertTrue([options isContinuousProfilingEnabled]); } - (void)testIsProfilingEnabled_ProfilesSampleRateSetToZero_IsDisabled @@ -1311,14 +1315,14 @@ - (void)testDefaultProfilesSampler { SentryOptions *options = [self getValidOptions:@{}]; XCTAssertNil(options.profilesSampler); - XCTAssert([options isContinuousProfilingEnabled]); + XCTAssertTrue([options isContinuousProfilingEnabled]); } - (void)testGarbageProfilesSampler_ReturnsNil { SentryOptions *options = [self getValidOptions:@{ @"profilesSampler" : @"fault" }]; XCTAssertNil(options.profilesSampler); - XCTAssert([options isContinuousProfilingEnabled]); + XCTAssertTrue([options isContinuousProfilingEnabled]); } #endif // SENTRY_TARGET_PROFILING_SUPPORTED diff --git a/Tests/SentryTests/SentrySDKTests.swift b/Tests/SentryTests/SentrySDKTests.swift index 6a819527636..3a4d82fb845 100644 --- a/Tests/SentryTests/SentrySDKTests.swift +++ b/Tests/SentryTests/SentrySDKTests.swift @@ -423,17 +423,18 @@ class SentrySDKTests: XCTestCase { func testStartingContinuousProfilerWithSampleRateZero() throws { givenSdkWithHub() - // nil is the default value for profilesSampleRate, so we don't have to explicitly set it on the fixture - XCTAssertNil(fixture.options.profilesSampleRate) + fixture.options.profilesSampleRate = 0 + XCTAssertEqual(try XCTUnwrap(fixture.options.profilesSampleRate).doubleValue, 0) + XCTAssertFalse(SentryContinuousProfiler.isCurrentlyProfiling()) SentrySDK.startProfiler() - XCTAssert(SentryContinuousProfiler.isCurrentlyProfiling()) + XCTAssertFalse(SentryContinuousProfiler.isCurrentlyProfiling()) } func testStartingContinuousProfilerWithSampleRateNil() throws { givenSdkWithHub() - fixture.options.profilesSampleRate = nil + // nil is the default initial value for profilesSampleRate, so we don't have to explicitly set it on the fixture XCTAssertFalse(SentryContinuousProfiler.isCurrentlyProfiling()) SentrySDK.startProfiler() XCTAssert(SentryContinuousProfiler.isCurrentlyProfiling()) diff --git a/Tests/SentryTests/Transaction/SentryTransactionTests.swift b/Tests/SentryTests/Transaction/SentryTransactionTests.swift index f689d02a18c..e501c1df96d 100644 --- a/Tests/SentryTests/Transaction/SentryTransactionTests.swift +++ b/Tests/SentryTests/Transaction/SentryTransactionTests.swift @@ -47,6 +47,11 @@ class SentryTransactionTests: XCTestCase { super.setUp() fixture = Fixture() } + + override func tearDown() { + super.tearDown() + clearTestState() + } func testSerializeMeasurements_NoMeasurements() { let actual = fixture.getTransaction().serialize() @@ -223,7 +228,8 @@ class SentryTransactionTests: XCTestCase { #if os(iOS) || os(macOS) || targetEnvironment(macCatalyst) func testTransactionWithContinuousProfile() throws { - SentrySDK.setStart(Options()) + let options = Options() + SentrySDK.setStart(options) let transaction = fixture.getTransaction() SentryContinuousProfiler.start() let profileId = try XCTUnwrap(SentryContinuousProfiler.profiler()?.profilerId.sentryIdString) From 5575af93efb776414f243e93d6af9f6258dc539a Mon Sep 17 00:00:00 2001 From: getsentry-bot Date: Tue, 27 Aug 2024 08:55:29 +0000 Subject: [PATCH 3/3] release: 8.36.0 --- .github/last-release-runid | 2 +- CHANGELOG.md | 2 +- Package.swift | 8 ++++---- Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj | 8 ++++---- Sentry.podspec | 2 +- SentryPrivate.podspec | 2 +- SentrySwiftUI.podspec | 4 ++-- Sources/Configuration/SDK.xcconfig | 2 +- Sources/Sentry/SentryMeta.m | 2 +- Tests/HybridSDKTest/HybridPod.podspec | 2 +- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/last-release-runid b/.github/last-release-runid index 6fa6845cecb..cb591b1524e 100644 --- a/.github/last-release-runid +++ b/.github/last-release-runid @@ -1 +1 @@ -10559523391 +10574712746 diff --git a/CHANGELOG.md b/CHANGELOG.md index d96a7c24a93..a50b8d6d7d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ # Changelog -## Unreleased +## 8.36.0 ### Features diff --git a/Package.swift b/Package.swift index be8fe97876c..d9e65d91d66 100644 --- a/Package.swift +++ b/Package.swift @@ -12,13 +12,13 @@ let package = Package( targets: [ .binaryTarget( name: "Sentry", - url: "https://github.com/getsentry/sentry-cocoa/releases/download/8.35.1/Sentry.xcframework.zip", - checksum: "7195da7b164542bf9a9ac346c229eb1590ec8b73c632fa5385565529630953ca" //Sentry-Static + url: "https://github.com/getsentry/sentry-cocoa/releases/download/8.36.0/Sentry.xcframework.zip", + checksum: "ca2140c6ef4986cd4f4436b23b3bd3cbe582a450fb62a9410efd3085f90be4c5" //Sentry-Static ), .binaryTarget( name: "Sentry-Dynamic", - url: "https://github.com/getsentry/sentry-cocoa/releases/download/8.35.1/Sentry-Dynamic.xcframework.zip", - checksum: "ee0717013601b48a9d50be188c25c6b05c4ddea5f011617498b4e17b07e1b30c" //Sentry-Dynamic + url: "https://github.com/getsentry/sentry-cocoa/releases/download/8.36.0/Sentry-Dynamic.xcframework.zip", + checksum: "1990ea055eb3cd1779ef2a63f28ef23039999fc0fcef7d678e1d66bfc52de7e7" //Sentry-Dynamic ), .target ( name: "SentrySwiftUI", dependencies: ["Sentry", "SentryInternal"], diff --git a/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj b/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj index 968c2e620bf..63a03cd9d3b 100644 --- a/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj +++ b/Samples/iOS-Swift/iOS-Swift.xcodeproj/project.pbxproj @@ -1257,7 +1257,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 8.35.1; + MARKETING_VERSION = 8.36.0; PRODUCT_BUNDLE_IDENTIFIER = "io.sentry.sample.iOS-Swift"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = "match Development io.sentry.sample.iOS-Swift"; @@ -1286,7 +1286,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 8.35.1; + MARKETING_VERSION = 8.36.0; PRODUCT_BUNDLE_IDENTIFIER = "io.sentry.sample.iOS-Swift"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = "match AppStore io.sentry.sample.iOS-Swift"; @@ -1935,7 +1935,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 8.35.1; + MARKETING_VERSION = 8.36.0; PRODUCT_BUNDLE_IDENTIFIER = "io.sentry.sample.iOS-Swift.Clip"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = "match Development io.sentry.sample.iOS-Swift.Clip"; @@ -1970,7 +1970,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 8.35.1; + MARKETING_VERSION = 8.36.0; PRODUCT_BUNDLE_IDENTIFIER = "io.sentry.sample.iOS-Swift.Clip"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = "match AppStore io.sentry.sample.iOS-Swift.Clip"; diff --git a/Sentry.podspec b/Sentry.podspec index 66a06a3f9c8..e7edb769d40 100644 --- a/Sentry.podspec +++ b/Sentry.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "Sentry" - s.version = "8.35.1" + s.version = "8.36.0" s.summary = "Sentry client for cocoa" s.homepage = "https://github.com/getsentry/sentry-cocoa" s.license = "mit" diff --git a/SentryPrivate.podspec b/SentryPrivate.podspec index da98500a8ca..600716e20b2 100644 --- a/SentryPrivate.podspec +++ b/SentryPrivate.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "SentryPrivate" - s.version = "8.35.1" + s.version = "8.36.0" s.summary = "Sentry Private Library." s.homepage = "https://github.com/getsentry/sentry-cocoa" s.license = "mit" diff --git a/SentrySwiftUI.podspec b/SentrySwiftUI.podspec index f0f88c9a523..fedb234a3f4 100644 --- a/SentrySwiftUI.podspec +++ b/SentrySwiftUI.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "SentrySwiftUI" - s.version = "8.35.1" + s.version = "8.36.0" s.summary = "Sentry client for SwiftUI" s.homepage = "https://github.com/getsentry/sentry-cocoa" s.license = "mit" @@ -19,5 +19,5 @@ Pod::Spec.new do |s| s.watchos.framework = 'WatchKit' s.source_files = "Sources/SentrySwiftUI/**/*.{swift,h,m}" - s.dependency 'Sentry', "8.35.1" + s.dependency 'Sentry', "8.36.0" end diff --git a/Sources/Configuration/SDK.xcconfig b/Sources/Configuration/SDK.xcconfig index b84daba3a30..7e3f340528a 100644 --- a/Sources/Configuration/SDK.xcconfig +++ b/Sources/Configuration/SDK.xcconfig @@ -10,7 +10,7 @@ DYLIB_INSTALL_NAME_BASE = @rpath MACH_O_TYPE = mh_dylib FRAMEWORK_VERSION = A -CURRENT_PROJECT_VERSION = 8.35.1 +CURRENT_PROJECT_VERSION = 8.36.0 ALWAYS_SEARCH_USER_PATHS = NO CLANG_ENABLE_OBJC_ARC = YES diff --git a/Sources/Sentry/SentryMeta.m b/Sources/Sentry/SentryMeta.m index 1da920d66a0..f66013d679b 100644 --- a/Sources/Sentry/SentryMeta.m +++ b/Sources/Sentry/SentryMeta.m @@ -5,7 +5,7 @@ @implementation SentryMeta // Don't remove the static keyword. If you do the compiler adds the constant name to the global // symbol table and it might clash with other constants. When keeping the static keyword the // compiler replaces all occurrences with the value. -static NSString *versionString = @"8.35.1"; +static NSString *versionString = @"8.36.0"; static NSString *sdkName = @"sentry.cocoa"; + (NSString *)versionString diff --git a/Tests/HybridSDKTest/HybridPod.podspec b/Tests/HybridSDKTest/HybridPod.podspec index b20ddd13d42..200b6820d9e 100644 --- a/Tests/HybridSDKTest/HybridPod.podspec +++ b/Tests/HybridSDKTest/HybridPod.podspec @@ -13,6 +13,6 @@ Pod::Spec.new do |s| s.requires_arc = true s.frameworks = 'Foundation' s.swift_versions = "5.5" - s.dependency "Sentry/HybridSDK", "8.35.1" + s.dependency "Sentry/HybridSDK", "8.36.0" s.source_files = "HybridTest.swift" end