Skip to content

3.14.0.1

Choose a tag to compare

@github-actions github-actions released this 23 Jul 06:39
44338fc

What's changed

Moves to dd-sdk-ios 3.14.0, the current release, from 2.30.2. This is the 2.x → 3.x major
upgrade, and it restructures the package set: DatadogObjc and CrashReporter are gone upstream,
DatadogFlags and DatadogProfiling are new, and the DD* types that all lived in one namespace
now live in the module each belongs to.

Every app has to change code, not just a version number. The migration table below covers it.

Package versions are <dd-sdk-ios version>.<binding revision>. 3.14.0.1 is dd-sdk-ios
3.14.0, binding revision 1.

⚠️ Breaking changes

The DatadogObjc namespace is gone. Upstream deleted the framework and moved its types into
the product modules, so a single using DatadogObjc; becomes one import per feature:

-using DatadogObjc;
+using DatadogCore;      // DDDatadog, DDConfiguration, DDSite, DDTrackingConsent
+using DatadogRUM;       // DDRUM, DDRUMMonitor, DDRUMConfiguration, the RUM event models
+using DatadogLogs;      // DDLogs, DDLogger, DDLoggerConfiguration, DDLogEvent
+using DatadogTrace;     // DDTrace, DDTracer, the header writers

DDCoreLoggerLevel and DDTracingHeaderType live in DatadogInternal, which every module already
depends on — add using DatadogInternal; if you touch either.

Type 2.30.2 namespace 3.14.0 namespace
DDDatadog, DDConfiguration, DDSite, DDTrackingConsent, DDURLSessionInstrumentation DatadogObjc DatadogCore
DDRUM, DDRUMMonitor, DDRUMConfiguration, DDRUMView, all RUM event models DatadogObjc DatadogRUM
DDLogs, DDLogger, DDLoggerConfiguration, DDLogEvent DatadogObjc DatadogLogs
DDTrace, DDTracer, DDHTTPHeadersWriter, DDB3HTTPHeadersWriter DatadogObjc DatadogTrace
DDCoreLoggerLevel, DDTracingHeaderType DatadogObjc DatadogInternal
DDSessionReplay and friends DatadogSessionReplay unchanged

DatadogNet.CrashReporter.iOS is retired. dd-sdk-ios 3.0 replaced PLCrashReporter with
KSCrash, which is linked into DatadogCrashReporting rather than shipped separately — the binary
defines 912 KSCrash symbols and no PLCrash ones. Drop the reference; DatadogNet.CrashReporting.iOS
is self-contained now. Every PLCrashReporter* type is gone with it.

Crash reports are now delivered through RUM error tracking only. The Logs product no longer
reports fatal errors, so RUM and Crash Reporting must both be enabled to see crashes.

DatadogNet.Objc.iOS is now a compatibility meta-package. It ships no assembly — just
dependencies on Core, RUM, Logs, Trace and SessionReplay — so an existing PackageReference still
restores a working set after a version bump. It does not spare you the namespace changes above.
New apps should reference the product modules directly and ignore it.

Tracing header writers changed. DDOTelHTTPHeadersWriter is replaced by
DDW3CHTTPHeadersWriter, and all of them lost their sampling argument — trace sampling is now
derived from the RUM session.id so a trace and its session agree.

-var writer = new DDHTTPHeadersWriter(DDTraceSamplingStrategy.CustomWithSampleRate(100), DDTraceContextInjection.All);
+var writer = new DDHTTPHeadersWriter(DDTraceContextInjection.All);

URLSession instrumentation is unified. DatadogURLSessionDelegate, DDURLSessionDelegate and
DDNSURLSessionDelegate are all gone, replaced by DDURLSessionInstrumentation. This binding's
convenience overloads carry over unchanged:

DDURLSessionInstrumentation.Enable<MySessionDelegate>();

RUMView(path:) became RUMView(name:). The DDRUMView initializer now takes a name and an
optional isUntrackedModal flag.

Session Replay's defaultPrivacyLevel is gone for good. It was deprecated in 2.19.0 and
removed in 3.0; the three fine-grained levels are required initializer arguments. If you are coming
straight from 2.17.0, see the 2.30.2.1 notes for that change.

Added

DatadogNet.Flags.iOS and DatadogNet.Profiling.iOS, for the two new SDK modules. Both ship
the native framework but expose no Objective-C API at all — upstream has not projected them
into Objective-C yet, so there is nothing callable from C#. They are published so the package set
mirrors the SDK and so adding the API later is a version bump rather than a new package id.

View-level RUM attributes (the headline 3.0 RUM change) — attributes set on a view now
propagate to the resources, actions, errors and long tasks recorded while it is active, instead of
having to be repeated on every call:

using (Datadog.Rum.StartView("checkout"))
{
    Datadog.Rum.AddViewAttributes(new Dictionary<string, object?> { ["cart.size"] = 3 });
    Datadog.Rum.AddAction(DDRUMActionType.Tap, "pay");   // inherits cart.size
    Datadog.Rum.RemoveViewAttributes("cart.size");
}

AddViewAttributeForKey, AddViewAttributes, RemoveViewAttributeForKey and
RemoveViewAttributesForKeys are all bound, with C#-dictionary and params overloads.

DDRUMConfiguration.TrackMemoryWarnings, reporting memory warnings as RUM errors.

Multi-instance overloads throughout. Nearly every entry point gained an instanceName:
variant, so a host app and an embedded SDK can run separate Datadog instances.

DDW3CHTTPHeadersWriter for W3C tracecontext propagation.

Fixed

The generator that produces these bindings was rewritten for the 3.x layout, and several classes of
defect were found and fixed along the way. Each would have compiled cleanly and failed at runtime or
corrupted a call:

  • extraInfo was bound as an out parameter. The pointer-to-pointer heuristic counted the *
    inside NSDictionary<NSString *, id> *, so setUserInfo, addUserExtraInfo and several others
    took out dictionaries that callers could never populate.
  • [NullAllowed] was missing everywhere. Nullability is expressed in the Objective-C type,
    not the property attribute list, so every nullable property was bound as non-null.
  • @protocol DDFoo; forward declarations swallowed the next interface. DDDataEncryption was
    bound with DDConfiguration's entire member list.
  • + initializeWithConfiguration:trackingConsent: was bound as a constructor because its
    selector starts with "init"; it is a static void method. Constructors are now identified by
    returning instancetype on an instance method.
  • Swift class properties were bound twice — once as the property and once as its + getter —
    producing duplicate C# members.
  • Block parameters were mangled. A naive paren match read (void (^)(NSTimeInterval)) as the
    type void (^; all ten block-taking methods, including every event mapper, are now Action<> /
    Func<>.

The meta-package would have shipped without net10 dependencies. merge-packages.py decided what
to merge from lib/ folders, and a dependency-only package has none — so DatadogNet.Objc.iOS
advertised net8 and net9 only, and a net10 consumer would have restored it and got nothing at all.
Dependency groups are now merged independently of lib assets.

Tests

The on-simulator suite is 17 checks, run against the packed packages on both net9.0-ios18.0
and net10.0-ios26.0. It covers the new surface: view-attribute propagation, the unified URLSession
instrumentation by type, KSCrash-backed crash reporting, fine-grained Session Replay privacy with
per-view overrides, and both the RUM and Logs event mappers actually firing.

The framework-loaded check now expects eleven dynamic frameworks and asserts KSCrash resolves as
a class — 3.x removes the one static-archive special case the 2.x bindings had to carry.

Package layout tests are 127 checks, including a new one asserting the meta-package ships
dependencies for every target framework and no assembly or payload.

Notes

Packages total about 67 MB, up from 50 MB on 2.30.2 — the frameworks themselves grew. The
largest is DatadogNet.Internal.iOS at 20.7 MB, comfortably under the 250 MB nuget.org limit.

Objective Sharpie still cannot be used. Version 3.5.116 bundles a clang that fails on recent
iOS SDK module maps. The bindings were generated by parsing the shipped -Swift.h headers directly;
build/GenerateBindings.sh documents the problem and honours a SHARPIE override for when it is
fixed.

The 2.x line ends at 2.30.2.1. It remains on nuget.org and is unaffected by this release. If you
cannot take the namespace changes yet, stay there — but note that 2.x receives no further upstream
fixes.

Full changelog: v2.30.2.1...v3.14.0.1

Packages

Bound against dd-sdk-ios 3.14.0, targeting net8.0-ios18.0, net9.0-ios18.0 and net10.0-ios26.0.

The first three components of 3.14.0.1 are the dd-sdk-ios version; the fourth is this
repository's binding revision, which advances when the bindings or packaging change while
the native binaries stay put.

Package Wraps NuGet
DatadogNet.Core.iOS DatadogCore 3.14.0.1
DatadogNet.RUM.iOS DatadogRUM 3.14.0.1
DatadogNet.Logs.iOS DatadogLogs 3.14.0.1
DatadogNet.Trace.iOS DatadogTrace 3.14.0.1
DatadogNet.SessionReplay.iOS DatadogSessionReplay 3.14.0.1
DatadogNet.WebViewTracking.iOS DatadogWebViewTracking 3.14.0.1
DatadogNet.CrashReporting.iOS DatadogCrashReporting 3.14.0.1
DatadogNet.Flags.iOS DatadogFlags 3.14.0.1
DatadogNet.Profiling.iOS DatadogProfiling 3.14.0.1
DatadogNet.Internal.iOS DatadogInternal 3.14.0.1
DatadogNet.OpenTelemetryApi.iOS OpenTelemetryApi 3.14.0.1
DatadogNet.Objc.iOS (compatibility meta-package) 3.14.0.1
dotnet add package DatadogNet.Core.iOS --version 3.14.0.1
dotnet add package DatadogNet.RUM.iOS --version 3.14.0.1

Licensing

The binding code is MIT; the bundled native binaries are Apache-2.0, as built and
published by Datadog. Each package ships both texts under licenses/.