Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
5bd0e5e
chore(deps): Update clang-format version (#6385)
github-actions[bot] Oct 9, 2025
df7abfe
fix(session-replay): Add detection for potential PII leaks disabling …
philprime Oct 9, 2025
34b0577
update changelog & docs; cleanup
philprime Oct 9, 2025
826ff75
Fixes and cleanup
philprime Oct 9, 2025
84a933d
cleanup
philprime Oct 10, 2025
4d3f57a
add warnings to changelog
philprime Oct 10, 2025
f30316e
Update CHANGELOG.md
philprime Oct 10, 2025
d9f7d6c
refactor: Move Info.plist wrapper to subdirectory
philprime Oct 13, 2025
d519373
refactor: Add xcode versions as named constants
philprime Oct 13, 2025
aeaccb0
fix: add missing reference to SentryXcodeVersion
philprime Oct 13, 2025
7e22575
Merge remote-tracking branch 'origin/v8.x' into philprime/hotfix/disa…
philprime Oct 13, 2025
8eafe99
fix: change keypath to option in suggestion
philprime Oct 13, 2025
4ac19c7
fix: typo
philprime Oct 13, 2025
5b3c2d3
refactored solution
philprime Oct 13, 2025
c04500d
added assertion messages; cleanup
philprime Oct 13, 2025
35023e3
fix inverted reliability check
philprime Oct 13, 2025
dc14e52
remove public visibility of SentryInfoPlistKey
philprime Oct 13, 2025
34ae808
Remove SDK detection fallback using LC_BUILD_VERSION
philprime Oct 13, 2025
8c4c548
Remove CwlPreconditionTesting due to incompatibility with tvOS and no…
philprime Oct 13, 2025
eaf3fb9
smaller fixes and cleanup
philprime Oct 13, 2025
aeec72b
Merge remote-tracking branch 'origin/v8.x' into philprime/hotfix/disa…
philprime Oct 13, 2025
0f9ac1b
feat: Add tests for info plist wrapper
philprime Oct 14, 2025
27aefce
update api
philprime Oct 14, 2025
5bdb593
refactor: Update SentryInfoPlistWrapper initializer to support Object…
philprime Oct 14, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,40 @@
# Changelog

## Unreleased

> [!Warning]
> **Session Replay is disabled by default on iOS 26.0+ with Xcode 26.0+ to prevent PII leaks**
>
> Due to potential masking issues introduced by Apple's Liquid Glass rendering changes in iOS 26.0, Session Replay is now **automatically disabled** on apps running iOS 26.0+ when built with Xcode 26.0 or later. This is a defensive measure to protect user privacy and prevent potential PII leaks until masking is reliably supported.
>
> Session replay will work normally if:
>
> - Your app runs on iOS versions older than 26.0, OR
> - Your app is built with Xcode versions older than 26.0, OR
> - Your app explicitly sets `UIDesignRequiresCompatibility` to `YES` in `Info.plist`
>
> **Override (use with caution):** If you understand the PII risks and want to enable session replay anyway, you can set:
>
> ```swift
> options.experimental.enableSessionReplayInUnreliableEnvironment = true
> ```
>
> This experimental override option will be removed in a future minor version once the masking issues are resolved.

### Fixes

- fix(session-replay): Add detection for potential PII leaks disabling session replay (#6389)
- Session replay is now automatically disabled in environments with unreliable masking to prevent PII leaks (#6389)
- Detects iOS 26.0+ runtime with Xcode 26.0+ builds (DTXcode >= 2600)
- Detects missing or disabled `UIDesignRequiresCompatibility`
- Uses defensive approach: assumes unsafe unless proven safe
- Add `options.experimental.enableSessionReplayInUnreliableEnvironment` to allow overriding the automatic disabling (#6389)

## 8.56.2

> [!Warning]
> Session Replay in this version does not correctly mask views when built with Xcode 26 and running on iOS 26 with Liquid Glass, which may lead to PII leaks. Please upgrade to 8.57.0 or later.

### Fixes

- Fix crash from null UIApplication in SwiftUI apps (#6264)
Expand All @@ -11,6 +44,9 @@
> [!Warning]
> This version can cause runtime crashes because the `UIApplication.sharedApplication`/`NSApplication.sharedApplication` is not yet available during SDK initialization, due to the changes in [PR #5900](https://github.com/getsentry/sentry-cocoa/pull/5900), released in [8.56.0](https://github.com/getsentry/sentry-cocoa/releases/tag/8.56.0).

> [!Warning]
> Session Replay in this version does not correctly mask views when built with Xcode 26 and running on iOS 26 with Liquid Glass, which may lead to PII leaks. Please upgrade to 8.57.0 or later.

### Fixes

- Fix potential app launch hang caused by the SentrySDK (#6181)
Expand All @@ -22,6 +58,9 @@
> [!Warning]
> This version can cause runtime crashes because the `UIApplication.sharedApplication`/`NSApplication.sharedApplication` is not yet available during SDK initialization, due to the changes in [PR #5900](https://github.com/getsentry/sentry-cocoa/pull/5900), released in [8.56.0](https://github.com/getsentry/sentry-cocoa/releases/tag/8.56.0).

> [!Warning]
> Session Replay in this version does not correctly mask views when built with Xcode 26 and running on iOS 26 with Liquid Glass, which may lead to PII leaks. Please upgrade to 8.57.0 or later.

### Features

- Structured Logs: Flush logs on SDK flush/close (#5834)
Expand Down Expand Up @@ -104,6 +143,9 @@

## 8.55.1

> [!Warning]
> Session Replay in this version does not correctly mask views when built with Xcode 26 and running on iOS 26 with Liquid Glass, which may lead to PII leaks. Please upgrade to 8.57.0 or later.

### Features

### Fixes
Expand All @@ -130,6 +172,9 @@
> If your app does not need arm64e, you don't need to make any changes.
> But if your app _needs arm64e_ please use `Sentry-Dynamic-WithARM64e` or `Sentry-WithoutUIKitOrAppKit-WithARM64e` from 8.55.0 so you don't have issues uploading to the App Store.

> [!Warning]
> Session Replay in this version does not correctly mask views when built with Xcode 26 and running on iOS 26 with Liquid Glass, which may lead to PII leaks. Please upgrade to 8.57.0 or later.

### Features

- Add a new prebuilt framework with arm64e and remove it from the regular one (#5788)
Expand All @@ -153,6 +198,9 @@

## 8.54.0

> [!Warning]
> Session Replay in this version does not correctly mask views when built with Xcode 26 and running on iOS 26 with Liquid Glass, which may lead to PII leaks. Please upgrade to 8.57.0 or later.

### Features

- Add experimental support for capturing structured logs via `SentrySDK.logger` (#5532, #5593, #5639, #5628, #5637, #5643)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,8 @@ public enum SentrySDKOverrides: String, CaseIterable {

case disableMaskAllImages = "--io.sentry.session-replay.disable-mask-all-images"
case disableMaskAllText = "--io.sentry.session-replay.disable-mask-all-text"

case enableInUnreliableEnvironment = "--io.sentry.session-replay.enable-in-unreliable-environment"
}
case sessionReplay = "Session Replay"

Expand Down Expand Up @@ -324,7 +326,7 @@ extension SentrySDKOverrides.Performance {
extension SentrySDKOverrides.SessionReplay {
public var overrideType: OverrideType {
switch self {
case .disable, .disableViewRendererV2, .enableFastViewRendering, .disableMaskAllText, .disableMaskAllImages: return .boolean
case .disable, .disableViewRendererV2, .enableFastViewRendering, .disableMaskAllText, .disableMaskAllImages, .enableInUnreliableEnvironment: return .boolean
case .onErrorSampleRate, .sessionSampleRate: return .float
case .quality: return .string
}
Expand Down Expand Up @@ -412,7 +414,7 @@ extension SentrySDKOverrides.SessionReplay {
public var ignoresDisableEverything: Bool {
switch self {
case .disable: return false
case .disableViewRendererV2, .enableFastViewRendering, .disableMaskAllText, .disableMaskAllImages, .onErrorSampleRate, .sessionSampleRate, .quality: return true
case .disableViewRendererV2, .enableFastViewRendering, .disableMaskAllText, .disableMaskAllImages, .onErrorSampleRate, .sessionSampleRate, .quality, .enableInUnreliableEnvironment: return true
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,10 @@ public struct SentrySDKWrapper {
)
let defaultReplayQuality = options.sessionReplay.quality
options.sessionReplay.quality = SentryReplayOptions.SentryReplayQuality(rawValue: (SentrySDKOverrides.SessionReplay.quality.stringValue as? NSString)?.integerValue ?? defaultReplayQuality.rawValue) ?? defaultReplayQuality

// Allow configuring unreliable environment protection via SDK override.
// Default to false for the sample app to allow testing on iOS 26+ with Liquid Glass.
options.experimental.enableSessionReplayInUnreliableEnvironment = SentrySDKOverrides.SessionReplay.enableInUnreliableEnvironment.boolValue
}

#if !os(tvOS)
Expand Down
1 change: 1 addition & 0 deletions Samples/Shared/feature-flags.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ schemeTemplates:
"--io.sentry.session-replay.enable-fast-view-rendering": false
"--io.sentry.session-replay.disable-mask-all-images": false
"--io.sentry.session-replay.disable-mask-all-text": false
"--io.sentry.session-replay.enable-in-unreliable-environment": false

# user feedback
"--io.sentry.feedback.use-custom-feedback-button": false
Expand Down
Loading
Loading