Skip to content

chore(deps): update Cocoa SDK to v9.30.0 - #555

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
deps/modules/sentry-cocoa.properties/9.30.0
Open

github-actions[bot] wants to merge 1 commit into
mainfrom
deps/modules/sentry-cocoa.properties/9.30.0

Conversation

@github-actions

@github-actions github-actions Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

Bumps modules/sentry-cocoa.properties from 9.2.0 to 9.30.0.

Auto-generated by a dependency updater.

Changelog

9.30.0

Features

  • Update option stability without changing defaults (#9134, #9175):
    • enableUnhandledCPPExceptionsV2 remains non-deprecated under options.experimental in v9, disabled by default, with dictionary-based initialization support.
    • enablePersistingTracesWhenCrashing is now stable and remains disabled by default.
    • attachViewHierarchy is now stable and remains disabled by default.
    • enableTimeToFullDisplayTracing is now stable and remains disabled by default because applications must explicitly call SentrySDK.reportFullyDisplayed().
    • swiftAsyncStacktraces is now stable and remains disabled by default.
    • enableGraphQLOperationTracking is now stable and remains disabled by default.
    • enableFileManagerSwizzling is now stable, remains disabled by default, and supports dictionary-based initialization.
  • Add connection_type to the device context of events, which reports wifi, ethernet, cellular, or none (#9097).
    On iOS, cellular connections additionally report the network technology in connection_effective_type, for example 4g or 5g.

Fixes

  • Keep standalone objc extensions in static builds by adding referenced dummy NSObject subclasses, and lint for this with a SwiftSyntax SwiftLint extra rule (#9160)
  • Send envelopes captured during a connectivity-triggered cache drain without waiting for another trigger (#9171)
  • Session Replay: Fix queue requirements during crash recovery (#9158)
  • Preserve full resolution when masking feedback, error, and crash screenshots, including screenshots captured through the React Native bridge, without changing Session Replay resolution or redactions (#9179)
  • Compact raw MetricKit diagnostic attachments to reduce their upload size and attachment quota usage (#9183)

9.29.2

Fixes

  • Stop sending scope attachments with crashes and other fatal events captured from a previous app run, because those attachments belong to the current run. Use beforeSendWithHint to attach files to fatal events (#9153)
  • Prevent an isMetricKitEvent unrecognized selector crash when statically linking the SDK without -ObjC, including when MetricKit is disabled (#9155)

9.29.1

Caution

Known issue: This release can crash apps statically linking the SDK without -ObjC with -[SentryEvent isMetricKitEvent]: unrecognized selector, even when MetricKit is disabled. Add -ObjC to the app target's linker flags, preserving $(inherited), or pin to 9.29.0 until a fix is released. See #9154.

Fixes

  • Add experimental support for the new URLSession HTTP loader for automatic network instrumentation, preserving original request details in Session Replay after redirects. Opt in with options.experimental.enableNewURLLoaderSwizzling = true (disabled by default) (#8845)
  • Preserve MetricKit diagnostics containing frames without a binary UUID instead of dropping the entire diagnostic (#9080)
  • Session Replay: Populate trace_ids in replay events to enable searching replays by trace ID (#9092)
  • Retain raw MetricKit diagnostic attachments when call-stack decoding fails and enableMetricKitRawPayload is enabled, without attaching unrelated current-thread stack traces (#9070)
  • Prevent duplicate HTTP spans and breadcrumbs when watchOS resumes an internal URLSession task copy after the original request finishes (#9095)
  • Remove the compiler deprecation warning for enableAppHangTracking so applications can continue opting out of App Hang tracking until its removal in v10 (#9094)
  • Reset appHangTimeoutInterval values of 0 or lower to the default of 2 seconds, which previously spun the app hang tracker thread in a busy loop (#9020)
  • Release App Hang tracking listener wrappers when listeners are removed (#9127)

9.29.0

Warning

Native crashes now set mechanism.synthetic, which takes the mach exception name (EXC_BAD_ACCESS) or signal name (SIGSEGV) out of the grouping hash. Expect a one-time regrouping as your app adopts this version: existing crash issues stop receiving events and new ones open. Crashes that differ only by signal at the same stacktrace now share one issue. The mach and signal detail stays on mechanism.meta.

Fixes

  • Store the binary image cache in zero-fill memory to reduce the SDK binary size. (#9003)
  • Fix crash in [NSURLSessionTask cancel] when cancelling an in-flight task with swizzling enabled (#9009)
  • Clear the scope's replayId when Session Replay is stopped manually, so events captured after stop() are no longer linked to a replay that is no longer recording (#9017)
  • Mark the fabricated mach and signal crash mechanisms as synthetic so an Apple crash groups with the identical crash reported by the other Sentry SDKs (#9004)
  • Set mechanism.handled to false on crash reports without mach context, which previously left it unset (#9004)
  • Sample and flush Session Replay when the feedback form opens or feedback is captured manually, preserving the form's opening-time replay association even if the session changes before submission (#9046)

Deprecations

  • Deprecate legacy App Hang tracking because it can produce less relevant stack traces and false positives. Enable the MetricKit integration for system-provided hang diagnostics by setting options.enableMetricKit = true. The appHangTimeoutInterval option remains supported for watchdog termination classification. (#8944)

9.28.0

Features

  • Add a device.event breadcrumb (SYSTEM_CLOCK_CHANGE) when the system clock changes, for example due to a manual time change or NTP sync (#8946)

  • Add Hints API with beforeSendWithHint and beforeBreadcrumbWithHint callbacks (#8942)

    Use hints to inspect the original source material that produced an event or breadcrumb, and to
    add or remove attachments before they are sent:

    SentrySDK.start { options in
        options.beforeSendWithHint = { event, hint in
            if let error = hint.originalError as? NSError,
               error.domain == NSURLErrorDomain {
                return nil // drop network errors
            }
            return event
        }
        options.beforeBreadcrumbWithHint = { breadcrumb, hint in
            if hint.urlRequest?.url?.host == "internal.example.com" {
                return nil // redact internal traffic
            }
            return breadcrumb
        }
    }
  • Add hint parameter to public capture methods on SentrySDK (#8955)

    Pass a Hint when capturing events or errors to attach metadata that beforeSendWithHint
    can inspect:

    let hint = Hint()
    hint.setHintValue("checkout", forKey: "flow")
    SentrySDK.capture(error: error, hint: hint)
  • Auto-populate HTTP request and response on hints for network breadcrumbs and HTTP client errors (#8967)

    Network breadcrumbs and HTTP client error events now include the originating URLRequest and
    HTTPURLResponse on the hint, so callbacks can inspect status codes, headers, or URLs:

    options.beforeBreadcrumbWithHint = { breadcrumb, hint in
        if let statusCode = hint.httpResponse?.statusCode,
           statusCode == 401 {
            breadcrumb.level = .warning
        }
        return breadcrumb
    }
  • Include screenshot and view hierarchy attachments in hint.attachments before beforeSendWithHint runs (#8989)

    Screenshot and view hierarchy attachments are now available in hint.attachments when
    beforeSendWithHint is called, so they can be inspected or removed:

    options.beforeSendWithHint = { event, hint in
        hint.attachments = hint.attachments.filter { $0.filename != "screenshot.png" }
        return event
    }

Fixes

  • Prevent relevant view controller traversal from recursively loading parent views and invoking viewDidLoad twice when tracing is enabled. (#8941)
  • Classify MetricKit hangs over 500 ms as errors. (#8948)
  • Prevent Session Replay video encoding from reusing pixel buffers retained by AVFoundation. (#8950)
  • Prevent deadlock when a signal interrupts memory allocation by avoiding thread-local storage and unsafe formatting during signal handling. (#8271)
  • Remove invalid DWARF references from SentryObjC-Static XCFrameworks to prevent dsymutil missing-object warnings. (#8979)

Internal

  • Fix SentrySDK.internal.replay.replayId returning nil for buffered replays (#8976)

9.27.0

Note

enableLogs and enableMetrics are now deprecated and will be removed in the next major version. Manual log and metric capture is no longer gated by these flags.

Improvements

  • Install idle Session Replay recovery infrastructure at zero sample rates. (#8865)
  • Manual log and metrics APIs are no longer gated by behind enableLogs / enableMetrics (#8918)

Features

  • Add manual Session Replay controls through SentrySDK.replay. (#8868)
    • Explicit start() and startBuffering() calls bypass the configured replay sample rates; sampling still controls automatic startup.
    • start() starts a full-session replay and does nothing if one is already recording.
    • startBuffering() keeps a rolling buffer that is sent on flush() or an error, then continues in session mode.
    • stop() ends the current replay; the next start() creates a new replay session.
    • pause() suspends recording until resume() and remains paused across background and foreground transitions and automatic replay restarts in the same process.
    • resume() continues the same manually paused replay.
    • flush() sends the current replay data to Sentry, or starts a full-session replay when recording is stopped.
  • Copy app.vitals.start.type and app.vitals.start.screen onto standalone app.start children, including app.start.extended and user descendants (#8888)
  • Add maxFeatureFlags option to configure how many feature flag evaluations the scope retains, matching sentry-java. Defaults to 100 (#8858)
  • Log a warning when SentrySDK.start is called again without close(). Reinitialization still runs and remains unsupported (#8928)
  • Add SentrySDK.internal.envelope.captureNonTerminating for hybrid SDKs, which keeps the current session running and reports it with the unhandled status when an unhandled exception doesn't terminate the process (#8654)
  • Add SentrySDK.internal.envelope.updateSessionForDroppedEventNonTerminating so hybrid SDKs can update the native session when an error is dropped by sampling, without sending an envelope (#8907)
  • Expose continuous profiling configuration on SentryObjCOptions via configureProfiling and SentryObjCProfileOptions (#8937)

Fixes

  • Silence spurious ERROR log in SentryCrashCxaThrowSwapper for empty sections (#8915)
  • Stop recording touch events while Session Replay is paused. (#8887)
  • Synchronize access to the current trace profiler in debug and test builds. (#8936)

Internal

  • Add visionOS support to internal screen APIs (#8913)

9.26.1

Fixes

  • Prevent duplicate automatic HTTP spans and breadcrumbs for URLSession task wrappers (#8846)
  • Prevent breadcrumb persistence for watchdog termination events from blocking the calling thread (#8653)
  • Fix data races when reading and updating network tracker feature flags (#8832)
  • Avoid lossy JPEG compression for user feedback screenshot fallbacks from non-previewable formats (#8876)

9.26.0

Warning

The 3rd-party integration packages (SentryCocoaLumberjack, SentryPulse, SentrySwiftLog, SentrySwiftyBeaver) now require Swift 6.1+ to support SPM package traits. Users on older Swift toolchains should pin to an earlier release of these packages.

Features

  • Promote enableStandaloneAppStartTracing from options.experimental to a top-level option on Options (#8715)
  • Add SentryFromBinary (default) and SentryFromSource SPM package traits to 3rd-party integrations, allowing users to choose between precompiled xcframeworks and building from source. Requires Swift 6.1+ (#8795)
  • Add experimental option enableUIViewControllerInitSwizzling that defers UIViewController swizzling to first instantiation instead of eagerly discovering and swizzling all subclasses at SDK start. This avoids realizing available-gated UIViewController subclasses on OS versions below their gate, which crashes apps on start (#8687).
  • Add screenshot picker to feedback (#8655)
    • Enable it with form.enableScreenshot = true in the configureForm callback.
  • Expose transaction as a public event type (#8745)

Improvements

  • Session Replay keeps captured frames in memory for live video encode while still writing PNGs to disk for crash durability. Encode prefers the in-memory image and only falls back to disk for frames recovered after a crash, avoiding a PNG readback on the streaming hot path. (#8636)
  • Remove the per-frame render loop from the Session Replay masking preview. (#8730)

Fixes

  • Fix misleading duplicate SDK detection message: "same binary" → "same address space" (#8710)
  • Fix a race caused by mutating URLSessionTask.currentRequest during trace header propagation (#8650)
  • Prevent Session Replay network-detail breadcrumbs from blocking URLSession cancellation on the task monitor (#8497)
  • Fix Session Replay adaptive capture backoff pinning at the maximum interval due to mask compositing being included in the measured capture duration, which could produce single-frame segments that appear stuck on one screen (#8740)

Internal

  • Add internal hybrid SDK APIs to serialize native events and retrieve scope contexts for .NET event processing (#8708)

9.25.0

Warning

This release raises the minimum deployment targets to macOS 12 and watchOS 9. Apps that support older OS versions must use an earlier Sentry Cocoa release.

Breaking Changes

  • Bump the minimum deployment targets to macOS 12 and watchOS 9 because Xcode 27 no longer supports earlier versions. This lets the SDK adopt Xcode 27 without blocking users from building and submitting their apps with the latest Xcode. (#8595, #8113, #8189)

Features

  • Add SentrySDK.feedback.enableOnShake() and disableOnShake() to toggle the shake-to-report gesture at runtime (#8591)

Fixes

  • Reduce memory usage when storing envelopes with large attachments (#8649)
  • Fix incorrect duration sent for active sessions (#8612)
    • Session duration is now set only when the session ends. Active sessions (including on error increments) no longer emit a bogus duration.
  • Fix a race that could prevent consecutive app hangs from being reported (#8627)
  • Fix malformed itms-services URL in SentryDistribution updater (#8567)
  • Fix off-main thread reads of -[UIApplication applicationState] (8672)

9.24.0

Important

Due to a potential risk of revealing PII or security-relevant data in crash events in specific circumstances, we're shipping this strictly speaking breaking change in a minor version.

Breaking Changes

  • Add enableMemoryIntrospection option to allow users to control memory introspection in crash reports, defaults to false (was previously true) (#8571)
    • You can re-enable this feature by setting the option enableMemoryIntrospection to true
    • When this option is disabled, string stack contents found near the crash site will not be included in the event sent to Sentry. These contents are displayed in the 'message' subtitle shown underneath the main issue title in Sentry.

Features

  • Add Breadcrumb.setData(value:key:) to set a single breadcrumb data entry and deprecate the Breadcrumb.data setter in its favor. (#8572)

Fixes

  • Fix screenshots not being captured by hybrid SDKs (#8578)
  • Fix trace propagation for manually instrumented transactions when automatic performance tracing is disabled (#8522)
  • Prevent a Session Replay crash (NSInvalidArgumentException / -[NSConcreteValue doubleValue]) when Core Animation raises while redacting the view hierarchy, e.g. during React Navigation transitions or video fullscreen presentation (#8537)
  • Remove x/y coordinates from UI breadcrumbs, as they are a potential security risk, for example leaking input on custom PIN code views (#8534)

9.23.0

Features

  • Record trace_metric_byte client reports (#8490)

Fixes

  • Add a depth limit to view hierarchy serialization to prevent a stack overflow crash on deeply nested view hierarchies (#8292)
  • Persist the configured environment in crash reports so later app launches don't overwrite it (#8511)
  • Only expose experimental.dataCollection APIs in SDK V10 (#8435)

Improvements

  • Reduce slight overhead during SDK start by skipping an unnecessary main thread dispatch when there's no work to do (#8494)

9.22.0

Features

  • Mark opt in option swiftAsyncStacktraces as stable (#8373)
  • Add dataCollection option under experimental for configuring data scrubbing behavior (#8369)
  • Add scope API to clear feature flags (#8364)
  • Add dictionary initialization for options.experimental.dataCollection (#8371)

Fixes

  • Session Replay now correctly reads the response Content-Type for HTTP/2 and HTTP/3, so it captures HTTP response bodies as it was supposed to (when body capturing is enabled via options.sessionReplay.networkCaptureBodies) (#8390)
  • Log the actual request error instead of (null) when a Spotlight request fails (#8401)
  • Decoding dictionary to Options sets value of key "dsn" to property dsn instead of nil (#8393)

Improvements

  • Remove enableReplayNetworkDetailsCapturing experimental flag; network detail capture is now enabled automatically when networkDetailAllowUrls is non-empty (#8396)

9.21.0

Fixes

  • Fix use-after-free race in span, startProfiler, and stopProfiler by snapshotting currentHub under currentHubLock before dereferencing. (#8318)
  • Add userInfo context for unhandled NSExceptions (#8332)

Features

  • Attach feature flag evaluations to active spans (#8158)
  • Add feature flag scope ObjC API (#8160)

9.20.0

Important

This release contains an important fix for dropping too much data when the SDK gets rate limited. (#8324) This fix changes how rate limits are handled. Previously, if one data type (for example, user feedback) was rate limited, other data such as spans or sessions could also be dropped. Now, only the rate-limited data is dropped, while all other data continues to be sent. This may also reduce cases where unexpectedly large amounts of data appear to be dropped due to rate limiting.

Fixes

  • Fix rate limiting all data categories when data category rate-limit is active. (#8324)
  • Fix EXC_BAD_ACCESS in SentryNetworkTracker caused by repeated reads of the volatile NSURLSessionTask.currentRequest property (#8058)

Features

  • Record log_byte client reports (#8186)
  • Add scope feature flag API (#8147)

9.19.1

Fixes

  • Fix use-after-free crash in SentrySDKInternal.isEnabled (#8310)
  • Fix dropped platform item header in profile-chunk envelopes (#8269)
  • Fix crash report ID generation so reports created at certain timestamps are not ignored (#8216)
  • Fix C++ exception capture on newer OS versions by page-aligning mprotect calls in the __cxa_throw swapper (#8221)
  • Fix client report discarded-event counts for categories reported in quantities greater than one (e.g. spans): each drop now adds the full dropped quantity instead of incrementing by one (#8230)
  • Rename extended app start span operation from app.start.extended_app_start to app.start.extended (#8220)
  • Fix unsynchronized debug-mode access in the binary image cache (#8309)

9.19.0

Warning

The minimum macOS deployment target will be raised to macOS 12 (Monterey) with the upcoming release that adopts Xcode 27. Xcode 27 no longer supports deployment targets below macOS 12. If your app must support macOS 11 or earlier, please stay on the last SDK version released before this change. See #8113 for full details.

Features

  • Renamed experimental extended app start API (#8161):
    • extendAppLaunch() -> extendAppStart()
    • finishExtendedAppLaunch() -> finishExtendedAppStart()
    • Added getExtendedAppStartSpan() to get the extended app span
  • Add extended app start APIs to ObjC wrapper SDK (#8163)

Improvements

  • Reduce Session Replay capture stutters by scheduling screenshots after run loop UI work instead of from display refresh callbacks (#7851)

Fixes

  • Don't send logs and metrics when the SDK is disabled (#8173)
  • Fixes crash caused by modifying breadcrumbs from multiple threads (#8114)
  • Prevent feedback form on external displays (#8071)
  • Keep the User Feedback screenshot trigger active after form dismissal. (#8048)
  • Prevent lazy TLS-init in the signal crash monitor for non-managed runtime builds (#8148)
  • Include breadcrumbs in recovered buffer-mode session replays (#8153)
  • Fix missing Info.plist entries MinimumOSVersion and CFBundleSupportedPlatforms in SentryObjC.xcframework (#8157)
  • Harden crash-time attachment path creation to avoid secondary crashes while handling crashes (#8170)
  • Session replay video assembly: drop empty video segments, avoid duplicating frames at segment boundaries, and keep video timing stable when captured frames are skipped or unreadable (#8041)

Internal

  • Add SentrySDK.internal structured API for hybrid SDKs, replacing PrivateSentrySDKOnly with namespaced sub-APIs (replay, profiling, appStart, performance, screenshot, viewHierarchy, screen, envelope, swizzle, sdk, debug, breadcrumbs, user) (#8097)

9.18.0

Features

  • Add SentryObjC User Feedback presentation APIs and a feedback form factory returning UIViewController instances. (#8027)

Fixes

  • Show feedback form from shake or screenshot without widget (#8050)

Deprecations

  • Deprecate the managed User Feedback custom button. It will be removed in v10. Present the feedback form from your own UI with SentrySDK.feedback.show(), SentrySDK.FeedbackForm, or .sentryFeedback(isPresented:) instead. (#8052)

9.17.1

Fixes

  • Ship dSYMs in SentryObjC-Dynamic.xcframework artifacts (#8036)
  • Fix missing _OBJC_CLASS_$_ symbols in x86_64 slice of SentryObjC dynamic framework (#8037)
  • Mark feedback form aliases and conformances unavailable in app extensions (#8040)
  • Silence retroactive conformance warning for SentryLevel: CustomStringConvertible when building with SPM from source (#8032)

9.17.0

Features

  • Support creating envelope items from attachments via SentryObjC (#8001)

  • Add format-string logging to SentryObjCLogger with automatic message template extraction (#7996)

    [SentryObjCSDK.logger infoWithFormat:"User % processed %d items", userName, count];
  • Add managed user feedback form presentation APIs (#7873)

    Apps using the managed User Feedback integration can now present the form directly:

    • Use SentrySDK.feedback.show() to let the SDK pick the best presenter.
    • In UIKit, present the SentrySDK.FeedbackForm() view controller yourself.
    • In SwiftUI, use .sentryFeedback(isPresented:), or present SentrySDK.FeedbackFormView() from a container such as .sheet.

    These APIs use the global SentryOptions.configureUserFeedback configuration and temporarily hide the managed widget
    while the form is open, when possible.

  • Add per-form feedback configuration (#8018)

    Managed feedback presentation APIs now accept a configuration closure, so apps can customize a single
    form on top of the global SentryOptions.configureUserFeedback settings without mutating them:

    SentrySDK.feedback.show { config in
        config.configureForm = { form in
            form.formTitle = "Report a Bug"
            form.submitButtonLabel = "Send Report"
        }
        config.tags = ["screen": "settings"]
    }
  • Standalone app start sub-spans operations have been renamed for better clarity (#8003):

    • Pre Runtime Init: app.start -> app.start.pre_runtime_init
    • Runtime Init to Pre Main Initializers: app.start -> app.start.runtime_init
    • UIKit Init: app.start -> app.start.uikit_init
    • Application Init: app.start -> app.start.application_init
    • Extended App Start: app.start -> app.start.extended_app_start

Deprecations

  • Deprecate the managed User Feedback widget/FAB. It will be removed in v10. Present the feedback form from your own UI with SentrySDK.feedback.show(), SentrySDK.FeedbackForm, or .sentryFeedback(isPresented:) instead. (#8022)

Fixes

  • App start duration on the Vitals dashboard now reflects the extended app launch time when using extendAppLaunch() (#8028)

9.16.1

Note

No documented changes. This is the same as 9.16.0, re-released to fix the SentryObjC-Static SPM checksum.

Important

The new SentryObjC SDK introduced in this release should be considered experimental and may be subject to breaking changes.

Features

  • Add SentryObjC wrapper SDK — a pure Objective-C interface for projects that cannot enable Clang modules (e.g., ObjC++ with -fmodules=NO). (#7918)

    Ships as a compile-from-source SPM product SentryObjC, a static pre-compiled framework SentryObjC-Static.xcframework.zip and a dynamic pre-compiled framework SentryObjC-Dynamic.xcframework.zip.

    Steps to migrate:

    • Replace your dependency on the target Sentry or SentrySPM with SentryObjC (or SentryObjC-Static / SentryObjC-Dynamic if you want to use the precompiled binary targets).
    • Change #import <Sentry/Sentry.h> to #import <SentryObjC/SentryObjC.h>
    • Rename Sentry-prefixed types to SentryObjC (e.g., SentrySDK → SentryObjCSDK, SentryOptions → SentryObjCOptions).
  • SentrySDK.extendAppLaunch() now returns the extended app launch span, allowing users to add child spans for granular breakdown of the app start period (#7985)

Fixes

  • Fix crash in SentryFramesTracker.add/removeListener when called from a listener's own init / deinit on a background thread, observed on iOS 26 (#7943)
  • Report only cold or warm as start_type for standalone app starts, removing the .prewarmed suffix per sentry-conventions (#7968)
  • Fix reporting arbitrary Objective-C object throws via the C++ exception monitor (#7984)

9.16.0

Warning

The SentryObjC-Static SPM binary target in this release has an incorrect checksum and resolving dependencies might fail, but the release artifacts are not affected.

Important

The new SentryObjC SDK introduced in this release should be considered experimental and may be subject to breaking changes.

Features

  • Add SentryObjC wrapper SDK — a pure Objective-C interface for projects that cannot enable Clang modules (e.g., ObjC++ with -fmodules=NO). (#7918)

    Ships as a compile-from-source SPM product SentryObjC, a static pre-compiled framework SentryObjC-Static.xcframework.zip and a dynamic pre-compiled framework SentryObjC-Dynamic.xcframework.zip.

    Steps to migrate:

    • Replace your dependency on the target Sentry or SentrySPM with SentryObjC (or SentryObjC-Static / SentryObjC-Dynamic if you want to use the precompiled binary targets).
    • Change #import <Sentry/Sentry.h> to #import <SentryObjC/SentryObjC.h>
    • Rename Sentry-prefixed types to SentryObjC (e.g., SentrySDK → SentryObjCSDK, SentryOptions → SentryObjCOptions).
  • SentrySDK.extendAppLaunch() now returns the extended app launch span, allowing users to add child spans for granular breakdown of the app start period (#7985)

Fixes

  • Fix crash in SentryFramesTracker.add/removeListener when called from a listener's own init / deinit on a background thread, observed on iOS 26 (#7943)
  • Report only cold or warm as start_type for standalone app starts, removing the .prewarmed suffix per sentry-conventions (#7968)
  • Fix reporting arbitrary Objective-C object throws via the C++ exception monitor (#7984)

9.16.0-alpha.3

Important

The new SentryObjC SDK introduced in this release should be considered experimental and may be subject to breaking changes.

Features

  • Add SentryObjC wrapper SDK — a pure Objective-C interface for projects that cannot enable Clang modules (e.g., ObjC++ with -fmodules=NO). (#7918)

    Ships as a compile-from-source SPM product SentryObjC, a static pre-compiled framework SentryObjC-Static.xcframework.zip and a dynamic pre-compiled framework SentryObjC-Dynamic.xcframework.zip.

    Steps to migrate:

    • Replace your dependency on the target Sentry or SentrySPM with SentryObjC (or SentryObjC-Static / SentryObjC-Dynamic if you want to use the precompiled binary targets).
    • Change #import <Sentry/Sentry.h> to #import <SentryObjC/SentryObjC.h>
    • Rename Sentry-prefixed types to SentryObjC (e.g., SentrySDK → SentryObjCSDK, SentryOptions → SentryObjCOptions).

Fixes

  • Fix crash in SentryFramesTracker.add/removeListener when called from a listener's own init / deinit on a background thread, observed on iOS 26 (#7943)
  • Report only cold or warm as start_type for standalone app starts, removing the .prewarmed suffix per sentry-conventions (#7968)
  • Fix reporting arbitrary Objective-C object throws via the C++ exception monitor (#7984)

9.16.0-alpha.2

Important

The new SentryObjC SDK introduced in this release should be considered experimental and may be subject to breaking changes.

Features

  • Add SentryObjC wrapper SDK — a pure Objective-C interface for projects that cannot enable Clang modules (e.g., ObjC++ with -fmodules=NO). Ships as SentryObjC-Dynamic.xcframework.zip and as a compile-from-source SPM product. (#7918)
    Steps to migrate:
    • Replace your dependency on Sentry with SentryObjC (SPM product or xcframework)
    • Change #import <Sentry/Sentry.h> to #import <SentryObjC/SentryObjC.h>
    • Rename Sentry-prefixed types to SentryObjC (e.g., SentrySDK → SentryObjCSDK, SentryOptions → SentryObjCOptions).

Fixes

  • Fix crash in SentryFramesTracker.add/removeListener when called from a listener's own init / deinit on a background thread, observed on iOS 26 (#7943)
  • Report only cold or warm as start_type for standalone app starts, removing the .prewarmed suffix per sentry-conventions (#7968)

9.16.0-alpha.1

Important

The new SentryObjC SDK introduced in this release should be considered experimental and may be subject to breaking changes.

Features

  • Add SentryObjC wrapper SDK — a pure Objective-C interface for projects that cannot enable Clang modules (e.g., ObjC++ with -fmodules=NO). Ships as SentryObjC-Dynamic.xcframework.zip and as a compile-from-source SPM product. (#7918)
    Steps to migrate:
    • Replace your dependency on Sentry with SentryObjC (SPM product or xcframework)
    • Change #import <Sentry/Sentry.h> to #import <SentryObjC/SentryObjC.h>
    • Rename Sentry-prefixed types to SentryObjC (e.g., SentrySDK → SentryObjCSDK, SentryOptions → SentryObjCOptions).

Fixes

  • Fix crash in SentryFramesTracker.add/removeListener when called from a listener's own init / deinit on a background thread, observed on iOS 26 (#7943)

9.15.0

Features

  • Add SentrySDK.extendAppLaunch() and SentrySDK.finishExtendedAppLaunch() to extend standalone app start spans beyond the default end point (e.g. include initial data loading). Call extendAppLaunch() after SentrySDK.start(options:) and before the app start transaction is created, then call finishExtendedAppLaunch() when your app is fully ready. Requires options.experimental.enableStandaloneAppStartTracing = true. (#7936)
  • Skip max app start duration limit for standalone app start tracing (#7949)

Fixes

  • Fix UIViewController transactions lost during launch profiling (#7920)

9.14.0

Features

  • Add standalone app start tracing as an experimental option (#7660), enable it via options.experimental.enableStandaloneAppStartTracing = true

Fixes

  • Defer Session Replay startup until a foreground window is available (#7928)
  • Fix race conditions in scope observer iteration and propagation context locking (#7897)
  • Support stack traces for standalone clients (#7817)
  • Prevent SessionTracker crash with profiling (#7927)
    • Reevaluation of sampling decision is only done for new sessions.
  • Call SentrySessionListener on main thread (#7917)

9.13.0

Fixes

  • Fix crash with AVAssetDownloadTask in urlSessionTask:setState: (#7891)
  • Prevent crash-loop from malformed recrash reports (#7892)

Features

  • Prevent memory strings in stack overflow crash reports (#7841)
  • Add Set conformance to SentryAttributeValue (#7876)

9.12.1

Warning

⚠️ Known Issue: Sentry Cocoa 9.12.0+ crashes apps using AVAssetDownloadURLSession (#7886). Fixed in 9.13.0.

Fixes

  • Prevent memory strings in stack overflow crash reports (#7841)
  • Report crashed thread for null function calls (#7866)
  • Add depth limits to data sanitization and JSON encoder (#7857)
  • Moved BinaryImageCache initialization to a background thread to reduce blocking on dyld reader locks on the main thread (#7823)
  • Init vars before task_threads and vm_deallocate (#7858)
  • Handle extra length call in SentryInvalidJSONString (#7859)

9.12.0

Warning

⚠️ Known Issue: Sentry Cocoa 9.12.0+ crashes apps using AVAssetDownloadURLSession (#7886). Fixed in 9.13.0.

Warning

This release promotes Metrics out of experimental and removes options.experimental.enableMetrics and options.experimental.beforeSendMetric. If you set either of these, your app will fail to compile after upgrading.
Migrate to options.enableMetrics and options.beforeSendMetric (top-level on Options) — the defaults and behavior are unchanged.

Warning

Session Replay now runs on iOS 26 with Liquid Glass. Previously, the SDK auto-disabled Session Replay on iOS 26 builds that adopted Liquid Glass (built with Xcode 26+ and UIDesignRequiresCompatibility not set). Now that the underlying redaction issues have been addressed, replays will be captured in those environments — verify your masking still meets your privacy requirements.
If you want to keep Session Replay disabled on Liquid Glass builds, you will need to gate the sample rates yourself. For reference, see how the SDK used to perform the check: https://github.com/getsentry/sentry-cocoa/blob/adef457c1344e5efda4b74a1f33913d4d49ef7e0/Sources/Swift/Integrations/SessionReplay/SentrySessionReplayEnvironmentChecker.swift

Example — disable Session Replay when Liquid Glass is active:

import Sentry

SentrySDK.start { options in
    options.dsn = "___PUBLIC_DSN___"

    var sessionRate: Float = 0.2
    var errorRate: Float = 1.0

    if #available(iOS 26.0, *) {
        let compatibilityMode = Bundle.main.object(forInfoDictionaryKey: "UIDesignRequiresCompatibility") as? Bool ?? false
        let xcodeVersion = Int(Bundle.main.object(forInfoDictionaryKey: "DTXcode") as? String ?? "") ?? 0
        let builtWithXcode26OrLater = xcodeVersion >= 2600
        let liquidGlassActive = builtWithXcode26OrLater && !compatibilityMode
        if liquidGlassActive {
            sessionRate = 0
            errorRate = 0
        }
    }

    options.sessionReplay.sessionSampleRate = sessionRate
    options.sessionReplay.onErrorSampleRate = errorRate
}

Improvements

  • Remove enableSessionReplayInUnreliableEnvironment experimental option and the environment checker that temporarily disabled Session Replay on iOS 26 (#7831)

Features

  • Make feature Metrics generally available, moving experimental options to top-level options (#7843)
  • Add Session Replay network details capture, including request/response headers and bodies extraction (#7580, #7582, #7584, #7585, #7588, #7590, #7854)
    • Find more details here.

Fixes

  • Fix infinite loop in sentrycrashfu_readBytesFromFD when read() returns EOF on a truncated file (#7853)
  • Disable app hang and watchdog termination tracking in Notification Service Extensions (#7818)
  • Fix JSON encoding of infinite numeric values in crash reports (#7802)
  • Fix race condition in SentryFramesTracker listeners causing EXC_BAD_ACCESS in NSConcreteHashTable removeItem: when a listener is deallocated on a background thread (#7839)

9.11.0

Features

  • Track low power mode in device context (#7777)

Fixes

  • Added Packageswift-6.2.swift to avoid issues with unsafe build flags on SPM > 6.2 (#7778)
  • Detect development builds via provisioning profile and debugger attachment (#7702)
  • Keep replayType as buffer for Session Replay triggered by an error (#7804)
  • Fix race condition in scope observer notifications causing EXC_BAD_ACCESS during cold launch (#7807)
  • Unsubscribe to system event during background to avoid reporting breadcrumbs with wrong timestamps on return to foreground (#7702)
  • Fix SwiftUI's images and text redaction in iOS 26 (#7781)
  • Add foreground state to app context in app hang events (#7801)

9.10.0

Features

  • Prevent cross-organization trace continuation (#7705)
    • By default, the SDK now extracts the organization ID from the DSN (e.g. o123.ingest.sentry.io) and compares it with the sentry-org_id value in incoming baggage headers. When the two differ, the SDK starts a fresh trace instead of continuing the foreign one. This guards against accidentally linking traces across organizations.
    • New option strictTraceContinuation (default false): when enabled, both the SDK's org ID and the incoming baggage org ID must be present and match for a trace to be continued. Traces with a missing org ID on either side are rejected.
    • New option orgId: allows explicitly setting the organization ID for self-hosted and Relay setups where it cannot be extracted from the DSN.

Fixes

  • Scope clipOut masking to active clip bounds (#7780)
  • Fix AOT interop with managed .NET runtimes (#6193)

9.9.0

Features

  • Add attachAllThreads option to SentryOptions to attach full stack traces for all threads to captured events (#7764)
  • Add per-call attachAllThreads parameter to capture(event:), capture(error:), capture(exception:), and capture(message:) to override the global option for specific calls (#7767)

Improvements

  • Align app lifecycle breadcrumb state values with in_foreground/is_active app context (#7703)
    • Breaking: Update any beforeBreadcrumb filters or dashboard queries matching on the old state values:
      • iOS/tvOS/visionOS
        • didBecomeActive state changed from foreground to active
      • macOS
        • didBecomeActive state changed from foreground to active
        • willResignActive state changed from background to inactive

Fixes

  • Copy incoming tags dict to prevent crash (#7763)
  • Per-instance unmaskView propagates to child views (#7733)
    • Warning: If you relied on children of an unmasked view still being individually redacted, verify your Session Replay redaction after updating. An explicit maskView(_:) on a descendant still takes precedence.
  • Move SessionTracker file I/O off the main thread (#7704)

9.8.0

Features

  • Add SentrySDK.lastRunStatus to distinguish unknown, no-crash and crash (#7469)

Fixes

  • Make SentryBreadcrumb thread-safe to prevent crashes in addBreadcrumb (#7665)

9.7.0

Features

  • Show feedback form on device shake (#7579)
    • Enable via config.useShakeGesture = true in SentryUserFeedbackConfiguration
    • Uses UIKit's built-in shake detection — no special permissions required
  • Add package traits for UI framework opt-out (#7578).
    When building from source with Swift 6.1+ (using Packageswift-6.1.swift), you can enable the NoUIFramework trait to avoid linking UIKit or AppKit. Use this for command-line tools, headless server contexts, or other environments where UI frameworks are unavailable.
    In Xcode 26.4 and later, add the Sentry package as a dependency and the SentrySPM product, then enable the NoUIFramework trait on the package reference (Package Dependencies → select Sentry → Traits).
  • Metric kit app hangs now report a full flamegraph rather than just one stacktrace during the hang. (#7185)

Fixes

  • Capture transactions that finish during the launch profiling window instead of silently discarding them (#7602)
  • Capture instance and class method [NSApplication _crashOnException] exceptions (#7510)

9.6.0

Features

  • Add watchdog termination hang tracker using RunLoop observer. Can be enabled by setting options.experimental.enableWatchdogTerminationsV2 = true (#7464)

Fixes

  • Preserve NSException and C++ exception reason instead of overwriting with unrelated crash_info_message from libswiftCore.dylib (#7515)
  • Fix unexpected null value when unwrapping view controller window (#7508)

9.5.1

Fixes

  • Don't report NSException subclasses as C++ exceptions (#7420)
  • Write reports on concurrent crashes (#7340)
  • Resolve data race crash in monitorCachedData (#7423)
  • Don't finish network spans for suspended URL session tasks (#7471)
  • Use different fallback for when MetricKit does not have file path (#7473)
  • Remove launch profiling logs in sandboxed environments breaking CLI tools (#7294)

9.5.0

Features

  • Enable MetricKit Integration for visionOS (#7466)

Improvements

  • The watchdog termination integration uses a runloop observer instead of fixed interval main thread work to avoid creating a busy runloop (#7464)

Fixes

  • SentryRedactViewHelper had been erroneously made public, it has been removed from the public interface (#7474)
  • Write reports on concurrent crashes (#7340)

9.4.1

Improvements

  • Record client report when dropping in beforeSendLog (#7379)

Fixes

  • Fix user attributes from scope being omitted from logs when sendDefaultPII is false (#7437)

⚠️ Changelog content truncated by 2116 characters because it was over the limit (60000) and wouldn't fit into PR description.

@github-actions
github-actions Bot force-pushed the deps/modules/sentry-cocoa.properties/9.30.0 branch from af90bf2 to 5e007bd Compare October 1, 2026 03:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant