3.14.0.4
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: round two of
the ergonomics review, aimed this time at the packaging metadata, the supply chain around the
native archive, and the release machinery.
Descriptions no longer point at an empty package
Since 3.14.0.1 the RUM, Logs and Trace descriptions ended "The managed DD* API lives in
DatadogNet.Objc.iOS; this package ships the native feature" — carried over from 2.x, where the
DatadogObjc framework really did hold every DD* type, and wrong ever since 3.0 deleted it: each
package binds its own surface (RUM's ApiDefinitions.cs alone is 7,400 lines), and
DatadogNet.Objc.iOS is a dependency-only meta-package with no assembly at all. A reader on
nuget.org following that sentence installed an empty package. The descriptions now say where the
API actually is, the stale rationale comment in src/Datadog.Binding.props is rewritten to match
reality, and the package tests reject any description that makes the old claim again.
The packed README's links now work on nuget.org
The same README.md ships in every package and is rendered on each package's nuget.org page — where
its eleven repo-relative links (the sample, build/checksums.txt, the regeneration guide, the
Flags shim, the licence and friends) resolved against nuget.org and rendered as dead text. Every
repository link is absolute now; in-page anchors stay as they are, since those work everywhere the
file renders.
Checksums: trust-on-first-use replaced by GitHub's own digests
build/checksums.txt is the trust anchor for the ~200 MB native archive, but its pins were
recorded by downloading the archive and writing down whatever hash arrived — so a tampered first
download would have minted the poisoned hash as the truth. The new build/UpdateChecksums.sh
records the digest the GitHub releases API reports for the asset, computed by GitHub at upload
time, and requires a fresh download to hash to the same value before anything is written.
FetchXcFrameworks.sh additionally cross-checks the pin against the live digest before
downloading and hard-fails on a disagreement; when the API is unreachable — offline,
rate-limited — the pinned hash still guards the download, so no build grows a network dependency
it did not have. Run against 3.14.0, the published digest equals the pin recorded under the old
flow: a retroactive check the old flow could not offer.
Package validation against the published baseline
CI now holds every packed package's API to the last published release — this one's baseline is
3.14.0.3 — so an accidental API break, most plausibly a regenerated binding quietly dropping a
member, fails in CI instead of surfacing in a consumer's compiler. It runs as
build/ValidatePackageApi.sh on the merged artifacts rather than at pack time: each band's pack
pass produces an intermediate that legitimately lacks the other band's frameworks, and only the
finished package carries the framework set the baseline has. The baseline downloads from
nuget.org, so the check is CI's and an explicit local invocation's, never part of an offline
pack.
Release machinery
- A release tag must agree with
Directory.Build.props. The tag alone drives which native
line is bound, so a mistyped tag would have published packages whose version does not describe
their contents. The workflow now fails before building when the tag's native prefix or binding
revision disagrees with the props; releasing a different line on purpose remains possible
through a documented repository variable. - Upstream releases are watched. A weekly workflow compares
DatadogNativeVersionagainst
the latest dd-sdk-ios release and opens one issue — idempotently — when upstream is ahead,
linking the release and the upgrade ritual. build/BumpNativeVersion.shstarts a native upgrade in one command: props, digest-anchored
checksum pin, README badge/prose/snippets, the validation baseline, and a scaffolded
release-notes file, finishing with a self-check. The README's upgrade guide now leads with it —
and putsDiffSwiftHeaders.shbeforeFetchXcFrameworks.sh, since the previous step order
would have diffed the new release against itself.build/CheckReadmeVersions.shnow also verifies the dd-sdk-ios badge and the "Built
against" prose — the two hardcoded spots the upgrade guide used to shrug about ("nothing
else will notice when it goes stale"). Something notices.GenerateBindings.sh's usage example no longer names DatadogObjc, a framework deleted
upstream in 3.0.
Upgrading from 3.14.0.3
-<PackageReference Include="DatadogNet.RUM.iOS" Version="3.14.0.3" />
+<PackageReference Include="DatadogNet.RUM.iOS" Version="3.14.0.4" />Nothing to change beyond the version: same native SDK, same API, same package set, and the native
xcframeworks are byte-for-byte the same build. All packages move together, as they depend on each
other at an exact version. The corrected descriptions and working README links appear on
nuget.org with this version.
Full changelog: v3.14.0.3...v3.14.0.4
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.4are 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.4 |
DatadogNet.RUM.iOS |
DatadogRUM |
3.14.0.4 |
DatadogNet.Logs.iOS |
DatadogLogs |
3.14.0.4 |
DatadogNet.Trace.iOS |
DatadogTrace |
3.14.0.4 |
DatadogNet.SessionReplay.iOS |
DatadogSessionReplay |
3.14.0.4 |
DatadogNet.WebViewTracking.iOS |
DatadogWebViewTracking |
3.14.0.4 |
DatadogNet.CrashReporting.iOS |
DatadogCrashReporting |
3.14.0.4 |
DatadogNet.Flags.iOS |
DatadogFlags |
3.14.0.4 |
DatadogNet.Profiling.iOS |
DatadogProfiling |
3.14.0.4 |
DatadogNet.Internal.iOS |
DatadogInternal |
3.14.0.4 |
DatadogNet.OpenTelemetryApi.iOS |
OpenTelemetryApi |
3.14.0.4 |
DatadogNet.Objc.iOS |
(compatibility meta-package) |
3.14.0.4 |
dotnet add package DatadogNet.Core.iOS --version 3.14.0.4
dotnet add package DatadogNet.RUM.iOS --version 3.14.0.4
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/.