Skip to content

Commit 99fac9e

Browse files
authored
Merge f30316e into f76f6bf
2 parents f76f6bf + f30316e commit 99fac9e

22 files changed

+1661
-26
lines changed

CHANGELOG.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,40 @@
11
# Changelog
22

3+
## Unreleased
4+
5+
> [!Warning]
6+
> **Session Replay is disabled by default on iOS 26.0+ with Xcode 26.0+ to prevent PII leaks**
7+
>
8+
> 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.
9+
>
10+
> Session replay will work normally if:
11+
>
12+
> - Your app runs on iOS versions older than 26.0, OR
13+
> - Your app is built with Xcode versions older than 26.0, OR
14+
> - Your app explicitly sets `UIDesignRequiresCompatibility` to `YES` in `Info.plist`
15+
>
16+
> **Override (use with caution):** If you understand the PII risks and want to enable session replay anyway, you can set:
17+
>
18+
> ```swift
19+
> options.experimental.enableSessionReplayInUnreliableEnvironment = true
20+
> ```
21+
>
22+
> This experimental override option will be removed in a future minor version once the masking issues are resolved.
23+
24+
### Fixes
25+
26+
- fix(session-replay): Add detection for potential PII leaks disabling session replay (#6389)
27+
- Session replay is now automatically disabled in environments with unreliable masking to prevent PII leaks (#6389)
28+
- Detects iOS 26.0+ runtime with Xcode 26.0+ builds (DTXcode >= 2600)
29+
- Detects missing or disabled `UIDesignRequiresCompatibility`
30+
- Uses defensive approach: assumes unsafe unless proven safe
31+
- Add `options.experimental.enableSessionReplayInUnreliableEnvironment` to allow overriding the automatic disabling (#6389)
32+
333
## 8.56.2
434

35+
> [!Warning]
36+
> 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.
37+
538
### Fixes
639

740
- Fix crash from null UIApplication in SwiftUI apps (#6264)
@@ -11,6 +44,9 @@
1144
> [!Warning]
1245
> 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).
1346

47+
> [!Warning]
48+
> 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.
49+
1450
### Fixes
1551

1652
- Fix potential app launch hang caused by the SentrySDK (#6181)
@@ -22,6 +58,9 @@
2258
> [!Warning]
2359
> 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).
2460

61+
> [!Warning]
62+
> 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.
63+
2564
### Features
2665

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

105144
## 8.55.1
106145

146+
> [!Warning]
147+
> 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.
148+
107149
### Features
108150

109151
### Fixes
@@ -130,6 +172,9 @@
130172
> If your app does not need arm64e, you don't need to make any changes.
131173
> 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.
132174

175+
> [!Warning]
176+
> 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.
177+
133178
### Features
134179

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

154199
## 8.54.0
155200

201+
> [!Warning]
202+
> 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.
203+
156204
### Features
157205

158206
- Add experimental support for capturing structured logs via `SentrySDK.logger` (#5532, #5593, #5639, #5628, #5637, #5643)

Samples/SentrySampleShared/SentrySampleShared/SentrySDKOverrides.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ public enum SentrySDKOverrides: String, CaseIterable {
110110

111111
case disableMaskAllImages = "--io.sentry.session-replay.disable-mask-all-images"
112112
case disableMaskAllText = "--io.sentry.session-replay.disable-mask-all-text"
113+
114+
case enableInUnreliableEnvironment = "--io.sentry.session-replay.enable-in-unreliable-environment"
113115
}
114116
case sessionReplay = "Session Replay"
115117

@@ -324,7 +326,7 @@ extension SentrySDKOverrides.Performance {
324326
extension SentrySDKOverrides.SessionReplay {
325327
public var overrideType: OverrideType {
326328
switch self {
327-
case .disable, .disableViewRendererV2, .enableFastViewRendering, .disableMaskAllText, .disableMaskAllImages: return .boolean
329+
case .disable, .disableViewRendererV2, .enableFastViewRendering, .disableMaskAllText, .disableMaskAllImages, .enableInUnreliableEnvironment: return .boolean
328330
case .onErrorSampleRate, .sessionSampleRate: return .float
329331
case .quality: return .string
330332
}
@@ -412,7 +414,7 @@ extension SentrySDKOverrides.SessionReplay {
412414
public var ignoresDisableEverything: Bool {
413415
switch self {
414416
case .disable: return false
415-
case .disableViewRendererV2, .enableFastViewRendering, .disableMaskAllText, .disableMaskAllImages, .onErrorSampleRate, .sessionSampleRate, .quality: return true
417+
case .disableViewRendererV2, .enableFastViewRendering, .disableMaskAllText, .disableMaskAllImages, .onErrorSampleRate, .sessionSampleRate, .quality, .enableInUnreliableEnvironment: return true
416418
}
417419
}
418420
}

Samples/SentrySampleShared/SentrySampleShared/SentrySDKWrapper.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ public struct SentrySDKWrapper {
6161
)
6262
let defaultReplayQuality = options.sessionReplay.quality
6363
options.sessionReplay.quality = SentryReplayOptions.SentryReplayQuality(rawValue: (SentrySDKOverrides.SessionReplay.quality.stringValue as? NSString)?.integerValue ?? defaultReplayQuality.rawValue) ?? defaultReplayQuality
64+
65+
// Allow configuring unreliable environment protection via SDK override.
66+
// Default to false for the sample app to allow testing on iOS 26+ with Liquid Glass.
67+
options.experimental.enableSessionReplayInUnreliableEnvironment = SentrySDKOverrides.SessionReplay.enableInUnreliableEnvironment.boolValue
6468
}
6569

6670
#if !os(tvOS)

Samples/Shared/feature-flags.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ schemeTemplates:
2222
"--io.sentry.session-replay.enable-fast-view-rendering": false
2323
"--io.sentry.session-replay.disable-mask-all-images": false
2424
"--io.sentry.session-replay.disable-mask-all-text": false
25+
"--io.sentry.session-replay.enable-in-unreliable-environment": false
2526

2627
# user feedback
2728
"--io.sentry.feedback.use-custom-feedback-button": false

0 commit comments

Comments
 (0)