From c05d4253368ae1022252b0fde1a93b28f6471aeb Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Wed, 9 Apr 2025 15:25:01 +0200 Subject: [PATCH 1/7] return success state --- package-dev/Plugins/macOS/SentryNativeBridge.m | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/package-dev/Plugins/macOS/SentryNativeBridge.m b/package-dev/Plugins/macOS/SentryNativeBridge.m index 0f696675d..9deca8dae 100644 --- a/package-dev/Plugins/macOS/SentryNativeBridge.m +++ b/package-dev/Plugins/macOS/SentryNativeBridge.m @@ -72,14 +72,22 @@ void SentryNativeBridgeOptionsSetInt(const void *options, const char *name, int3 dictOptions[[NSString stringWithUTF8String:name]] = [NSNumber numberWithInt:value]; } -void SentryNativeBridgeStartWithOptions(const void *options) +int SentryNativeBridgeStartWithOptions(const void *options) { NSMutableDictionary *dictOptions = (__bridge_transfer NSMutableDictionary *)options; + NSError *error = nil; + id sentryOptions = [[SentryOptions alloc] performSelector:@selector(initWithDict:didFailWithError:) - withObject:dictOptions withObject:nil]; + withObject:dictOptions withObject:&error]; + + if (error != nil) + { + return 0; + } [SentrySDK performSelector:@selector(startWithOptions:) withObject:sentryOptions]; + return 1; } void SentryConfigureScope(void (^callback)(id)) From b9ab117d7c4ed82a2fa6979c1733b25336204b60 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Thu, 10 Apr 2025 16:52:43 +0200 Subject: [PATCH 2/7] Updated CHANGELOG.md --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3733d9728..c139bb513 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Fixes + +- When targeting macOS, the SDK no longer fails to sync the scope to native events ([#2104](https://github.com/getsentry/sentry-unity/pull/2104)) + ### Features - The SDK now reports the game's name as part of the app context ([2083](https://github.com/getsentry/sentry-unity/pull/2083)) From 681376462370cf3e8f6449bd0c9d5bf5944ada44 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Tue, 15 Apr 2025 12:20:12 +0200 Subject: [PATCH 3/7] set sdk name --- package-dev/Plugins/iOS/SentryNativeBridge.m | 5 +++++ package-dev/Plugins/iOS/SentryNativeBridgeNoOp.m | 2 ++ package-dev/Plugins/macOS/SentryNativeBridge.m | 5 +++++ src/Sentry.Unity.iOS/SentryCocoaBridgeProxy.cs | 3 +++ src/Sentry.Unity.iOS/SentryNativeCocoa.cs | 2 ++ 5 files changed, 17 insertions(+) diff --git a/package-dev/Plugins/iOS/SentryNativeBridge.m b/package-dev/Plugins/iOS/SentryNativeBridge.m index 98982997d..fb749675c 100644 --- a/package-dev/Plugins/iOS/SentryNativeBridge.m +++ b/package-dev/Plugins/iOS/SentryNativeBridge.m @@ -46,6 +46,11 @@ int SentryNativeBridgeStartWithOptions(const void *options) return 1; } +void SentryNativeBridgeSetSdkName() +{ + [PrivateSentrySDKOnly performSelector:@selector(setSdkName:) withObject:@"sentry.cocoa.unity"]; +} + int SentryNativeBridgeCrashedLastRun() { return [SentrySDK crashedLastRun] ? 1 : 0; } void SentryNativeBridgeClose() { [SentrySDK close]; } diff --git a/package-dev/Plugins/iOS/SentryNativeBridgeNoOp.m b/package-dev/Plugins/iOS/SentryNativeBridgeNoOp.m index e9688495f..be9cf62d6 100644 --- a/package-dev/Plugins/iOS/SentryNativeBridgeNoOp.m +++ b/package-dev/Plugins/iOS/SentryNativeBridgeNoOp.m @@ -8,6 +8,8 @@ void SentryNativeBridgeOptionsSetString(void *options, const char *name, const c void SentryNativeBridgeOptionsSetInt(void *options, const char *name, int32_t value) { } int SentryNativeBridgeStartWithOptions(void *options) { return 0; } +void SentryNativeBridgeSetSdkName() { } + int SentryNativeBridgeCrashedLastRun() { return 0; } void SentryNativeBridgeClose() { } diff --git a/package-dev/Plugins/macOS/SentryNativeBridge.m b/package-dev/Plugins/macOS/SentryNativeBridge.m index 9deca8dae..d80f6f7b3 100644 --- a/package-dev/Plugins/macOS/SentryNativeBridge.m +++ b/package-dev/Plugins/macOS/SentryNativeBridge.m @@ -112,6 +112,11 @@ void SentryConfigureScope(void (^callback)(id)) /* - use [obj setValue:value forKey:@"prop"] instead of `obj.prop = value` */ /*******************************************************************************/ +void SentryNativeBridgeSetSdkName() +{ + [PrivateSentrySDKOnly performSelector:@selector(setSdkName:) withObject:@"sentry.cocoa.unity"]; +} + int SentryNativeBridgeCrashedLastRun() { @try { diff --git a/src/Sentry.Unity.iOS/SentryCocoaBridgeProxy.cs b/src/Sentry.Unity.iOS/SentryCocoaBridgeProxy.cs index 7c8442c98..9637d3865 100644 --- a/src/Sentry.Unity.iOS/SentryCocoaBridgeProxy.cs +++ b/src/Sentry.Unity.iOS/SentryCocoaBridgeProxy.cs @@ -82,6 +82,9 @@ public static bool Init(SentryUnityOptions options) [DllImport("__Internal", EntryPoint = "SentryNativeBridgeStartWithOptions")] private static extern int StartWithOptions(IntPtr options); + [DllImport("__Internal", EntryPoint = "SentryNativeBridgeSetSdkName")] + public static extern int SetSdkName(); + [DllImport("__Internal", EntryPoint = "SentryNativeBridgeCrashedLastRun")] public static extern int CrashedLastRun(); diff --git a/src/Sentry.Unity.iOS/SentryNativeCocoa.cs b/src/Sentry.Unity.iOS/SentryNativeCocoa.cs index 9d2097d3e..766fe5a55 100644 --- a/src/Sentry.Unity.iOS/SentryNativeCocoa.cs +++ b/src/Sentry.Unity.iOS/SentryNativeCocoa.cs @@ -52,6 +52,8 @@ internal static void Configure(SentryUnityOptions options, ISentryUnityInfo sent options.ScopeObserver = new NativeScopeObserver("macOS", options); } + SentryCocoaBridgeProxy.SetSdkName(); // Since we're not building the SDK we have to overwrite the name here + options.NativeContextWriter = new NativeContextWriter(); options.EnableScopeSync = true; options.CrashedLastRun = () => From 4705e4d389a5f12e34d96b0ca93f8c8376ece469 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Tue, 15 Apr 2025 12:51:05 +0200 Subject: [PATCH 4/7] native options use bridge. and tests --- src/Sentry.Unity.Editor.iOS/NativeOptions.cs | 2 +- .../NativeOptionsTests.cs | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Sentry.Unity.Editor.iOS/NativeOptions.cs b/src/Sentry.Unity.Editor.iOS/NativeOptions.cs index abbc91e6c..f84950d47 100644 --- a/src/Sentry.Unity.Editor.iOS/NativeOptions.cs +++ b/src/Sentry.Unity.Editor.iOS/NativeOptions.cs @@ -21,7 +21,7 @@ internal static string Generate(SentryUnityOptions options) static SentryOptions* getSentryOptions() {{ - [PrivateSentrySDKOnly setSdkName:@""sentry.cocoa.unity""]; + SentryNativeBridgeSetSdkName(); NSDictionary* optionsDictionary = @{{ @""dsn"" : @""{options.Dsn}"", diff --git a/test/Sentry.Unity.Editor.iOS.Tests/NativeOptionsTests.cs b/test/Sentry.Unity.Editor.iOS.Tests/NativeOptionsTests.cs index 21feb313c..8d40ad139 100644 --- a/test/Sentry.Unity.Editor.iOS.Tests/NativeOptionsTests.cs +++ b/test/Sentry.Unity.Editor.iOS.Tests/NativeOptionsTests.cs @@ -87,6 +87,21 @@ public void CreateOptionsFile_NewSentryOptions_ContainsBaseOptions() File.Delete(testOptionsFileName); } + [Test] + public void CreateOptionsFile_NewSentryOptions_ContainsSdkNameSetting() + { + const string testOptionsFileName = "testOptions.m"; + + NativeOptions.CreateFile(testOptionsFileName, new SentryUnityOptions()); + + Assert.IsTrue(File.Exists(testOptionsFileName)); // Sanity check + + var nativeOptions = File.ReadAllText(testOptionsFileName); + StringAssert.Contains("SentryNativeBridgeSetSdkName();", nativeOptions); + + File.Delete(testOptionsFileName); + } + [Test] public void CreateOptionsFile_FilterBadGatewayEnabled_AddsFiltering() { From f7eda1c1318a05436dd69176f8aee7a6bf5267a7 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Tue, 22 Apr 2025 15:31:52 +0200 Subject: [PATCH 5/7] native options set name --- src/Sentry.Unity.Editor.iOS/NativeOptions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Sentry.Unity.Editor.iOS/NativeOptions.cs b/src/Sentry.Unity.Editor.iOS/NativeOptions.cs index f84950d47..50d2111a9 100644 --- a/src/Sentry.Unity.Editor.iOS/NativeOptions.cs +++ b/src/Sentry.Unity.Editor.iOS/NativeOptions.cs @@ -21,7 +21,7 @@ internal static string Generate(SentryUnityOptions options) static SentryOptions* getSentryOptions() {{ - SentryNativeBridgeSetSdkName(); + [PrivateSentrySDKOnly setSdkName:@""""sentry.cocoa.unity""""]; NSDictionary* optionsDictionary = @{{ @""dsn"" : @""{options.Dsn}"", From b82060dd47ab60ed8af66193ab6a82a5102f866c Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Tue, 22 Apr 2025 15:38:04 +0200 Subject: [PATCH 6/7] evil '' --- src/Sentry.Unity.Editor.iOS/NativeOptions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Sentry.Unity.Editor.iOS/NativeOptions.cs b/src/Sentry.Unity.Editor.iOS/NativeOptions.cs index 50d2111a9..abbc91e6c 100644 --- a/src/Sentry.Unity.Editor.iOS/NativeOptions.cs +++ b/src/Sentry.Unity.Editor.iOS/NativeOptions.cs @@ -21,7 +21,7 @@ internal static string Generate(SentryUnityOptions options) static SentryOptions* getSentryOptions() {{ - [PrivateSentrySDKOnly setSdkName:@""""sentry.cocoa.unity""""]; + [PrivateSentrySDKOnly setSdkName:@""sentry.cocoa.unity""]; NSDictionary* optionsDictionary = @{{ @""dsn"" : @""{options.Dsn}"", From a76c6a140d2b9a7c0b6c5a3d7abe050508021b36 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Tue, 22 Apr 2025 15:41:43 +0200 Subject: [PATCH 7/7] fixed test --- test/Sentry.Unity.Editor.iOS.Tests/NativeOptionsTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Sentry.Unity.Editor.iOS.Tests/NativeOptionsTests.cs b/test/Sentry.Unity.Editor.iOS.Tests/NativeOptionsTests.cs index 8d40ad139..814bd017b 100644 --- a/test/Sentry.Unity.Editor.iOS.Tests/NativeOptionsTests.cs +++ b/test/Sentry.Unity.Editor.iOS.Tests/NativeOptionsTests.cs @@ -97,7 +97,7 @@ public void CreateOptionsFile_NewSentryOptions_ContainsSdkNameSetting() Assert.IsTrue(File.Exists(testOptionsFileName)); // Sanity check var nativeOptions = File.ReadAllText(testOptionsFileName); - StringAssert.Contains("SentryNativeBridgeSetSdkName();", nativeOptions); + StringAssert.Contains("sentry.cocoa.unity", nativeOptions); File.Delete(testOptionsFileName); }