Releases: sbokatuk/DatadogNet
Release list
3.14.0.6
3.14.0.6
A re-pin release: no managed code changes, same API, same native SDKs (dd-sdk-ios 3.14.0,
dd-sdk-android 3.12.1). Both Apple binding pins move to releases that fix defects found by
running the samples on real hardware rather than simulators — one per platform, both invisible
to every simulator/emulator check that had ever run. Android is unchanged
(DatadogNet.Android 3.12.1.3).
iOS apps can build for a real iPhone again
DatadogNet.iOS moves 3.14.0.3 → 3.14.0.5. Building any consuming app for a physical device
(ios-arm64) failed at the native link with a wall of
Undefined symbols for architecture arm64: "_OBJC_CLASS_$_DDConfiguration" … while the same
build ran fine on the simulator. The defect is upstream: dd-sdk-ios's prebuilt device slices are
built with a 12.0 deployment target, below which Swift withholds static Objective-C registration
for 41 of the bound classes — every prebuilt archive checked (2.30.2 through 3.14.0) has it, so
every earlier package release fails device links. The binding packages now repair it internally
(generated linker aliases to the classes' exported Swift metadata, plus a pre-main initializer
that realizes them before the registrar can message them), verified end-to-end on a physical
iPhone. Nothing to change in apps; the full story is
docs/device-arm64-missing-objc-class-symbols.md
and the binding release's own notes.
Mac Catalyst apps no longer crash on first Datadog use
DatadogNet.Mac moves 3.14.0.2 → 3.14.0.4. Under MAUI's default TrimMode=partial, the
managed-static registrar (.NET 9+'s Catalyst default) silently fails to weave its
__Registrar__ lookup type into some binding assemblies
(dotnet/macios#21636), and the first touch of
an affected assembly died with
Could not find the type 'ObjCRuntime.__Registrar__' in the assembly 'DatadogNet.Logs.Mac'.
The Mac packages now default consuming apps to the classic static registrar — only when the app
has not chosen a Registrar itself — which sidesteps the weaving entirely. Verified on a real
Mac.
Documentation
The device-link investigation write-up joins docs/, and the README's troubleshooting section
gained entries for both crashes above, so the error texts are searchable straight to their
fixes.
Upgrading from 3.14.0.5
-<PackageReference Include="DatadogNet" Version="3.14.0.5" />
+<PackageReference Include="DatadogNet" Version="3.14.0.6" />Nothing to change beyond the version — the fixes live inside the binding packages the façade
pins. If you had added a direct reference to a newer binding package to get one of these fixes
early, it can come out again: the pins have caught up.
Full changelog: v3.14.0.5...v3.14.0.6
Packages
Built against DatadogNet.iOS 3.14.0.5, DatadogNet.Android 3.12.1.3 and DatadogNet.Mac 3.14.0.4 — dd-sdk-ios 3.14.0 (iOS and, built from source, Mac Catalyst) and dd-sdk-android 3.12.1.
The version names the iOS line, because the native SDKs are released on
separate cadences and never share a version number. The fourth component is this
repository's own revision.
| Package | Target frameworks | NuGet |
|---|---|---|
DatadogNet |
net8.0, net8.0-android34.0, net8.0-ios18.0, net8.0-maccatalyst18.0, net9.0, net9.0-android35.0, net9.0-ios18.0, net9.0-maccatalyst18.0, net10.0, net10.0-android36.0, net10.0-ios26.0, net10.0-maccatalyst26.0 |
3.14.0.6 |
DatadogNet.Extensions.DependencyInjection |
net8.0, net8.0-android34.0, net8.0-ios18.0, net8.0-maccatalyst18.0, net9.0, net9.0-android35.0, net9.0-ios18.0, net9.0-maccatalyst18.0, net10.0, net10.0-android36.0, net10.0-ios26.0, net10.0-maccatalyst26.0 |
3.14.0.6 |
DatadogNet.Extensions.Diagnostics |
net8.0, net8.0-android34.0, net8.0-ios18.0, net8.0-maccatalyst18.0, net9.0, net9.0-android35.0, net9.0-ios18.0, net9.0-maccatalyst18.0, net10.0, net10.0-android36.0, net10.0-ios26.0, net10.0-maccatalyst26.0 |
3.14.0.6 |
DatadogNet.CrashReporting |
net8.0, net8.0-android34.0, net8.0-ios18.0, net8.0-maccatalyst18.0, net9.0, net9.0-android35.0, net9.0-ios18.0, net9.0-maccatalyst18.0, net10.0, net10.0-android36.0, net10.0-ios26.0, net10.0-maccatalyst26.0 |
3.14.0.6 |
DatadogNet.WebView |
net8.0, net8.0-android34.0, net8.0-ios18.0, net8.0-maccatalyst18.0, net9.0, net9.0-android35.0, net9.0-ios18.0, net9.0-maccatalyst18.0, net10.0, net10.0-android36.0, net10.0-ios26.0, net10.0-maccatalyst26.0 |
3.14.0.6 |
DatadogNet.Maui |
net8.0-android34.0, net8.0-ios18.0, net8.0-maccatalyst18.0, net8.0-windows10.0.19041, net9.0-android35.0, net9.0-ios18.0, net9.0-maccatalyst18.0, net9.0-windows10.0.19041, net10.0-android36.0, net10.0-ios26.0, net10.0-maccatalyst26.0, net10.0-windows10.0.19041 |
3.14.0.6 |
dotnet add package DatadogNet.Maui --version 3.14.0.6
Licensing
The code in this repository is MIT. It depends on DatadogNet.iOS,
DatadogNet.Android and DatadogNet.Mac, whose packages ship native binaries built
from Datadog's Apache-2.0 sources. Each package declares MIT AND Apache-2.0
and ships both texts under licenses/.
3.14.0.5
3.14.0.5
Two releases in one. 3.14.0.4 was tagged but never published — its release run failed on
infrastructure and was superseded before a rerun — so for anyone on 3.14.0.3 everything below
is new, including the whole 3.14.0.4 section at the end. The binding pins are unchanged from
3.14.0.3's: DatadogNet.iOS 3.14.0.3, DatadogNet.Android 3.12.1.3, DatadogNet.Mac
3.14.0.2 (dd-sdk-ios 3.14.0, dd-sdk-android 3.12.1). Binding releases carrying their own
round of improvements ship separately; a later façade release re-pins.
A logger created early now comes alive
The one real behaviour bug in this release's line: both native SDKs answer "create a logger"
with a permanently dead no-op until Logs is enabled, and loggers are exactly what apps create
early and cache forever — Datadog.Logger, the DI singleton, one ILogger per category. Any of
those created before Datadog.Initialize silently dropped every entry for the life of the
app, even after the SDK came up.
Now a logger created too early holds the recipe instead of the corpse: entries written while the
SDK is down are dropped (the documented pre-initialise contract, unchanged), but the logger
starts delivering at the first write after Initialize, and AddAttribute/AddTag
configuration applied while it waited is kept and replayed in order. Datadog.Stop() also
resets Datadog.Logger, so a re-initialised app gets a logger of the new epoch.
The ILogger bridge carries structure, not just text
logger.LogInformation("Order {OrderId} placed", id) used to reach Datadog as flat text. The
provider now implements ISupportExternalScope and forwards what Microsoft.Extensions.Logging
already carries:
- message-template values become attributes (
OrderId: 42) — the things the Logs UI facets on; - the template itself lands as
logger.template, one value per call site however many ids
flow through it; - structured scope values become attributes (the entry shadows its scopes, inner scopes shadow
outer); unstructured scopes collect underlogger.scope; EventIdkeeps itslogger.event_id/logger.event_nameshape.
New: IDatadogSdk
The feature surfaces were injectable all along; the lifecycle was not. IDatadogSdk mirrors the
static façade — Initialize, SetUser, SetAccount, SetTrackingConsent, ClearAllData,
Stop, and the feature properties — with DatadogSdk.Instance delegating to the static.
AddDatadog (and therefore UseDatadog) registers it, so "we call SetUser on sign-in" and
"accepting the consent banner flips consent" are now unit tests against a fake.
New: AddDatadog(IConfiguration) — the appsettings path
builder.Services.AddDatadog(builder.Configuration.GetSection("Datadog"));Bound by a hand-rolled DatadogConfigurationBinder (the required/init configuration shape is
exactly what the reflection binder cannot construct): keys are property names, features enable by
their section being present, defaults come from the option types themselves, and a malformed
section throws at startup naming the full configuration path. The ConfigureNative hooks cannot
come from configuration; use the object overload when you need them.
New package: DatadogNet.Extensions.Diagnostics
The System.Diagnostics.Activity bridge. Name the ActivitySources you mean and their
activities become Datadog spans — tags, DisplayName (as resource.name), error status and
parentage carried across:
using var bridge = DatadogActivityBridge.Start(new DatadogActivityBridgeOptions {
Sources = ["MyCompany.Checkout", "MyCompany.Sync"],
});Forwarding is opt-in per source, because a modern .NET process emits activities from everywhere
and every forwarded span is an event Datadog ingests. Spans go through the same IDatadogTracer
as hand-written ones — TraceOptions.SampleRate and RUM correlation apply once, rather than
through a parallel exporter pipeline with its own configuration to reconcile.
Unhandled-exception reporting is now public, and not MAUI-only
UnhandledExceptionReporting moved into the core package with a public Enable(). A plain .NET
Android or iOS app, a background service, or a generic host — the DI package's own audience —
can now opt into the AppDomain/TaskScheduler/platform-boundary hooks that previously only
UseDatadog could reach. MAUI apps change nothing: TrackUnhandledExceptions delegates to the
same class.
Smaller, but real
GetCurrentSessionIdAsync(CancellationToken)— a default interface implementation, so
existing fakes keep compiling; a support screen can stop waiting on an SDK queue.- Trim and AOT analyzers now run on every head with warnings as errors.
IsTrimmableis
deliberately not claimed; the README states the trimming stance. - The XML docs stop calling Mac Catalyst an unsupported head (the Catalyst TFMs have compiled
the real SDK over the DatadogNet.Mac bindings since3.14.0.3),TraceOptionssheds its 2.x
OpenTracing paragraph, andCrashReporting's docs credit KSCrash rather than PLCrashReporter
for the 3.x line. - The README gains a Version map — façade × dd-sdk-ios × dd-sdk-android × binding pins ×
.NET bands × minimum OS in one CI-checked row — and a Running ahead of the pins section
stating what the>=binding floor does and does not keep working. - The generated GitHub release notes now read their target-frameworks table out of the packed
.nupkgs themselves; the old hardcoded lists omitted every maccatalyst head on the very
release that introduced them. - CI now compiles a windows-headed consumer against the packed
DatadogNet.Maui— the stub
head's whole pitch, previously never consumer-compiled. (A XAML-free MAUI class library rather
than a sample TFM: WinUI's XAML compiler is a Windows-only executable, so a windows-headed MAUI
app cannot build on this repository's macOS runners.)
Everything 3.14.0.4 contained (never published)
DatadogNet.Extensions.DependencyInjection is its own package. Everything UseDatadog
wired into the container, with no MAUI in it: AddDatadog registers the feature interfaces as
TryAdd singletons (a test host's fake wins), an overload registers without initialising,
builder.Logging.AddDatadog() adds the ILogger provider, AddDatadogTracking instruments an
HttpClient. DatadogNet.Maui depends on it and delegates. Moves to be aware of
(source-compatible for a typical app): AddDatadogTracking and
DatadogHttpMessageHandlerOptions moved from the DatadogNet.Maui namespace/assembly into
DatadogNet in the new package; the ILoggingBuilder.AddDatadog(DatadogMauiOptions?) overload
became AddDatadog(LoggerOptions?, LogLevel).
DatadogNet.Maui restores on a Windows head. Stub heads per band: UseDatadog compiles and
runs there, every call lands in the documented no-ops, and the platform-conditional
PackageReference earlier releases required is no longer needed.
Unhandled-exception coverage reaches the platform boundaries. Android's
UnhandledExceptionRaiser and Apple's managed-exception marshalling, beyond the AppDomain and
TaskScheduler hooks; a weak reported-set keeps a failure seen twice to one RUM error.
Verified harder. Device tests exercise DatadogNet.WebView on a real platform web view; the
sample demonstrates ConfigureNative, the consent cycle, and gated Session Replay recording;
the façade's WebView/CrashReporting packages ship their own Android R8 keep-rules under
buildTransitive/; six DI unit tests.
Release pipeline. These notes reach nuget.org (PackageReleaseNotes); CI fails when the
README's versions drift from Directory.Build.props; the net8 sunset is stated policy — dropped
in the first release after .NET 8 leaves support on 10 November 2026.
Upgrading from 3.14.0.3
For a MAUI app: update the version, optionally delete any windows-head guard around the
DatadogNet.Maui reference. Direct callers of the moved HttpClient/logging extensions: see the
moves note above. The ILogger provider now attaches template/scope attributes to log events —
new data on existing events, nothing removed.
Full changelog: v3.14.0.4...v3.14.0.5
Packages
Built against DatadogNet.iOS 3.14.0.3, DatadogNet.Android 3.12.1.3 and DatadogNet.Mac 3.14.0.2 — dd-sdk-ios 3.14.0 (iOS and, built from source, Mac Catalyst) and dd-sdk-android 3.12.1.
The version names the iOS line, because the native SDKs are released on
separate cadences and never share a version number. The fourth component is this
repository's own revision.
| Package | Target frameworks | NuGet |
|---|---|---|
DatadogNet |
net8.0, net8.0-android34.0, net8.0-ios18.0, net8.0-maccatalyst18.0, net9.0, net9.0-android35.0, net9.0-ios18.0, net9.0-maccatalyst18.0, net10.0, net10.0-android36.0, net10.0-ios26.0, net10.0-maccatalyst26.0 |
3.14.0.5 |
DatadogNet.Extensions.DependencyInjection |
net8.0, net8.0-android34.0, net8.0-ios18.0, net8.0-maccatalyst18.0, net9.0, net9.0-android35.0, net9.0-ios18.0, net9.0-maccatalyst18.0, net10.0, net10.0-android36.0, net10.0-ios26.0, net10.0-maccatalyst26.0 |
3.14.0.5 |
DatadogNet.Extensions.Diagnostics |
net8.0, net8.0-android34.0, net8.0-ios18.0, net8.0-maccatalyst18.0, net9.0, net9.0-android35.0, net9.0-ios18.0, net9.0-maccatalyst18.0, net10.0, net10.0-android36.0, net10.0-ios26.0, net10.0-maccatalyst26.0 |
[3.14.0.5](https://www.nuget.org/packages/DatadogNet.Extensions.Diagnostics/3.... |
3.14.0.3
3.14.0.3
Mac Catalyst becomes a real head. Same iOS and Android bindings as 3.14.0.2
(DatadogNet.iOS 3.14.0.2, dd-sdk-ios 3.14.0; DatadogNet.Android 3.12.1.2, dd-sdk-android 3.12.1),
plus the new DatadogNet.Mac 3.14.0.1 binding set -
dd-sdk-ios 3.14.0 built from source for Mac Catalyst.
What changed
DatadogNet,DatadogNet.CrashReportingandDatadogNet.WebViewnow ship
net8.0-maccatalyst18.0,net9.0-maccatalyst18.0andnet10.0-maccatalyst26.0assets, and
DatadogNet.Mauiships the same three alongside its Android and iOS heads. A MAUI app's Mac
Catalyst head now gets working RUM, Logs, Trace, crash reporting and web view tracking from the
same unconditional package references as the mobile heads - previously it restored the
platform-neutral assembly whose every member is a documented no-op.- The Catalyst heads compile the same
Platforms/iOSimplementation the iOS heads use,
against the DatadogNet.Mac bindings - which are verbatim copies of the DatadogNet.iOS binding
definitions over Catalyst-built native frameworks, so there is no second implementation to
drift.Datadog.IsSupportedistrueon Mac Catalyst now. - The Windows head is unchanged: platform-neutral assets, documented no-ops.
Behaviour notes on Mac Catalyst
- Datadog lists macOS (Catalyst) 12+ as partial support;
SupportedOSPlatformVersionis 15.0
(macOS 12) accordingly. - Session Replay records nothing on Catalyst - Datadog supports it on iOS/iPadOS only. Setting
SessionReplayOptionsis accepted and does nothing there, matching the API's documented
behaviour on unsupported platforms. - Cellular- and battery-derived RUM vitals are no-ops on a Mac.
Full changelog: v3.14.0.1...v3.14.0.3
Packages
Built against DatadogNet.iOS 3.14.0.2 and DatadogNet.Android 3.12.1.2 — dd-sdk-ios 3.14.0 and dd-sdk-android 3.12.1.
The version names the iOS line, because the two native SDKs are released on
separate cadences and never share a version number. The fourth component is this
repository's own revision.
| Package | Target frameworks | NuGet |
|---|---|---|
DatadogNet |
net8.0, net8.0-android34.0, net8.0-ios18.0, net9.0, net9.0-android35.0, net9.0-ios18.0, net10.0, net10.0-android36.0, net10.0-ios26.0 |
3.14.0.3 |
DatadogNet.CrashReporting |
net8.0, net8.0-android34.0, net8.0-ios18.0, net9.0, net9.0-android35.0, net9.0-ios18.0, net10.0, net10.0-android36.0, net10.0-ios26.0 |
3.14.0.3 |
DatadogNet.WebView |
net8.0, net8.0-android34.0, net8.0-ios18.0, net9.0, net9.0-android35.0, net9.0-ios18.0, net10.0, net10.0-android36.0, net10.0-ios26.0 |
3.14.0.3 |
DatadogNet.Maui |
net8.0-android34.0, net8.0-ios18.0, net9.0-android35.0, net9.0-ios18.0, net10.0-android36.0, net10.0-ios26.0 |
3.14.0.3 |
dotnet add package DatadogNet.Maui --version 3.14.0.3
Licensing
The code in this repository is MIT. It depends on DatadogNet.iOS and
DatadogNet.Android, whose packages ship native binaries built and published by
Datadog under Apache-2.0. Each package declares MIT AND Apache-2.0 and ships
both texts under licenses/.
3.14.0.1
DatadogNet 3.14.0.1
Moves to the 3.x line of both native SDKs — dd-sdk-ios 3.14.0 and dd-sdk-android 3.12.1.
Your code does not change. Datadog.Initialize, DatadogConfiguration and every options type,
IRumMonitor, IDatadogLogs, IDatadogLogger, IDatadogTracer, IDatadogSpan, ISessionReplay,
DatadogHttpMessageHandler and all of DatadogNet.Maui are unchanged. Upgrading from 2.30.2.1 is
a version bump.
That is the point of the façade, and this release is the first evidence of it: underneath, one SDK
replaced its entire tracing API and the other redistributed its whole Objective-C surface across ten
namespaces, and the same twenty device checks pass on both platforms without a line changing.
What moved underneath
Android — dd-sdk-android 3.0 removed OpenTracing and AndroidTracer. Tracing is now
DatadogTracing.NewTracerBuilder(core) and GlobalDatadogTracer, over DatadogSpan. The façade's
Android tracer was rewritten, and got better in the process:
DatadogSpanhas realSetError,SetErrorMessageandLogErrorMessage, where
io.opentracing.Spanhad none and the façade spelled out Datadog's four-log-field convention by
hand.- Trace and span ids are typed and readable — a 128-bit
DatadogTraceIdand along. SetTaghas typed overloads, so a numeric tag no longer needs aJava.Lang.Double.- Header injection still needs a shim, but for a new reason: the setter is a Kotlin
(C, String, String) -> Unit, which C# cannot express as a lambda. In 2.x the trap was a carrier
the marshaller copied. Both ended with a request going out untraced.
iOS — dd-sdk-ios 3.0 dissolved DatadogObjc. The DD* types moved into the module they belong
to, so the façade takes five package references and five using directives where it took one.
DDSite.Us1, DDTrackingConsent.Granted, DDRUMMonitor.Shared and OTSpan.SetActive became
methods; verbosity moved to DDDatadog.SetVerbosityLevel(DDCoreLoggerLevel). OpenTracing survives in
the Objective-C layer, so IDatadogSpan is still one interface over both platforms.
The crash engine is KSCrash rather than PLCrashReporter, and DatadogNet.CrashReporting no longer
carries a separate CrashReporter dependency.
Not exposed, and why
DatadogNet.Flags.iOSandDatadogNet.Profiling.iOSship the frameworks but expose no
callable API — upstream has not projected them into Objective-C. There is nothing to bind and
nothing for the façade to call.- Feature operations (
StartOperation,SucceedOperation,FailOperation) and
TrackMemoryWarningsare iOS-only so far. Reachable throughConfigureNative.
Notes
docs/upgrade-to-3x.md is the full analysis — what moved, what the façade
gained, what each 2.x convenience shim is still doing and which upstream member would replace it.
Target frameworks are unchanged: net8, net9 and net10, each with its -android and -ios head, and
DatadogNet.Maui the six platform ones. The net8 caveats are unchanged too — see the README.
Android's minimum is API 23, now declared honestly by the .aar itself rather than being forced
up from 21 by the AndroidX graph.
Full changelog: v2.30.2.1...v3.14.0.1
Packages
Built against DatadogNet.iOS 3.14.0.1 and DatadogNet.Android 3.12.1.1 — dd-sdk-ios 3.14.0 and dd-sdk-android 3.12.1.
The version names the iOS line, because the two native SDKs are released on
separate cadences and never share a version number. The fourth component is this
repository's own revision.
| Package | Target frameworks | NuGet |
|---|---|---|
DatadogNet |
net8.0, net8.0-android34.0, net8.0-ios18.0, net9.0, net9.0-android35.0, net9.0-ios18.0, net10.0, net10.0-android36.0, net10.0-ios26.0 |
3.14.0.1 |
DatadogNet.CrashReporting |
net8.0, net8.0-android34.0, net8.0-ios18.0, net9.0, net9.0-android35.0, net9.0-ios18.0, net10.0, net10.0-android36.0, net10.0-ios26.0 |
3.14.0.1 |
DatadogNet.WebView |
net8.0, net8.0-android34.0, net8.0-ios18.0, net9.0, net9.0-android35.0, net9.0-ios18.0, net10.0, net10.0-android36.0, net10.0-ios26.0 |
3.14.0.1 |
DatadogNet.Maui |
net8.0-android34.0, net8.0-ios18.0, net9.0-android35.0, net9.0-ios18.0, net10.0-android36.0, net10.0-ios26.0 |
3.14.0.1 |
dotnet add package DatadogNet.Maui --version 3.14.0.1
Licensing
The code in this repository is MIT. It depends on DatadogNet.iOS and
DatadogNet.Android, whose packages ship native binaries built and published by
Datadog under Apache-2.0. Each package declares MIT AND Apache-2.0 and ships
both texts under licenses/.
2.30.2.1
DatadogNet 2.30.2.1
First release. One cross-platform Datadog API for .NET MAUI, over
DatadogNet.iOS and
DatadogNet.Android.
builder
.UseMauiApp<App>()
.UseDatadog(new DatadogConfiguration
{
ClientToken = "…",
Env = "production",
Service = "my-app",
TrackingConsent = TrackingConsent.Granted,
Rum = new RumOptions { ApplicationId = "…" },
Logs = new LogsOptions(),
});What is in it
- RUM — views, actions, resources, errors, custom timings, feature flags, session-wide
attributes, session control. - Logs — six levels, exceptions folded into Datadog's reserved
error.*attributes,
per-logger attributes and tags. - Trace — spans, tags, errors, activation scopes, and header injection in the Datadog, B3,
B3-multi and W3C Trace Context formats. - Session Replay — the three privacy levels, defaulting to the most private of each, with the
Material extension registered automatically on Android. - Consent, user and account — including
Pendingas the default, so an app that has not yet
asked its user uploads nothing. DatadogNet.CrashReportingandDatadogNet.WebViewas opt-in packages.
What DatadogNet.Maui adds
- RUM views from page navigation, which neither native SDK can do — a MAUI page is not a
UIViewControllerand not anActivity. - An
ILoggerprovider, so an app that already logs throughILogger<T>needs no call-site changes. - Unhandled exceptions and unobserved task exceptions reported as RUM errors while they still have
their .NET type and managed frames. AddDatadogTracking()on anIHttpClientBuilder, which is how anHttpClient's traffic reaches
RUM at all.- Dependency-injection registrations for every interface, so a view-model can be tested with a
substitute.
Notes
The version names the iOS line. Datadog releases the two SDKs on separate cadences and their
version numbers have never matched: 2.30.2.1 is dd-sdk-ios 2.30.2 and dd-sdk-android
2.26.3.
Windows and Mac Catalyst restore and no-op. DatadogNet ships platform-neutral net9.0 and
net10.0 assets whose every member is a documented no-op, so a multi-headed MAUI app needs no
conditionals in its code. DatadogNet.Maui is the exception and is mobile-only — see the README.
net8, net9 and net10 — nine target frameworks per package, six for DatadogNet.Maui. The device
checks run against net8 and net10 on both platforms.
net8 does not work for MAUI apps, only for plain .NET Android and .NET iOS ones. A net8 MAUI app
fails during Java callable wrapper generation — XA4204 on
AndroidX.Navigation.NavController/IOnDestinationChangedListener — because MAUI 8 resolves as the
original 8.0.100 and its AndroidX generation does not line up with the Datadog bindings'. MAUI 8 has
also been out of support since 14 May 2025. Target net9 or net10 for MAUI; see the README.
This is the 2.x line of both SDKs. Tracing is OpenTracing-shaped on both platforms, which 3.0
removed; dd-sdk-ios 3.0 additionally deleted the DatadogObjc façade the iOS head is written
against.
The Android floor is 23, not the 21 the .aars declare — androidx.savedstate in the AndroidX
generation they depend on raises it, and the manifest merger takes the maximum. So the usual
argument for staying on 2.x over 3.0 does not hold; the other reasons still do.
Packages
Built against DatadogNet.iOS 2.30.2.2 and DatadogNet.Android 2.26.3.1 — dd-sdk-ios 2.30.2 and dd-sdk-android 2.26.3.
The version names the iOS line, because the two native SDKs are released on
separate cadences and never share a version number. The fourth component is this
repository's own revision.
| Package | Target frameworks | NuGet |
|---|---|---|
DatadogNet |
net8.0, net8.0-android34.0, net8.0-ios18.0, net9.0, net9.0-android35.0, net9.0-ios18.0, net10.0, net10.0-android36.0, net10.0-ios26.0 |
2.30.2.1 |
DatadogNet.CrashReporting |
net8.0, net8.0-android34.0, net8.0-ios18.0, net9.0, net9.0-android35.0, net9.0-ios18.0, net10.0, net10.0-android36.0, net10.0-ios26.0 |
2.30.2.1 |
DatadogNet.WebView |
net8.0, net8.0-android34.0, net8.0-ios18.0, net9.0, net9.0-android35.0, net9.0-ios18.0, net10.0, net10.0-android36.0, net10.0-ios26.0 |
2.30.2.1 |
DatadogNet.Maui |
net8.0-android34.0, net8.0-ios18.0, net9.0-android35.0, net9.0-ios18.0, net10.0-android36.0, net10.0-ios26.0 |
2.30.2.1 |
dotnet add package DatadogNet.Maui --version 2.30.2.1
Licensing
The code in this repository is MIT. It depends on DatadogNet.iOS and
DatadogNet.Android, whose packages ship native binaries built and published by
Datadog under Apache-2.0. Each package declares MIT AND Apache-2.0 and ships
both texts under licenses/.