Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
f6fb455
chore(deps): update Cocoa SDK to v9.0.0-alpha.0
antonis Nov 11, 2025
c38771e
Adds changelog
antonis Nov 11, 2025
f92df85
Merge branch 'main' into cocoa-v9
antonis Nov 11, 2025
4806cf2
fix: Fixes SentryScreenFrames use after being converted to Swift (#5153)
itaybre Nov 11, 2025
63f29e8
Move `sentry-cocoa` `enableLogs` out of experimental (#5267)
denrase Nov 11, 2025
f149b21
chore: Remove SentryFrameTracker imports (#5276)
itaybre Nov 11, 2025
4535c93
Merge branch 'main' into cocoa-v9
antonis Nov 12, 2025
c879414
Merge branch 'main' into cocoa-v9
antonis Nov 12, 2025
4807c21
fix(podspec): Cocoa V9 allow any alpha version
philipphofmann Nov 13, 2025
8aea859
chore(sample): Cocoa-v9: Bump MacOS sample to macos 12.0 (#5359)
antonis Nov 13, 2025
c2a73eb
chore(e2e): Cocoa-v9: Bump E2E to iOS 15.0 (#5369)
antonis Nov 13, 2025
dff3b52
chore(ci): Cocoa V9: Run the full CI checks for cocoa-v9 (#5370)
antonis Nov 13, 2025
d5086fa
Merge branch 'main' into cocoa-v9
antonis Nov 14, 2025
d5f694e
Merge branch 'main' into cocoa-v9
antonis Nov 18, 2025
81f101f
Merge branch 'main' into cocoa-v9
antonis Nov 24, 2025
8d08510
Merge branch 'main' into cocoa-v9
antonis Nov 24, 2025
03d42c6
Update changelog
antonis Nov 24, 2025
a15f039
Merge branch 'main' into cocoa-v9
antonis Nov 25, 2025
7aee159
Bumpt to RC1
antonis Nov 25, 2025
48ef669
Remove cocoa-v9 from ci branches
antonis Nov 25, 2025
20e0dfa
fix: Use new session replay name for hybrid SDK
noahsmartin Nov 26, 2025
072fe30
Fix rename
noahsmartin Nov 26, 2025
5c4290e
Merge branch 'main' into cocoa-v9
antonis Nov 28, 2025
8bf0b92
chore(lint): Fixes lint issues
antonis Nov 28, 2025
0412e64
Merge branch 'main' into cocoa-v9
antonis Dec 1, 2025
92fc6ec
Update changelog to GA
antonis Dec 1, 2025
a7b5f8f
Merge branch 'main' into cocoa-v9
antonis Dec 9, 2025
b9e7a48
chore: Move from using Hybrid SDK subspec to regular Sentry podspec
itaybre Dec 9, 2025
51371eb
Merge branch 'main' into cocoa-v9
antonis Dec 11, 2025
91b4776
Merge branch 'cocoa-v9' into itay/use_regular_podspec
antonis Dec 11, 2025
db6a22e
Merge branch 'main' into cocoa-v9
antonis Dec 11, 2025
305af1c
Merge branch 'main' into cocoa-v9
antonis Dec 15, 2025
55d4f63
Merge branch 'main' into cocoa-v9
antonis Dec 16, 2025
316175a
Update changelog
antonis Dec 16, 2025
6ebfb9e
Bump minimum to 9.1.0
antonis Dec 16, 2025
277d85e
Merge branch 'main' into cocoa-v9
antonis Dec 16, 2025
37d859b
Replace SentryOptionsInternal with PrivateSentrySDKOnly helper method
itaybre Dec 16, 2025
ada3339
Merge branch 'itay/use_regular_podspec' of github.com:getsentry/sentr…
itaybre Dec 16, 2025
55f31c7
Replace the deprecated `optionsWithDictionary` with `options(with:)`
itaybre Dec 16, 2025
10b1a8f
Merge branch 'main' into cocoa-v9
antonis Dec 17, 2025
e1d97f3
Added RNSentry+formatters.h
itaybre Dec 17, 2025
09fa6d1
Merge branch 'cocoa-v9' into itay/use_regular_podspec
itaybre Dec 17, 2025
9ad39b3
Merge branch 'antonis/cocoa-9.1.1' into itay/use_regular_podspec
antonis Jan 8, 2026
9770590
Do not use subspec
antonis Jan 8, 2026
36fc936
Fix lint issues
antonis Jan 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion packages/core/RNSentry.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ Pod::Spec.new do |s|

s.compiler_flags = other_cflags

s.dependency 'Sentry/HybridSDK', '9.1.1-alpha.0'
s.dependency 'Sentry', '9.1.1-alpha.0'

if defined? install_modules_dependencies
# Default React Native dependencies for 0.71 and above (new and legacy architecture)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

Expand All @@ -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)
}

Expand Down Expand Up @@ -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")
Expand All @@ -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)
Expand All @@ -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")
Expand All @@ -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)
Expand All @@ -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)
}
Expand All @@ -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)
}
Expand All @@ -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)
}
Expand All @@ -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)
}
Expand All @@ -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)
}
Expand All @@ -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)
}
Expand All @@ -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)
}
Expand All @@ -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)
}
Expand All @@ -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)
}
Expand All @@ -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)
}
Expand All @@ -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)
}
Expand Down
1 change: 1 addition & 0 deletions packages/core/ios/RNSentry+fetchNativeStack.m
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#import "RNSentry+formatters.h"
#import "RNSentry.h"
#import "RNSentryBreadcrumb.h"
#import "RNSentryId.h"
Expand Down
35 changes: 35 additions & 0 deletions packages/core/ios/RNSentry+formatters.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#import <Foundation/Foundation.h>

// 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);
}
4 changes: 2 additions & 2 deletions packages/core/ios/SentrySDKWrapper.m
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
2 changes: 1 addition & 1 deletion scripts/update-cocoa.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading