Repository navigation
Important
Continuous Profiling for iOS is now generally available and is no longer offered free of charge. Billing applies to Continuous Profiling usage, including on earlier SDK versions.
See the documentation for setup and sampling configuration.
What's Changed
Features
- Flags: Add retained first-flags client events with per-registration cancellation. See #3269
- Add experimental client-side APM stats, enabled with
Trace.Configuration.featureFlags[.clientSideStats], or withclient_side_statsinDDTraceConfiguration.featureFlagsfrom Objective-C. The SDK aggregates request counts, error counts and latency distributions on-device from eligible finished spans, independently of trace upload sampling. Disabled by default. See #3301
Fixes
- Stop attributing crashes to a RUM session stopped with
stopSession(). Before, with background events tracking enabled, a crash in the background after the stop was reported into the stopped session. See #3321 - Stop reporting slow frames and slow rendering for RUM views on macOS and watchOS, where rendering is not measured yet. See #3319
- Prevent crashes when recording certain SwiftUI views with Session Replay's
compositionTreeRecordingfeature on iOS 17 and earlier. See #3330 - Start the
DatadogFlagsassignments request without waiting for the initial cache read, and report successful assignments before cache persistence. See #3078 - NSPrivacyAccessedAPICategoryFileTimestamp added to DatadogCore's privacy manifest as required. See #3339
- Attribute a TTFD vital reported before the TTID is written to the view and connectivity active when
reportAppFullyDisplayed()was called, instead of the TTID's view. See #3317. (Thanks @thedavidharris) - Fix profile sample timestamps after device sleep and stop attaching app hangs and long tasks that the profile did not sample. See #3342
Improvements
- Track RUM events and crashes on macOS when no view is active, for example after the last window closes or in a menu bar app. See #3351
- Add support for
unrealsource for cross-platform RUM events from Unreal Engine applications. See #3353 - Overlapping
FlagsClient.setEvaluationContextcalls no longer let an earlier result replace assignments for a newer context. Earlier calls still complete, and listeners skip state notifications superseded before delivery. Fetch-result completions run on a global utility queue. See #3078 - Keep capturing HTTP headers that fit after one exceeds the 2 KB limit. See #3332
- Reduce image resource sizes with WebP encoding and speed up image hashing in Session Replay's experimental composition tree recorder. See #3336
Full Changelog: 3.20.0...3.21.0