From b7b7dfcbbc9589d72ce9244d0554445574e04a17 Mon Sep 17 00:00:00 2001 From: GitHub Date: Thu, 16 Jul 2026 03:59:02 +0000 Subject: [PATCH 1/9] chore: update src/sentry-dotnet to 6.7.0 --- CHANGELOG.md | 6 +++--- src/sentry-dotnet | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d09cdfdc1..b2f4419bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,9 @@ ### Dependencies -- Bump .NET SDK from v6.5.0-33-g0140be0a to v6.6.0 ([#2761](https://github.com/getsentry/sentry-unity/pull/2761)) - - [changelog](https://github.com/getsentry/sentry-dotnet/blob/main/CHANGELOG.md#660) - - [diff](https://github.com/getsentry/sentry-dotnet/compare/6.5.0-33-g0140be0a...6.6.0) +- Bump .NET SDK from v6.5.0-33-g0140be0a to v6.7.0 ([#2761](https://github.com/getsentry/sentry-unity/pull/2761), [#2762](https://github.com/getsentry/sentry-unity/pull/2762)) + - [changelog](https://github.com/getsentry/sentry-dotnet/blob/main/CHANGELOG.md#670) + - [diff](https://github.com/getsentry/sentry-dotnet/compare/6.5.0-33-g0140be0a...6.7.0) ## 4.7.0 diff --git a/src/sentry-dotnet b/src/sentry-dotnet index 8a7a62f60..4385deaaf 160000 --- a/src/sentry-dotnet +++ b/src/sentry-dotnet @@ -1 +1 @@ -Subproject commit 8a7a62f604971b89857aedd6cb1f42baedb91c0a +Subproject commit 4385deaafa1091e2e6b69862b5941c381549d493 From 81d135652f06b5beb15b8447a65f5205881c7fc4 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Thu, 16 Jul 2026 10:17:56 +0200 Subject: [PATCH 2/9] updated logging integration for logger --- .../Integrations/UnityApplicationLoggingIntegration.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Sentry.Unity/Integrations/UnityApplicationLoggingIntegration.cs b/src/Sentry.Unity/Integrations/UnityApplicationLoggingIntegration.cs index 334bb4153..fb12722e2 100644 --- a/src/Sentry.Unity/Integrations/UnityApplicationLoggingIntegration.cs +++ b/src/Sentry.Unity/Integrations/UnityApplicationLoggingIntegration.cs @@ -157,7 +157,7 @@ private void ProcessStructuredLog(string message, LogType logType) _hub.GetTraceIdAndSpanId(out var traceId, out var spanId); SentryLog log = new(_clock.GetUtcNow(), traceId, ToLogLevel(logType), message) { SpanId = spanId }; - log.SetDefaultAttributes(_options, UnitySdkInfo.Sdk); + log.SetDefaultAttributes(_options, _hub.GetScope(), UnitySdkInfo.Sdk); log.SetOrigin("auto.log.unity"); _hub.Logger.CaptureLog(log); From 3d3fcef2eb8de53870f9fa4240483c2b691ff548 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Thu, 16 Jul 2026 10:18:12 +0200 Subject: [PATCH 3/9] updated global.json to be in line with dotnet --- global.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/global.json b/global.json index f4a804a7a..efdc469cd 100644 --- a/global.json +++ b/global.json @@ -1,7 +1,7 @@ { "sdk": { - "version": "10.0.203", - "workloadVersion": "10.0.203", + "version": "10.0.301", + "workloadVersion": "10.0.301", "rollForward": "disable", "allowPrerelease": false } From eb0e7d8e118a5ed62c69b5ea76c9ad886d579200 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Thu, 16 Jul 2026 11:40:49 +0200 Subject: [PATCH 4/9] sync environment --- package-dev/Plugins/iOS/SentryNativeBridge.m | 9 ++++ .../Plugins/macOS/SentryNativeBridge.m | 9 ++++ .../AndroidJavaScopeObserver.cs | 3 ++ src/Sentry.Unity.Android/SentryJava.cs | 14 +++++ src/Sentry.Unity.Native/CFunctions.cs | 3 ++ .../NativeScopeObserver.cs | 3 ++ src/Sentry.Unity.iOS/NativeScopeObserver.cs | 21 ++++---- .../SentryCocoaBridgeProxy.cs | 3 ++ src/Sentry.Unity/ScopeObserver.cs | 8 +++ src/sentry-dotnet | 2 +- .../TestSentryJava.cs | 2 + .../UnityEventScopeTests.cs | 52 +++++++++++++++++++ 12 files changed, 119 insertions(+), 10 deletions(-) diff --git a/package-dev/Plugins/iOS/SentryNativeBridge.m b/package-dev/Plugins/iOS/SentryNativeBridge.m index f9d643af3..62b7a5e4c 100644 --- a/package-dev/Plugins/iOS/SentryNativeBridge.m +++ b/package-dev/Plugins/iOS/SentryNativeBridge.m @@ -183,6 +183,15 @@ void SentryNativeBridgeSetTag(const char *key, const char *value) }]; } +void SentryNativeBridgeSetEnvironment(const char *environment) +{ + NSString *environmentString = _NSStringOrNil(environment); + + [SentrySDK configureScope:^(SentryScope *scope) { + [scope setEnvironment:environmentString]; + }]; +} + void SentryNativeBridgeUnsetTag(const char *key) { if (key == NULL) { diff --git a/package-dev/Plugins/macOS/SentryNativeBridge.m b/package-dev/Plugins/macOS/SentryNativeBridge.m index 52270547f..3df39f4da 100644 --- a/package-dev/Plugins/macOS/SentryNativeBridge.m +++ b/package-dev/Plugins/macOS/SentryNativeBridge.m @@ -292,6 +292,15 @@ void SentryNativeBridgeSetTag(const char *key, const char *value) }); } +void SentryNativeBridgeSetEnvironment(const char *environment) +{ + NSString *environmentString = _NSStringOrNil(environment); + + SentryConfigureScope(^(id scope) { + [scope performSelector:@selector(setEnvironment:) withObject:environmentString]; + }); +} + void SentryNativeBridgeUnsetTag(const char *key) { if (key == NULL) { diff --git a/src/Sentry.Unity.Android/AndroidJavaScopeObserver.cs b/src/Sentry.Unity.Android/AndroidJavaScopeObserver.cs index 65936ac79..019e73081 100644 --- a/src/Sentry.Unity.Android/AndroidJavaScopeObserver.cs +++ b/src/Sentry.Unity.Android/AndroidJavaScopeObserver.cs @@ -37,6 +37,9 @@ public override void UnsetUserImpl() => public override void SetTraceImpl(SentryId traceId, SpanId spanId) => _sentryJava.SetTrace(traceId, spanId); + public override void SetEnvironmentImpl(string? environment) => + _sentryJava.SetEnvironment(environment); + public override void AddFileAttachmentImpl(string filePath, string fileName, string? contentType) => _sentryJava.AddAttachment(filePath, fileName, contentType); diff --git a/src/Sentry.Unity.Android/SentryJava.cs b/src/Sentry.Unity.Android/SentryJava.cs index 2f172083f..7726d343c 100644 --- a/src/Sentry.Unity.Android/SentryJava.cs +++ b/src/Sentry.Unity.Android/SentryJava.cs @@ -42,6 +42,7 @@ public void WriteScope( public void SetUser(SentryUser user); public void UnsetUser(); public void SetTrace(SentryId traceId, SpanId spanId); + public void SetEnvironment(string? environment); void AddAttachment(string path, string fileName, string? contentType); void AddAttachmentBytes(byte[] data, string fileName, string? contentType); void ClearAttachments(); @@ -387,6 +388,19 @@ public void SetTrace(SentryId traceId, SpanId spanId) }); } + public void SetEnvironment(string? environment) + { + // TODO: sentry-java lacks this API + // RunJniSafe(() => + // { + // using var sentry = GetSentryJava(); + // sentry.CallStatic("configureScope", new ScopeCallback(scope => + // { + // scope.Call("setEnvironment", environment); + // })); + // }); + } + public void AddAttachment(string path, string fileName, string? contentType) { RunJniSafe(() => diff --git a/src/Sentry.Unity.Native/CFunctions.cs b/src/Sentry.Unity.Native/CFunctions.cs index beb991ca9..e0bef2db9 100644 --- a/src/Sentry.Unity.Native/CFunctions.cs +++ b/src/Sentry.Unity.Native/CFunctions.cs @@ -165,6 +165,9 @@ internal static void SetValueIfNotNull(sentry_value_t obj, string key, long? val [DllImport(SentryLib)] internal static extern void sentry_set_trace(string traceId, string parentSpanId); + [DllImport(SentryLib)] + internal static extern void sentry_set_environment(string? environment); + [DllImport(SentryLib)] internal static extern IntPtr sentry_attach_file(string path); diff --git a/src/Sentry.Unity.Native/NativeScopeObserver.cs b/src/Sentry.Unity.Native/NativeScopeObserver.cs index 28fe9c84e..001655f67 100644 --- a/src/Sentry.Unity.Native/NativeScopeObserver.cs +++ b/src/Sentry.Unity.Native/NativeScopeObserver.cs @@ -52,6 +52,9 @@ public override void SetUserImpl(SentryUser user) public override void SetTraceImpl(SentryId traceId, SpanId spanId) => C.sentry_set_trace(traceId.ToString(), spanId.ToString()); + public override void SetEnvironmentImpl(string? environment) => + C.sentry_set_environment(environment); + public override void AddFileAttachmentImpl(string filePath, string fileName, string? contentType) => C.sentry_attach_file(filePath); diff --git a/src/Sentry.Unity.iOS/NativeScopeObserver.cs b/src/Sentry.Unity.iOS/NativeScopeObserver.cs index 1bedc6b92..a0944da9d 100644 --- a/src/Sentry.Unity.iOS/NativeScopeObserver.cs +++ b/src/Sentry.Unity.iOS/NativeScopeObserver.cs @@ -6,17 +6,17 @@ public class NativeScopeObserver : ScopeObserver { public NativeScopeObserver(string name, SentryOptions options) : base(name, options) { } - public override void AddBreadcrumbImpl(Breadcrumb breadcrumb) - { - var level = GetBreadcrumbLevel(breadcrumb.Level); - var timestamp = GetTimestamp(breadcrumb.Timestamp); +public override void AddBreadcrumbImpl(Breadcrumb breadcrumb) +{ + var level = GetBreadcrumbLevel(breadcrumb.Level); + var timestamp = GetTimestamp(breadcrumb.Timestamp); - // Pass breadcrumb.Data as two parallel key/value arrays for the __Internal P/Invoke boundary. - var dataCount = GetBreadcrumbData(breadcrumb, out var dataKeys, out var dataValues); + // Pass breadcrumb.Data as two parallel key/value arrays for the __Internal P/Invoke boundary. + var dataCount = GetBreadcrumbData(breadcrumb, out var dataKeys, out var dataValues); - SentryCocoaBridgeProxy.AddBreadcrumb(timestamp, breadcrumb.Message, breadcrumb.Type, breadcrumb.Category, level, - dataKeys, dataValues, dataCount); - } + SentryCocoaBridgeProxy.AddBreadcrumb(timestamp, breadcrumb.Message, breadcrumb.Type, breadcrumb.Category, level, + dataKeys, dataValues, dataCount); +} internal static int GetBreadcrumbData(Breadcrumb breadcrumb, out string[]? keys, out string[]? values) { @@ -55,6 +55,9 @@ public override void SetUserImpl(SentryUser user) => public override void SetTraceImpl(SentryId traceId, SpanId spanId) => SentryCocoaBridgeProxy.SetTrace(traceId.ToString(), spanId.ToString()); + public override void SetEnvironmentImpl(string? environment) => + SentryCocoaBridgeProxy.SetEnvironment(environment); + public override void AddFileAttachmentImpl(string filePath, string fileName, string? contentType) { // iOS/macOS attachment sync to sentry-cocoa is not yet supported. diff --git a/src/Sentry.Unity.iOS/SentryCocoaBridgeProxy.cs b/src/Sentry.Unity.iOS/SentryCocoaBridgeProxy.cs index 70055b56e..23adb1c87 100644 --- a/src/Sentry.Unity.iOS/SentryCocoaBridgeProxy.cs +++ b/src/Sentry.Unity.iOS/SentryCocoaBridgeProxy.cs @@ -151,4 +151,7 @@ public static extern void AddBreadcrumb(string timestamp, string? message, strin [DllImport("__Internal", EntryPoint = "SentryNativeBridgeSetTrace")] public static extern void SetTrace(string traceId, string spanId); + + [DllImport("__Internal", EntryPoint = "SentryNativeBridgeSetEnvironment")] + public static extern void SetEnvironment(string? environment); } diff --git a/src/Sentry.Unity/ScopeObserver.cs b/src/Sentry.Unity/ScopeObserver.cs index 3ae361163..a1a789ce4 100644 --- a/src/Sentry.Unity/ScopeObserver.cs +++ b/src/Sentry.Unity/ScopeObserver.cs @@ -87,6 +87,14 @@ public void SetTrace(SentryId traceId, SpanId spanId) public abstract void SetTraceImpl(SentryId traceId, SpanId spanId); + public void SetEnvironment(string? environment) + { + _options.LogDebug("{0} Scope Sync - Setting Environment e:\"{1}\"", _name, environment); + SetEnvironmentImpl(environment); + } + + public abstract void SetEnvironmentImpl(string? environment); + public void AddAttachment(SentryAttachment attachment) { if (attachment.Content is FileAttachmentContent fileContent) diff --git a/src/sentry-dotnet b/src/sentry-dotnet index 4385deaaf..ea85ec57c 160000 --- a/src/sentry-dotnet +++ b/src/sentry-dotnet @@ -1 +1 @@ -Subproject commit 4385deaafa1091e2e6b69862b5941c381549d493 +Subproject commit ea85ec57c9021e3d13893c4ce1d6add9178ded8a diff --git a/test/Sentry.Unity.Android.Tests/TestSentryJava.cs b/test/Sentry.Unity.Android.Tests/TestSentryJava.cs index 195d94221..84c7f3735 100644 --- a/test/Sentry.Unity.Android.Tests/TestSentryJava.cs +++ b/test/Sentry.Unity.Android.Tests/TestSentryJava.cs @@ -55,6 +55,8 @@ public void UnsetUser() { } public void SetTrace(SentryId traceId, SpanId spanId) { } + public void SetEnvironment(string? environment) { } + public void AddAttachment(string path, string fileName, string? contentType) { } public void AddAttachmentBytes(byte[] data, string fileName, string? contentType) { } diff --git a/test/Sentry.Unity.Tests/UnityEventScopeTests.cs b/test/Sentry.Unity.Tests/UnityEventScopeTests.cs index 2bf8103d5..b9d341745 100644 --- a/test/Sentry.Unity.Tests/UnityEventScopeTests.cs +++ b/test/Sentry.Unity.Tests/UnityEventScopeTests.cs @@ -422,6 +422,56 @@ public void UserId_ScopeSync_TriggeredEvenWhenUserAlreadySet() Assert.AreEqual("native-id", observer.LastUser!.Id); } + [Test] + public void Environment_ScopeSync_ForwardedToObserver() + { + // arrange - enable scope sync with a tracking observer + var options = new SentryUnityOptions(application: _testApplication); + var observer = new TestScopeObserver(options); + options.ScopeObserver = observer; + options.EnableScopeSync = true; + + var scope = new Scope(options); + + // act + scope.Environment = "the-environment"; + + // assert + Assert.AreEqual("the-environment", observer.LastEnvironment); + } + + [Test] + public void Environment_ScopeSyncDisabled_NotForwardedToObserver() + { + // arrange + var options = new SentryUnityOptions(application: _testApplication); + var observer = new TestScopeObserver(options); + options.ScopeObserver = observer; + options.EnableScopeSync = false; + + var scope = new Scope(options); + + // act + scope.Environment = "the-environment"; + + // assert + Assert.IsNull(observer.LastEnvironment); + } + + [Test] + public void SetEnvironment_DelegatesToImpl() + { + // arrange + var options = new SentryUnityOptions(application: _testApplication); + var observer = new TestScopeObserver(options); + + // act + observer.SetEnvironment("the-environment"); + + // assert + Assert.AreEqual("the-environment", observer.LastEnvironment); + } + [Test] public void OperatingSystemProtocol_Assigned() { @@ -668,6 +718,7 @@ internal sealed class TestSentrySystemInfo : ISentrySystemInfo internal sealed class TestScopeObserver : ScopeObserver { public SentryUser? LastUser { get; set; } + public string? LastEnvironment { get; set; } public TestScopeObserver(SentryOptions options) : base("Test", options) { } @@ -678,6 +729,7 @@ public override void UnsetTagImpl(string key) { } public override void SetUserImpl(SentryUser user) => LastUser = user; public override void UnsetUserImpl() => LastUser = null; public override void SetTraceImpl(SentryId traceId, SpanId spanId) { } + public override void SetEnvironmentImpl(string? environment) => LastEnvironment = environment; public override void AddFileAttachmentImpl(string filePath, string fileName, string? contentType) { } public override void AddByteAttachmentImpl(byte[] data, string fileName, string? contentType) { } public override void ClearAttachmentsImpl() { } From 8f8de64ddb22819c32bebb891b6009727b877e2e Mon Sep 17 00:00:00 2001 From: Sentry Github Bot Date: Thu, 16 Jul 2026 09:45:20 +0000 Subject: [PATCH 5/9] Format code --- src/Sentry.Unity.iOS/NativeScopeObserver.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Sentry.Unity.iOS/NativeScopeObserver.cs b/src/Sentry.Unity.iOS/NativeScopeObserver.cs index a0944da9d..393ee19ef 100644 --- a/src/Sentry.Unity.iOS/NativeScopeObserver.cs +++ b/src/Sentry.Unity.iOS/NativeScopeObserver.cs @@ -6,17 +6,17 @@ public class NativeScopeObserver : ScopeObserver { public NativeScopeObserver(string name, SentryOptions options) : base(name, options) { } -public override void AddBreadcrumbImpl(Breadcrumb breadcrumb) -{ - var level = GetBreadcrumbLevel(breadcrumb.Level); - var timestamp = GetTimestamp(breadcrumb.Timestamp); + public override void AddBreadcrumbImpl(Breadcrumb breadcrumb) + { + var level = GetBreadcrumbLevel(breadcrumb.Level); + var timestamp = GetTimestamp(breadcrumb.Timestamp); - // Pass breadcrumb.Data as two parallel key/value arrays for the __Internal P/Invoke boundary. - var dataCount = GetBreadcrumbData(breadcrumb, out var dataKeys, out var dataValues); + // Pass breadcrumb.Data as two parallel key/value arrays for the __Internal P/Invoke boundary. + var dataCount = GetBreadcrumbData(breadcrumb, out var dataKeys, out var dataValues); - SentryCocoaBridgeProxy.AddBreadcrumb(timestamp, breadcrumb.Message, breadcrumb.Type, breadcrumb.Category, level, - dataKeys, dataValues, dataCount); -} + SentryCocoaBridgeProxy.AddBreadcrumb(timestamp, breadcrumb.Message, breadcrumb.Type, breadcrumb.Category, level, + dataKeys, dataValues, dataCount); + } internal static int GetBreadcrumbData(Breadcrumb breadcrumb, out string[]? keys, out string[]? values) { From ed4f3b2f5b64fe01a228535bde5acf33d0b31950 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Fri, 17 Jul 2026 14:21:41 +0200 Subject: [PATCH 6/9] update no-op bridge --- package-dev/Plugins/iOS/SentryNativeBridgeNoOp.m | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package-dev/Plugins/iOS/SentryNativeBridgeNoOp.m b/package-dev/Plugins/iOS/SentryNativeBridgeNoOp.m index f9eab6e99..dc52c16e0 100644 --- a/package-dev/Plugins/iOS/SentryNativeBridgeNoOp.m +++ b/package-dev/Plugins/iOS/SentryNativeBridgeNoOp.m @@ -34,6 +34,8 @@ void SentryNativeBridgeUnsetUser() { } void SentryNativeBridgeSetTrace(const char *traceId, const char *spanId) { } +void SentryNativeBridgeSetEnvironment(const char *environment) { } + void SentryNativeBridgeWriteScope( // clang-format off // // const char *AppStartTime, // const char *AppBuildType, From 89df445e0bcfc5fdf32210429e8c4485fe19b612 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Fri, 17 Jul 2026 14:25:13 +0200 Subject: [PATCH 7/9] updated changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b8269de5..eaab509ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Fixes + +- The SDK now correctly synchronizes the `Environment` set on the `Scope` events coming from the native layer ([#2764](https://github.com/getsentry/sentry-unity/pull/2764)) + ### Dependencies - Bump .NET SDK from v6.5.0-33-g0140be0a to v6.7.0 ([#2761](https://github.com/getsentry/sentry-unity/pull/2761), [#2762](https://github.com/getsentry/sentry-unity/pull/2762)) From 5998490be46dc1dd5fd26bb865b3bdecfacceb3e Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Fri, 17 Jul 2026 14:38:34 +0200 Subject: [PATCH 8/9] switch stubs --- package-dev/Plugins/Switch/sentry_native_stubs.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/package-dev/Plugins/Switch/sentry_native_stubs.c b/package-dev/Plugins/Switch/sentry_native_stubs.c index 041971be3..de334d36a 100644 --- a/package-dev/Plugins/Switch/sentry_native_stubs.c +++ b/package-dev/Plugins/Switch/sentry_native_stubs.c @@ -305,6 +305,11 @@ void sentry_set_trace(const char* trace_id, const char* parent_span_id) (void)parent_span_id; } +void sentry_set_environment(const char* environment) +{ + (void)environment; +} + /* * ============================================================================= * Crash Detection Functions From 0f6c38f9f396959ac180e2008716182bba555304 Mon Sep 17 00:00:00 2001 From: bitsandfoxes Date: Fri, 17 Jul 2026 14:39:26 +0200 Subject: [PATCH 9/9] updated changelog --- CHANGELOG.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eaab509ca..4e93a89db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,9 +8,6 @@ ### Dependencies -- Bump .NET SDK from v6.5.0-33-g0140be0a to v6.7.0 ([#2761](https://github.com/getsentry/sentry-unity/pull/2761), [#2762](https://github.com/getsentry/sentry-unity/pull/2762)) - - [changelog](https://github.com/getsentry/sentry-dotnet/blob/main/CHANGELOG.md#670) - - [diff](https://github.com/getsentry/sentry-dotnet/compare/6.5.0-33-g0140be0a...6.7.0) - Bump .NET SDK from v6.5.0-33-g0140be0a to v6.7.0 ([#2761](https://github.com/getsentry/sentry-unity/pull/2761), [#2762](https://github.com/getsentry/sentry-unity/pull/2762)) - [changelog](https://github.com/getsentry/sentry-dotnet/blob/main/CHANGELOG.md#670) - [diff](https://github.com/getsentry/sentry-dotnet/compare/6.5.0-33-g0140be0a...6.7.0)