diff --git a/CHANGELOG.md b/CHANGELOG.md index 226f33eac..dbd93ae38 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Fixes + +* Missing OS context for iOS events ([#958](https://github.com/getsentry/sentry-dart/pull/958)) + ### Features * Dio Integration adds response data ([#934](https://github.com/getsentry/sentry-dart/pull/934)) diff --git a/flutter/lib/src/default_integrations.dart b/flutter/lib/src/default_integrations.dart index 4587a78ff..3fc708dcf 100644 --- a/flutter/lib/src/default_integrations.dart +++ b/flutter/lib/src/default_integrations.dart @@ -185,10 +185,19 @@ class _LoadContextsIntegrationEventProcessor extends EventProcessor { contexts.forEach( (key, dynamic value) { if (value != null) { + final currentValue = eventContexts[key]; if (key == SentryRuntime.listType) { contexts.runtimes.forEach(eventContexts.addRuntime); - } else if (eventContexts[key] == null) { + } else if (currentValue == null) { eventContexts[key] = value; + } else { + if (key == SentryOperatingSystem.type && + currentValue is SentryOperatingSystem && + value is SentryOperatingSystem) { + final osMap = {...value.toJson(), ...currentValue.toJson()}; + final os = SentryOperatingSystem.fromJson(osMap); + eventContexts[key] = os; + } } } }, diff --git a/flutter/test/load_contexts_integrations_test.dart b/flutter/test/load_contexts_integrations_test.dart index 7dfc95a8d..2c6b9fd00 100644 --- a/flutter/test/load_contexts_integrations_test.dart +++ b/flutter/test/load_contexts_integrations_test.dart @@ -75,12 +75,14 @@ void main() { expect(fixture.options.eventProcessors.length, 1); final e = SentryEvent(); + e.contexts.operatingSystem = SentryOperatingSystem(theme: 'theme1'); final event = await fixture.options.eventProcessors.first.apply(e); expect(fixture.called, true); expect(event?.contexts.device?.name, 'Device1'); expect(event?.contexts.app?.name, 'test-app'); expect(event?.contexts.operatingSystem?.name, 'os1'); + expect(event?.contexts.operatingSystem?.theme, 'theme1'); expect(event?.contexts.gpu?.name, 'gpu1'); expect(event?.contexts.browser?.name, 'browser1'); expect(