Skip to content

3.14.0.4

Choose a tag to compare

@github-actions github-actions released this 26 Jul 20:03
7767401

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 DatadogNativeVersion against
    the latest dd-sdk-ios release and opens one issue — idempotently — when upstream is ahead,
    linking the release and the upgrade ritual.
  • build/BumpNativeVersion.sh starts 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 puts DiffSwiftHeaders.sh before FetchXcFrameworks.sh, since the previous step order
    would have diffed the new release against itself.
  • build/CheckReadmeVersions.sh now 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.4 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.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/.