From 3c97cd4e0dfc5f763530c9b12e6230a5f30b3ae8 Mon Sep 17 00:00:00 2001 From: Jeff Ward Date: Thu, 26 Mar 2026 11:51:52 -0400 Subject: [PATCH 1/2] fix(ios): Fix stripped C symbol for getting context. Making the symbol public in swift ensures it isn't stripped. refs: #979 (cherry picked from commit 68d661d5a964a950bcfb9e6e7464d77ea99c1ea6) --- .../ios/datadog_flutter_plugin.podspec | 1 + .../datadog_flutter_plugin/DatadogSdkPlugin.swift | 2 +- .../datadog_flutter_plugin/datadog_flutter_plugin.h | 13 +++++++++++++ .../datadog_flutter_plugin_c/flutter_c_bridge.h | 2 +- 4 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 packages/datadog_flutter_plugin/ios/datadog_flutter_plugin/Sources/datadog_flutter_plugin/include/datadog_flutter_plugin/datadog_flutter_plugin.h diff --git a/packages/datadog_flutter_plugin/ios/datadog_flutter_plugin.podspec b/packages/datadog_flutter_plugin/ios/datadog_flutter_plugin.podspec index 6e3bf6dff..9a29f74f3 100644 --- a/packages/datadog_flutter_plugin/ios/datadog_flutter_plugin.podspec +++ b/packages/datadog_flutter_plugin/ios/datadog_flutter_plugin.podspec @@ -14,6 +14,7 @@ Instrument your application with Datadog. s.author = { 'Datadog' => 'info@datadoghq.com' } s.source = { :path => '.' } s.source_files = 'datadog_flutter_plugin/Sources/**/*' + s.public_header_files = 'datadog_flutter_plugin/Sources/**/*.h' s.static_framework = true s.dependency 'Flutter' s.dependency 'DatadogCore', '3.7.0' diff --git a/packages/datadog_flutter_plugin/ios/datadog_flutter_plugin/Sources/datadog_flutter_plugin/DatadogSdkPlugin.swift b/packages/datadog_flutter_plugin/ios/datadog_flutter_plugin/Sources/datadog_flutter_plugin/DatadogSdkPlugin.swift index e4c650990..07f709a31 100644 --- a/packages/datadog_flutter_plugin/ios/datadog_flutter_plugin/Sources/datadog_flutter_plugin/DatadogSdkPlugin.swift +++ b/packages/datadog_flutter_plugin/ios/datadog_flutter_plugin/Sources/datadog_flutter_plugin/DatadogSdkPlugin.swift @@ -18,7 +18,7 @@ import DatadogLogs // Get the cached Datadog Context in a C structure. The members of `DatadogCContext` are // owned by the caller, and must be freed to prevent a memory leak. @_cdecl("flutterGetDatadogContext") -func flutterGetDatadogContext() -> DatadogCContext { +public func flutterGetDatadogContext() -> DatadogCContext { let context = ContextMessageReceiver.shared.cachedContext guard let context = context else { return DatadogCContext(sessionId: nil, accountId: nil, userId: nil) diff --git a/packages/datadog_flutter_plugin/ios/datadog_flutter_plugin/Sources/datadog_flutter_plugin/include/datadog_flutter_plugin/datadog_flutter_plugin.h b/packages/datadog_flutter_plugin/ios/datadog_flutter_plugin/Sources/datadog_flutter_plugin/include/datadog_flutter_plugin/datadog_flutter_plugin.h new file mode 100644 index 000000000..b3714ce3c --- /dev/null +++ b/packages/datadog_flutter_plugin/ios/datadog_flutter_plugin/Sources/datadog_flutter_plugin/include/datadog_flutter_plugin/datadog_flutter_plugin.h @@ -0,0 +1,13 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. This product includes software +// developed at Datadog (https://www.datadoghq.com/). Copyright 2025-Present +// Datadog, Inc. + +#ifndef datadog_flutter_plugin_h +#define datadog_flutter_plugin_h + +// When Swift compiler generates it's bridging header, the existence of a public +// C exposed method causes it to look for this header. It is okay for this to be +// empty. + +#endif /* datadog_flutter_plugin_h */ diff --git a/packages/datadog_flutter_plugin/ios/datadog_flutter_plugin/Sources/datadog_flutter_plugin_c/flutter_c_bridge.h b/packages/datadog_flutter_plugin/ios/datadog_flutter_plugin/Sources/datadog_flutter_plugin_c/flutter_c_bridge.h index 2ad7ce293..a7b6b9ed8 100644 --- a/packages/datadog_flutter_plugin/ios/datadog_flutter_plugin/Sources/datadog_flutter_plugin_c/flutter_c_bridge.h +++ b/packages/datadog_flutter_plugin/ios/datadog_flutter_plugin/Sources/datadog_flutter_plugin_c/flutter_c_bridge.h @@ -12,4 +12,4 @@ struct DatadogCContext { char* userId; }; -#endif \ No newline at end of file +#endif From 785b5f30d03218e879cd07b903cf26c40933a484 Mon Sep 17 00:00:00 2001 From: Jeff Ward Date: Fri, 27 Mar 2026 15:26:08 -0400 Subject: [PATCH 2/2] Fix Android test forge --- .../sessionreplay/forge/DatadogContextForgeryFactory.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/datadog_session_replay/android/src/test/kotlin/com/datadoghq/flutter/sessionreplay/forge/DatadogContextForgeryFactory.kt b/packages/datadog_session_replay/android/src/test/kotlin/com/datadoghq/flutter/sessionreplay/forge/DatadogContextForgeryFactory.kt index f02e73705..bc4db39c2 100644 --- a/packages/datadog_session_replay/android/src/test/kotlin/com/datadoghq/flutter/sessionreplay/forge/DatadogContextForgeryFactory.kt +++ b/packages/datadog_session_replay/android/src/test/kotlin/com/datadoghq/flutter/sessionreplay/forge/DatadogContextForgeryFactory.kt @@ -69,7 +69,10 @@ class DatadogContextForgeryFactory : ForgeryFactory { locales = forge.aList { forge.aString() }, currentLocale = forge.aString(), timeZone = forge.aString() - ) + ), + logicalCpuCount = forge.anInt(), + totalRam = forge.aNullable { anInt() }, + isLowRam = forge.aNullable { aBool() } ), userInfo = UserInfo( id = forge.aNullable { anHexadecimalString() },