3.14.0.3
What's changed
Binding-only release. The native SDK is unchanged — still
dd-sdk-ios 3.14.0 — and so are the
package ids, namespaces and API. The fourth component advances for the changes below, which came
out of a full ergonomics review of the four DatadogNet repositories.
IntelliSense on the generated tier
The main entry types now carry doc summaries — 26 of them, written in the ApiDefinitions.cs
files and carried by the binding generator into the packages' XML docs (measured before relying
on it, not assumed): DDDatadog, DDConfiguration, DDSite, DDTrackingConsent,
DDURLSessionInstrumentation, every module's Enable/configuration types, DDRUMMonitor, the
UIKit tracking predicates, DDLogger, DDLogs, DDLogEvent, DDTracer, the three header
writers, DDSessionReplay and its privacy overrides, DDWebViewTracking and DDCrashReporter.
The long tail of generated members — the 377 RUM model types, mostly — stays bare; the C# names
map 1:1 onto the Objective-C ones, so upstream's reference covers them.
The DDLogger null-attributes papercut: resolved by documentation, deliberately
3.14.0.2's notes flagged that Info(message, attributes) throws on a null dictionary, and
suggested a missing [NullAllowed]. Investigated properly: upstream declares those parameters
_Nonnull, and the Swift implementation takes a non-optional [String: Any] — so a
[NullAllowed] "fix" would have traded today's managed ArgumentNullException for a native
crash in the bridging thunk. The binding stays faithful. The rationale now lives as a comment on
the interface in ApiDefinitions.cs (so a future regeneration does not "fix" it wrongly) and in
the README's troubleshooting section; the Additions layer's
Log(level, message, exception?, attributes?) remains the null-tolerant path.
Trim and AOT analyzers, permanently on
The whole surface — generated tier and Additions — analyses clean, so an unsafe reflection
pattern introduced later surfaces at build time. IsTrimmable is deliberately not set: it
would opt the assemblies into consumer-side trimming the device tests do not exercise;
src/Datadog.Binding.props records the reasoning.
Release pipeline
- nuget.org now shows these notes.
docs/release-notes/<version>.mdis packed into
PackageReleaseNotes, with the GitHub releases page as fallback for versions without a
curated file. - README versions can no longer go stale silently — the install snippets sat at
3.14.0.1
while3.14.0.2shipped.build/CheckReadmeVersions.shruns in CI and fails when the README's
pins disagree withDirectory.Build.props. - The upgrade path while Objective Sharpie is broken is now a tool, not archaeology.
./build/DiffSwiftHeaders.sh <version>writes one diff per framework whose generated
-Swift.hchanged — the porting work list — and prints the archive's SHA-256 for
build/checksums.txtfrom the same bytes.docs/regenerating-bindings.mdexplains how to
read a diff, including why a_Nonnullin the header must not become[NullAllowed].
Sample
The sample now exercises the whole usable surface: DatadogNet.WebViewTracking.iOS joins its
references with a tracked WKWebView page, a button makes an instrumented NSUrlSession request
through the generic Enable<TDelegate>() — the one automatic-instrumentation path nothing
demonstrated — and a per-view Session Replay privacy override shows the granular control the
global levels cannot give.
net8 sunset
Stated policy, so the trade-off does not persist by inertia: the net8.0-ios18.0 head — past
its platform support window since MAUI 8 left support on 14 May 2025, though still verified by
the simulator checks — is dropped in the first release after .NET 8 itself leaves support on
10 November 2026.
Upgrading from 3.14.0.2
Nothing to change: same native SDK, same API. The new doc summaries appear on restore.
Full changelog: v3.14.0.2...v3.14.0.3
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.3are 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.3 |
DatadogNet.RUM.iOS |
DatadogRUM |
3.14.0.3 |
DatadogNet.Logs.iOS |
DatadogLogs |
3.14.0.3 |
DatadogNet.Trace.iOS |
DatadogTrace |
3.14.0.3 |
DatadogNet.SessionReplay.iOS |
DatadogSessionReplay |
3.14.0.3 |
DatadogNet.WebViewTracking.iOS |
DatadogWebViewTracking |
3.14.0.3 |
DatadogNet.CrashReporting.iOS |
DatadogCrashReporting |
3.14.0.3 |
DatadogNet.Flags.iOS |
DatadogFlags |
3.14.0.3 |
DatadogNet.Profiling.iOS |
DatadogProfiling |
3.14.0.3 |
DatadogNet.Internal.iOS |
DatadogInternal |
3.14.0.3 |
DatadogNet.OpenTelemetryApi.iOS |
OpenTelemetryApi |
3.14.0.3 |
DatadogNet.Objc.iOS |
(compatibility meta-package) |
3.14.0.3 |
dotnet add package DatadogNet.Core.iOS --version 3.14.0.3
dotnet add package DatadogNet.RUM.iOS --version 3.14.0.3
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/.