Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
6b7aad8
chore: update scripts/update-cocoa.sh to 8.54.0
web-flow Jul 31, 2025
83f91bb
Remove Cocoa Flags
antonis Jul 31, 2025
8ae835d
Update sample app native initialisation example
antonis Jul 31, 2025
702b2fc
Remove unused imports
antonis Jul 31, 2025
ed6a296
chore: update scripts/update-cocoa.sh to 8.54.0
web-flow Aug 5, 2025
1d95a86
Merge branch 'deps/scripts/update-cocoa.sh' into antonis/remove_cocoa…
antonis Aug 5, 2025
54af75e
Test with cocoa fix
antonis Aug 6, 2025
c59bb69
Trigger CI
antonis Aug 6, 2025
a67956f
Revert "Trigger CI"
antonis Aug 6, 2025
d6c0afc
Revert "Test with cocoa fix"
antonis Aug 6, 2025
ef4dd63
chore: update scripts/update-cocoa.sh to 8.54.0
web-flow Aug 13, 2025
eed4e18
Merge branch 'deps/scripts/update-cocoa.sh' into antonis/remove_cocoa…
antonis Aug 13, 2025
8956b09
Test with 8.54.1-alpha.1
antonis Aug 13, 2025
3d17397
Test with 8.54.1-apha.2
antonis Aug 13, 2025
4ea0cda
trigger ci
antonis Aug 13, 2025
4f3abd3
chore: update scripts/update-cocoa.sh to 8.55.0
web-flow Aug 14, 2025
584af1e
Merge branch 'deps/scripts/update-cocoa.sh' into antonis/remove_cocoa…
antonis Aug 14, 2025
dcd3b15
chore: update scripts/update-cocoa.sh to 8.55.0
web-flow Aug 14, 2025
5124b3c
Merge branch 'deps/scripts/update-cocoa.sh' into antonis/remove_cocoa…
antonis Aug 14, 2025
4b795ed
Remove duplicate changelog
antonis Aug 14, 2025
29f79b9
ref: Rename SentryNativeInitialiser to SentryNativeInitializer
antonis Aug 14, 2025
c3af0db
Revert unneeded changes
antonis Aug 14, 2025
61df9c3
chore: update scripts/update-cocoa.sh to 8.55.0
web-flow Aug 14, 2025
5dc8855
Merge branch 'deps/scripts/update-cocoa.sh' into antonis/remove_cocoa…
antonis Aug 14, 2025
8543783
chore: update scripts/update-cocoa.sh to 8.55.0
web-flow Aug 25, 2025
d32b25b
Merge branch 'deps/scripts/update-cocoa.sh' into antonis/remove_cocoa…
antonis Aug 25, 2025
b86a0dc
chore: update scripts/update-cocoa.sh to 8.55.0
web-flow Aug 29, 2025
8f067d0
Set SDK_V9=0
antonis Aug 29, 2025
2c989fd
Merge branch 'deps/scripts/update-cocoa.sh' into antonis/remove_cocoa…
antonis Aug 29, 2025
b721a66
Revert "Set SDK_V9=0"
antonis Aug 29, 2025
bc32ea1
Set SDK_V9=0 in sample app dev build
antonis Aug 29, 2025
d0f56da
Revert "Set SDK_V9=0 in sample app dev build"
antonis Aug 29, 2025
e9deb82
Reapply "Set SDK_V9=0 in sample app dev build"
antonis Aug 29, 2025
b4b5d0f
Revert "Reapply "Set SDK_V9=0 in sample app dev build""
antonis Aug 29, 2025
338ce7e
chore: update scripts/update-cocoa.sh to 8.55.0
web-flow Aug 29, 2025
bdf9fb6
Merge branch 'deps/scripts/update-cocoa.sh' into antonis/remove_cocoa…
antonis Sep 1, 2025
b4ee848
chore: update scripts/update-cocoa.sh to 8.55.0
web-flow Sep 3, 2025
b125adf
Merge branch 'deps/scripts/update-cocoa.sh' into antonis/remove_cocoa…
antonis Sep 3, 2025
b4fd131
Remove changelog duplication
antonis Sep 3, 2025
12fa4f7
Remove flags
antonis Sep 3, 2025
f8540d0
chore: update scripts/update-cocoa.sh to 8.55.0
web-flow Sep 3, 2025
32601ac
test without bundler-cache
antonis Sep 3, 2025
67cc946
Revert "test without bundler-cache"
antonis Sep 3, 2025
c93f801
Merge branch 'deps/scripts/update-cocoa.sh' into antonis/remove_cocoa…
antonis Sep 3, 2025
55c7ed5
Try force disabling sdk-v9
antonis Sep 3, 2025
2c77f33
Revert "Try force disabling sdk-v9"
antonis Sep 3, 2025
6520cb7
chore: update scripts/update-cocoa.sh to 8.55.0
web-flow Sep 4, 2025
4f34583
Merge branch 'deps/scripts/update-cocoa.sh' into antonis/remove_cocoa…
antonis Sep 4, 2025
7920e7f
Test with xcode 16.2
antonis Sep 4, 2025
9ec4293
Merge branch 'deps/scripts/update-cocoa.sh' into antonis/remove_cocoa…
antonis Sep 5, 2025
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
4 changes: 4 additions & 0 deletions .github/workflows/sample-application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ jobs:
build-type: ['dev', 'production']
include:
- platform: ios
xcode-version: '16.2'
runs-on: macos-14
- platform: macos
runs-on: macos-15
Expand Down Expand Up @@ -84,6 +85,9 @@ jobs:
- name: Gradle cache
uses: gradle/gradle-build-action@v3

- run: sudo xcode-select -s /Applications/Xcode_${{ matrix.xcode-version }}.app/Contents/Developer
if: ${{ matrix.platform == 'ios' }}

- name: Setup Global Xcode Tools
if: ${{ matrix.platform == 'ios' }}
run: which xcbeautify || brew install xcbeautify
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,7 @@ 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.sessionSampleRate, 0.75)
}

Expand All @@ -82,11 +78,7 @@ 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)
}

Expand Down Expand Up @@ -116,11 +108,7 @@ 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")
Expand All @@ -135,11 +123,7 @@ 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)
Expand All @@ -154,11 +138,7 @@ 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")
Expand All @@ -182,11 +162,7 @@ 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)
Expand All @@ -200,11 +176,7 @@ 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.enableExperimentalViewRenderer)
}
Expand All @@ -218,11 +190,7 @@ 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)
}
Expand All @@ -236,11 +204,7 @@ 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)
}
Expand All @@ -253,11 +217,7 @@ 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)
}
Expand All @@ -271,11 +231,7 @@ 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)
}
Expand All @@ -289,15 +245,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)
}

func testReplayQualityDefault() {
let optionsDict = ([
"dsn": "https://[email protected]/1234567",
Expand All @@ -306,11 +258,7 @@ 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)
}
Expand All @@ -324,11 +272,7 @@ 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)
}
Expand All @@ -342,11 +286,7 @@ 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)
}
Expand All @@ -360,11 +300,7 @@ 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)
}
Expand All @@ -378,11 +314,7 @@ 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)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,8 @@

@class SentryOptions;

#if CROSS_PLATFORM_TEST
@interface
SentrySDKInternal (PrivateTests)
#else
@interface
SentrySDK (PrivateTests)
#endif

+ (nullable SentryOptions *)options;
@end
Original file line number Diff line number Diff line change
Expand Up @@ -465,13 +465,8 @@ - (void)prepareNativeFrameMocksWithLocalSymbolication:(BOOL)debug
SentryOptions *sentryOptions = [[SentryOptions alloc] init];
sentryOptions.debug = debug; // no local symbolication

#if CROSS_PLATFORM_TEST
id sentrySDKMock = OCMClassMock([SentrySDKInternal class]);
OCMStub([(Class)sentrySDKMock options]).andReturn(sentryOptions);
#else
id sentrySDKMock = OCMClassMock([SentrySDK class]);
OCMStub([(Class)sentrySDKMock options]).andReturn(sentryOptions);
#endif

id sentryDependencyContainerMock = OCMClassMock([SentryDependencyContainer class]);
OCMStub(ClassMethod([sentryDependencyContainerMock sharedInstance]))
Expand Down
5 changes: 1 addition & 4 deletions packages/core/ios/RNSentry+fetchNativeStack.m
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,8 @@
- (NSDictionary *)fetchNativeStackFramesBy:(NSArray<NSNumber *> *)instructionsAddr
symbolicate:(SymbolicateCallbackType)symbolicate
{
#if CROSS_PLATFORM_TEST
BOOL shouldSymbolicateLocally = [SentrySDKInternal.options debug];
#else
BOOL shouldSymbolicateLocally = [SentrySDK.options debug];
#endif

NSString *appPackageName = [[NSBundle mainBundle] executablePath];

NSMutableSet<NSString *> *_Nonnull imagesAddrToRetrieveDebugMetaImages =
Expand Down
5 changes: 0 additions & 5 deletions packages/core/ios/RNSentry.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,7 @@ typedef int (*SymbolicateCallbackType)(const void *, Dl_info *);
@class SentryOptions;
@class SentryEvent;

#if CROSS_PLATFORM_TEST
@interface SentrySDKInternal : NSObject
#else
@interface
SentrySDK (Private)
#endif
@property (nonatomic, nullable, readonly, class) SentryOptions *options;
@end

Expand Down
20 changes: 2 additions & 18 deletions packages/core/ios/RNSentry.mm
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,9 @@
#import <Sentry/SentryException.h>
#import <Sentry/SentryFormatter.h>
#import <Sentry/SentryOptions.h>
#import <Sentry/SentryUser.h>

#if __has_include(<Sentry/SentryOptions+HybridSDKs.h>)
# define USE_SENTRY_OPTIONS 1
# import <Sentry/SentryOptions+HybridSDKs.h>
#else
# define USE_SENTRY_OPTIONS 0
# import <Sentry/SentryOptionsInternal.h>
#endif
#import <Sentry/SentryOptionsInternal.h>
#import <Sentry/SentryScreenFrames.h>
#import <Sentry/SentryUser.h>

// This guard prevents importing Hermes in JSC apps
#if SENTRY_PROFILING_ENABLED
Expand Down Expand Up @@ -247,13 +240,8 @@ - (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;
}
Expand Down Expand Up @@ -467,11 +455,7 @@ - (void)stopObserving
contexts[@"os"] = os;
}

#if CROSS_PLATFORM_TEST
NSString *releaseName = SentrySDKInternal.options.releaseName;
#else
NSString *releaseName = [SentrySDK options].releaseName;
#endif
if (releaseName) {
contexts[@"release"] = releaseName;
}
Expand Down
7 changes: 7 additions & 0 deletions samples/react-native/ios/SentryNativeInitializer.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#import <Foundation/Foundation.h>

@interface SentryNativeInitializer : NSObject

+ (void)initializeSentry;

@end
38 changes: 38 additions & 0 deletions samples/react-native/ios/SentryNativeInitializer.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#import "SentryNativeInitializer.h"
@import Sentry;

@implementation SentryNativeInitializer

+ (void)initializeSentry
{
[SentrySDK startWithConfigureOptions:^(SentryOptions *options) {
// Only options set here will apply to the iOS SDK
// Options from JS are not passed to the iOS SDK when initialized manually
options.dsn = @"https://[email protected]/5428561";
options.debug = YES; // Enabled debug when first installing is always helpful

options.beforeSend = ^SentryEvent *(SentryEvent *event)
{
// We don't want to send an event after startup that came from a Unhandled JS Exception
// of react native Because we sent it already before the app crashed.
if (nil != event.exceptions.firstObject.type &&
[event.exceptions.firstObject.type rangeOfString:@"Unhandled JS Exception"].location
!= NSNotFound) {
NSLog(@"Unhandled JS Exception");
return nil;
}

return event;
};

// Enable the App start and Frames tracking measurements
// If this is disabled the app start and frames tracking
// won't be passed from native to JS transactions
PrivateSentrySDKOnly.appStartMeasurementHybridSDKMode = true;
#if TARGET_OS_IPHONE || TARGET_OS_MACCATALYST
PrivateSentrySDKOnly.framesTrackingMeasurementHybridSDKMode = true;
#endif
}];
}

@end
Loading
Loading