diff --git a/Sources/Datadog/DatadogConfiguration.swift b/Sources/Datadog/DatadogConfiguration.swift index b153a1f251..d659afddcf 100644 --- a/Sources/Datadog/DatadogConfiguration.swift +++ b/Sources/Datadog/DatadogConfiguration.swift @@ -179,6 +179,7 @@ extension Datadog { private(set) var rumErrorEventMapper: RUMErrorEventMapper? private(set) var batchSize: BatchSize private(set) var uploadFrequency: UploadFrequency + private(set) var additionalConfiguration: [String: Any] /// Creates the builder for configuring the SDK to work with RUM, Logging and Tracing features. /// - Parameter rumApplicationID: RUM Application ID obtained on Datadog website. @@ -242,7 +243,8 @@ extension Datadog { rumActionEventMapper: nil, rumErrorEventMapper: nil, batchSize: .medium, - uploadFrequency: .average + uploadFrequency: .average, + additionalConfiguration: [:] ) } @@ -515,6 +517,14 @@ extension Datadog { return self } + /// Sets additional configuration attributes. + /// This can be used to tweak internal features of the SDK. + /// - Parameter additionalConfiguration: `[:]` by default. + public func set(additionalConfiguration: [String: Any]) -> Builder { + configuration.additionalConfiguration = additionalConfiguration + return self + } + /// Builds `Datadog.Configuration` object. public func build() -> Configuration { return configuration diff --git a/Sources/DatadogObjc/DatadogConfiguration+objc.swift b/Sources/DatadogObjc/DatadogConfiguration+objc.swift index 9cb8f426f7..b757685e1b 100644 --- a/Sources/DatadogObjc/DatadogConfiguration+objc.swift +++ b/Sources/DatadogObjc/DatadogConfiguration+objc.swift @@ -272,6 +272,11 @@ public class DDConfigurationBuilder: NSObject { _ = sdkBuilder.set(uploadFrequency: uploadFrequency.swiftType) } + @objc + public func set(additionalConfiguration: [String: Any]) { + _ = sdkBuilder.set(additionalConfiguration: additionalConfiguration) + } + @objc public func build() -> DDConfiguration { return DDConfiguration(sdkConfiguration: sdkBuilder.build()) diff --git a/Tests/DatadogTests/Datadog/DatadogConfigurationBuilderTests.swift b/Tests/DatadogTests/Datadog/DatadogConfigurationBuilderTests.swift index 38ee5737d2..a203c30c5e 100644 --- a/Tests/DatadogTests/Datadog/DatadogConfigurationBuilderTests.swift +++ b/Tests/DatadogTests/Datadog/DatadogConfigurationBuilderTests.swift @@ -51,6 +51,7 @@ class DatadogConfigurationBuilderTests: XCTestCase { XCTAssertNil(configuration.rumErrorEventMapper) XCTAssertEqual(configuration.batchSize, .medium) XCTAssertEqual(configuration.uploadFrequency, .average) + XCTAssertEqual(configuration.additionalConfiguration.count, 0) } } @@ -80,6 +81,7 @@ class DatadogConfigurationBuilderTests: XCTestCase { .setRUMActionEventMapper { _ in mockRUMActionEvent } .set(batchSize: .small) .set(uploadFrequency: .frequent) + .set(additionalConfiguration: ["foo": 42, "bar": "something"]) return builder } @@ -121,6 +123,8 @@ class DatadogConfigurationBuilderTests: XCTestCase { XCTAssertEqual(configuration.rumErrorEventMapper?(.mockRandom()), mockRUMErrorEvent) XCTAssertEqual(configuration.batchSize, .small) XCTAssertEqual(configuration.uploadFrequency, .frequent) + XCTAssertEqual(configuration.additionalConfiguration["foo"] as? Int, 42) + XCTAssertEqual(configuration.additionalConfiguration["bar"] as? String, "something") } XCTAssertTrue(rumConfigurationWithDefaultValues.rumUIKitViewsPredicate is DefaultUIKitRUMViewsPredicate) diff --git a/Tests/DatadogTests/Datadog/Mocks/CoreMocks.swift b/Tests/DatadogTests/Datadog/Mocks/CoreMocks.swift index 433d1be73d..4c2d4ee8e6 100644 --- a/Tests/DatadogTests/Datadog/Mocks/CoreMocks.swift +++ b/Tests/DatadogTests/Datadog/Mocks/CoreMocks.swift @@ -37,7 +37,8 @@ extension Datadog.Configuration { rumUIKitViewsPredicate: UIKitRUMViewsPredicate? = nil, rumUIKitActionsTrackingEnabled: Bool = false, batchSize: BatchSize = .medium, - uploadFrequency: UploadFrequency = .average + uploadFrequency: UploadFrequency = .average, + additionalConfiguration: [String: Any] = [:] ) -> Datadog.Configuration { return Datadog.Configuration( rumApplicationID: rumApplicationID, @@ -59,7 +60,8 @@ extension Datadog.Configuration { rumUIKitViewsPredicate: rumUIKitViewsPredicate, rumUIKitActionsTrackingEnabled: rumUIKitActionsTrackingEnabled, batchSize: batchSize, - uploadFrequency: uploadFrequency + uploadFrequency: uploadFrequency, + additionalConfiguration: additionalConfiguration ) } } diff --git a/Tests/DatadogTests/DatadogObjc/DDConfigurationTests.swift b/Tests/DatadogTests/DatadogObjc/DDConfigurationTests.swift index ea6f4f288a..e054e9fcef 100644 --- a/Tests/DatadogTests/DatadogObjc/DDConfigurationTests.swift +++ b/Tests/DatadogTests/DatadogObjc/DDConfigurationTests.swift @@ -62,6 +62,7 @@ class DDConfigurationTests: XCTestCase { XCTAssertNil(configuration.rumResourceEventMapper) XCTAssertNil(configuration.rumActionEventMapper) XCTAssertNil(configuration.rumErrorEventMapper) + XCTAssertEqual(configuration.additionalConfiguration.count, 0) } } @@ -146,6 +147,10 @@ class DDConfigurationTests: XCTestCase { objcBuilder.set(uploadFrequency: .rare) XCTAssertEqual(objcBuilder.build().sdkConfiguration.uploadFrequency, .rare) + + objcBuilder.set(additionalConfiguration: ["foo": 42, "bar": "something"]) + XCTAssertEqual(objcBuilder.build().sdkConfiguration.additionalConfiguration["foo"] as? Int, 42) + XCTAssertEqual(objcBuilder.build().sdkConfiguration.additionalConfiguration["bar"] as? String, "something") } func testScrubbingRUMEvents() {