DatadogNet.WebViewTracking.Mac 3.14.0.2-beta.1.2

This is a prerelease version of DatadogNet.WebViewTracking.Mac.
There is a newer version of this package available.
See the version list below for details.
dotnet add package DatadogNet.WebViewTracking.Mac --version 3.14.0.2-beta.1.2
                    
NuGet\Install-Package DatadogNet.WebViewTracking.Mac -Version 3.14.0.2-beta.1.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DatadogNet.WebViewTracking.Mac" Version="3.14.0.2-beta.1.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="DatadogNet.WebViewTracking.Mac" Version="3.14.0.2-beta.1.2" />
                    
Directory.Packages.props
<PackageReference Include="DatadogNet.WebViewTracking.Mac" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add DatadogNet.WebViewTracking.Mac --version 3.14.0.2-beta.1.2
                    
#r "nuget: DatadogNet.WebViewTracking.Mac, 3.14.0.2-beta.1.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package DatadogNet.WebViewTracking.Mac@3.14.0.2-beta.1.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=DatadogNet.WebViewTracking.Mac&version=3.14.0.2-beta.1.2&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=DatadogNet.WebViewTracking.Mac&version=3.14.0.2-beta.1.2&prerelease
                    
Install as a Cake Tool

DatadogNet.Mac

.NET for Mac Catalyst bindings for the native Datadog iOS SDK (dd-sdk-ios) - RUM, Logs, Trace, crash reporting and feature flags for the Mac Catalyst head of a .NET MAUI (or plain .NET for Mac Catalyst) app.

This is the Mac Catalyst sibling of DatadogNet.iOS and DatadogNet.Android, and slots under the DatadogNet cross-platform façade. The API is identical to DatadogNet.iOS - same types, same namespaces (DatadogCore, DatadogRUM, DatadogLogs, ...) - because the binding definitions are verbatim copies of that repository's and Catalyst is the same UIKit platform underneath. Code written against the iOS packages compiles against these unchanged; only the package ids differ.

Support status. Datadog lists macOS (Catalyst) 12+ as partial support: the SDK compiles and its features work, but Catalyst is not a first-class tested platform upstream. Session Replay is iOS/iPadOS-only and records nothing on Catalyst (the package still ships so shared code links). Cellular/battery-derived RUM vitals are no-ops on a Mac. Test your telemetry end-to-end before relying on it.

Contents

Packages

Versioned <dd-sdk-ios version>.<binding revision>, exactly like DatadogNet.iOS: 3.14.0.1 wraps dd-sdk-ios 3.14.0, and the fourth component advances when the bindings or packaging change while the native version stays put. The iOS and Mac revisions advance independently - match on the first three components, not all four.

Package Wraps Notes
DatadogNet.Core.Mac DatadogCore SDK initialization; start here
DatadogNet.RUM.Mac DatadogRUM Real User Monitoring
DatadogNet.Logs.Mac DatadogLogs Log collection
DatadogNet.Trace.Mac DatadogTrace APM tracing
DatadogNet.SessionReplay.Mac DatadogSessionReplay Links, but records nothing on Catalyst
DatadogNet.WebViewTracking.Mac DatadogWebViewTracking WKWebView instrumentation
DatadogNet.CrashReporting.Mac DatadogCrashReporting KSCrash-based crash reporting
DatadogNet.Flags.Mac DatadogFlags Native framework only; no Objective-C API upstream yet
DatadogNet.Profiling.Mac DatadogProfiling Native framework only; no Objective-C API upstream yet
DatadogNet.Internal.Mac DatadogInternal Shared plumbing; arrives transitively
DatadogNet.OpenTelemetryApi.Mac OpenTelemetryApi Trace dependency; arrives transitively

There is no DatadogNet.Objc.Mac: that id exists on iOS only as a compatibility meta-package for apps upgrading from the 2.x bindings, and no Mac Catalyst 2.x ever existed.

Every package targets net8.0-maccatalyst18.0, net9.0-maccatalyst18.0 and net10.0-maccatalyst26.0, with SupportedOSPlatformVersion 15.0 (macOS 12) - the floor both the .NET 9 maccatalyst workload and Datadog's own Catalyst support statement impose.

net8 sunset. The net8 head is already past its platform support window — the net8 mobile workloads left support with MAUI 8 on 14 May 2025 — and ships for the apps that still target it. So the decision does not persist by inertia: the net8 head is dropped in the first release after .NET 8 itself leaves support on 10 November 2026, in step with DatadogNet.iOS.

Installing

dotnet add package DatadogNet.Core.Mac
dotnet add package DatadogNet.RUM.Mac      # and the other features you use

In a multi-headed MAUI app, guard the references by platform so each head restores its own bindings:

<ItemGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">
  <PackageReference Include="DatadogNet.Core.Mac" Version="3.14.0.2" />
  <PackageReference Include="DatadogNet.RUM.Mac" Version="3.14.0.2" />
</ItemGroup>

Or skip the per-platform wiring entirely and use the DatadogNet façade, which fronts the iOS, Android and Mac Catalyst bindings behind one cross-platform API.

Usage

Identical to DatadogNet.iOS - same types, same namespaces, same convenience layer - so that README is the reference. The short version:

using DatadogCore;
using DatadogInternal;
using DatadogRUM;

var configuration = new DDConfiguration(clientToken: "<CLIENT_TOKEN>", env: "prod")
{
    Site = DDSite.Us1(),
};
DDDatadog.InitializeWithConfiguration(configuration, DDTrackingConsent.Granted());

DDRUM.EnableWith(new DDRUMConfiguration(applicationID: "<RUM_APPLICATION_ID>")
{
    UiKitViewsPredicate = new DDDefaultUIKitRUMViewsPredicate(),
    UiKitActionsPredicate = new DDDefaultUIKitRUMActionsPredicate(),
});

samples/DatadogNet.Mac.Example is a runnable MAUI Catalyst app showing RUM, Logs, Trace and crash reporting - the honest Catalyst feature set.

How this repository works

The one structural difference from DatadogNet.iOS: the native frameworks are built here, not downloaded. Datadog publishes no Mac Catalyst binaries - Datadog.xcframework.zip carries iOS device and simulator slices only, and the prebuilt OpenTelemetryApi covers every Apple platform except Catalyst - so build/BuildXcFrameworks.sh compiles dd-sdk-ios at the pinned tag for platform=macOS,variant=Mac Catalyst and assembles single-slice (ios-arm64_x86_64-maccatalyst) xcframeworks into libs/. Two project-file patches make that possible; the script documents both.

The binding definitions (ApiDefinitions.cs, StructsAndEnums.cs, Additions/) are verbatim copies from DatadogNet.iOS, refreshed by build/SyncBindingsFromiOS.sh. Do not edit them here: fix them in the iOS repository and re-sync, so the two platforms cannot drift. That is enforced, not asked politely: the sync records the iOS commit it copied from in build/ios-bindings-source.txt, and CI's binding-drift job re-runs the sync against exactly that commit and fails on any difference. (shims/ is deliberately outside the sync — see the script's header for what must happen if the iOS Flags shim ever ships.)

Layout

build/    BuildXcFrameworks.sh (native build), BuildNugets.sh (pack), SyncBindingsFromiOS.sh,
          merge-packages.py (grafts the net10 pass into the net9-band packages)
libs/     the Catalyst xcframeworks (built, not committed) + BUILD-INFO.txt
src/      one binding project per package + Datadog.Binding.props (everything they share)
tests/    package layout tests, run against the packed .nupkg files
samples/  MAUI Mac Catalyst example app, built against the packed packages

Building locally

./build/BuildXcFrameworks.sh   # needs Xcode; ~15 minutes, cached by DATADOG_BUILD_DIR
./build/BuildNugets.sh         # packs all eleven packages into ./artifacts
dotnet test tests/DatadogNet.Mac.PackageTests
dotnet build samples/DatadogNet.Mac.Example/DatadogNetExample.csproj -p:RuntimeIdentifier=maccatalyst-arm64

Needs the .NET 9 and .NET 10 SDKs with the maccatalyst workload in each (BuildNugets.sh packs twice and merges - no single SDK can build all three target frameworks), plus maui-maccatalyst for the sample.

Upgrading the Datadog SDK

  1. Bump DatadogNativeVersion in Directory.Build.props, reset DatadogBindingRevision to 1.
  2. Update DatadogOtelVersion to whatever the new tag's Cartfile.resolved pins.
  3. Wait for (or produce) the matching DatadogNet.iOS release, then run ./build/SyncBindingsFromiOS.sh against it and review the diff.
  4. ./build/BuildXcFrameworks.sh && ./build/BuildNugets.sh && dotnet test tests/DatadogNet.Mac.PackageTests
  5. Update the README table and docs/release-notes/.

Releasing

Push a tag v<version>, e.g. v3.14.0.1. The release workflow builds the xcframeworks, packs, validates, publishes to nuget.org via trusted publishing, and creates a GitHub release; a curated docs/release-notes/<version>.md replaces the generated commit list when present. Pull requests publish -beta.<pr>.<run> prereleases the same way.

Licence

The binding code in this repository is MIT. The native binaries the packages embed are built from Datadog's Apache-2.0 sources (dd-sdk-ios, KSCrash, opentelemetry-swift); every package carries both texts under licenses/. Not an official Datadog product.

Product Compatible and additional computed target framework versions.
.NET net8.0-maccatalyst18.0 is compatible.  net9.0-maccatalyst was computed.  net9.0-maccatalyst18.0 is compatible.  net10.0-maccatalyst was computed.  net10.0-maccatalyst26.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on DatadogNet.WebViewTracking.Mac:

Package Downloads
DatadogNet.WebView

Bridges RUM events and logs out of an Android WebView or a WKWebView into the surrounding native Datadog session. For hybrid apps; separate from DatadogNet so an app without a web view does not carry it.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
3.14.0.4 66 7/28/2026
3.14.0.4-beta.9.13 28 7/30/2026
3.14.0.4-beta.8.11 27 7/30/2026
3.14.0.4-beta.7.10 29 7/29/2026
3.14.0.4-beta.5.7 30 7/28/2026
3.14.0.3 83 7/26/2026
3.14.0.3-beta.5.5 32 7/28/2026
3.14.0.3-beta.3.4 37 7/26/2026
3.14.0.2 107 7/24/2026
3.14.0.2-beta.2.3 40 7/24/2026
3.14.0.2-beta.1.2 42 7/24/2026
3.14.0.1 92 7/23/2026

# 3.14.0.2

Binding-only release. The native SDK is unchanged — still
[dd-sdk-ios 3.14.0](https://github.com/DataDog/dd-sdk-ios/releases/tag/3.14.0), built from source
for Mac Catalyst — 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.

## dSYMs are no longer thrown away

The build always produced dSYMs and then lost them with the temporary directory — and for
Catalyst binaries that Datadog does not publish, they are the only symbolication data that will
ever exist. They now land in `libs/dsyms`, ride the CI cache with the frameworks, and every
release from this one on carries a `dsyms-<version>.zip` attachment. Upload it to Datadog to
symbolicate crash reports from apps on these packages.

## The fragile seams now fail loudly

- **The pbxproj patches assert they applied.** Building dd-sdk-ios for Catalyst requires patching
 `SUPPORTS_MACCATALYST` and the platform filters in an Xcode-generated project file. Each patch
 now verifies it changed something (or found the already-patched state) and fails naming the
 patch that missed — so an upstream project-file reformat breaks the *patch step* with a clear
 message instead of the *archive step* with "unable to resolve module dependency".
- **`DatadogOtelVersion` is checked, not trusted.** The second manually-maintained pin must match
 the OpenTelemetryApi version the checked-out dd-sdk-ios tag records in its `Cartfile.resolved`;
 a bump that forgets it now fails the build instead of silently building the wrong OTEL.
- **The verbatim-copy invariant is enforced.** The binding sources are copies of
 DatadogNet.iOS's; the sync script now records the exact iOS commit it copied from
 (`build/ios-bindings-source.txt`), and CI's `binding-drift` job re-runs the sync against that
 commit and fails on any difference — a direct edit here, or a forgotten re-sync, is a red
 build rather than a latent iOS/Catalyst behaviour split.

## Synced binding improvements

Re-synced from DatadogNet.iOS (see its `3.14.0.3` notes for the detail): doc summaries on the
main entry types reach IntelliSense here too, the `DDLogger` null-attributes behaviour is
documented as deliberate — a `[NullAllowed]` would trade a managed exception for a native crash —
and the trim/AOT analyzers are on with the surface analysing clean.

## Smaller improvements

- **nuget.org now shows these notes**: `docs/release-notes/<version>.md` is packed into
 `PackageReleaseNotes`, with the releases page as fallback.
- CI fails when the README's versions drift from `Directory.Build.props`.
- The tooling copied from DatadogNet.iOS (`merge-packages.py`, the `select-xcode` action,
 `BuildNugets.sh`) no longer carries that repository's comments verbatim: each file now says
 what is true *here* and marks itself as a keep-in-sync copy.

## net8 sunset

Stated policy, so the decision does not persist by inertia: the `net8.0-maccatalyst18.0` head is
dropped in the first release after .NET 8 leaves support on **10 November 2026**, in step with
DatadogNet.iOS.

## Upgrading from 3.14.0.1

Nothing to change: same native SDK, same API.