Skip to content

Commit 416889b

Browse files
committed
Fixes and cleanup
1 parent 81259ad commit 416889b

23 files changed

+1587
-425
lines changed

CHANGELOG.md

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,32 @@
22

33
## Unreleased
44

5-
### Fixes
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 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.
623

7-
- fix(session-replay): Add detection for potential PII leaks disabling session replay (#6389)
8-
### Features
24+
### Fixes
925

10-
- Add SentryDistribution as Swift Package Manager target (#6149)
26+
- Session replay is now automatically disabled in environments with unreliable masking to prevent PII leaks (#6389)
27+
- Detects iOS 26.0+ runtime with Xcode 26.0+ builds (DTXcode >= 2600)
28+
- Detects missing or disabled `UIDesignRequiresCompatibility`
29+
- Uses defensive approach: assumes unsafe unless proven safe
30+
- Add `options.experimental.enableSessionReplayInUnreliableEnvironment` to allow overriding the automatic disabling (#6389)
1131

1232
## 8.56.2
1333

Samples/SentrySampleShared/SentrySampleShared/SentrySDKOverrides.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public enum SentrySDKOverrides: String, CaseIterable {
111111
case disableMaskAllImages = "--io.sentry.session-replay.disable-mask-all-images"
112112
case disableMaskAllText = "--io.sentry.session-replay.disable-mask-all-text"
113113

114-
case disableInDangerousEnvironment = "--io.sentry.session-replay.disable-in-dangerous-environment"
114+
case enableInUnreliableEnvironment = "--io.sentry.session-replay.enable-in-unreliable-environment"
115115
}
116116
case sessionReplay = "Session Replay"
117117

@@ -326,7 +326,7 @@ extension SentrySDKOverrides.Performance {
326326
extension SentrySDKOverrides.SessionReplay {
327327
public var overrideType: OverrideType {
328328
switch self {
329-
case .disable, .disableViewRendererV2, .enableFastViewRendering, .disableMaskAllText, .disableMaskAllImages, .disableInDangerousEnvironment: return .boolean
329+
case .disable, .disableViewRendererV2, .enableFastViewRendering, .disableMaskAllText, .disableMaskAllImages, .enableInUnreliableEnvironment: return .boolean
330330
case .onErrorSampleRate, .sessionSampleRate: return .float
331331
case .quality: return .string
332332
}
@@ -414,7 +414,7 @@ extension SentrySDKOverrides.SessionReplay {
414414
public var ignoresDisableEverything: Bool {
415415
switch self {
416416
case .disable: return false
417-
case .disableViewRendererV2, .enableFastViewRendering, .disableMaskAllText, .disableMaskAllImages, .onErrorSampleRate, .sessionSampleRate, .quality, .disableInDangerousEnvironment: return true
417+
case .disableViewRendererV2, .enableFastViewRendering, .disableMaskAllText, .disableMaskAllImages, .onErrorSampleRate, .sessionSampleRate, .quality, .enableInUnreliableEnvironment: return true
418418
}
419419
}
420420
}

Samples/SentrySampleShared/SentrySampleShared/SentrySDKWrapper.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ public struct SentrySDKWrapper {
6262
let defaultReplayQuality = options.sessionReplay.quality
6363
options.sessionReplay.quality = SentryReplayOptions.SentryReplayQuality(rawValue: (SentrySDKOverrides.SessionReplay.quality.stringValue as? NSString)?.integerValue ?? defaultReplayQuality.rawValue) ?? defaultReplayQuality
6464

65-
// Allow configuring dangerous environment protection via SDK override.
65+
// Allow configuring unreliable environment protection via SDK override.
6666
// Default to false for the sample app to allow testing on iOS 26+ with Liquid Glass.
67-
options.sessionReplay.disableInDangerousEnvironment = !SentrySDKOverrides.SessionReplay.disableInDangerousEnvironment.boolValue
67+
options.experimental.enableSessionReplayInUnreliableEnvironment = SentrySDKOverrides.SessionReplay.enableInUnreliableEnvironment.boolValue
6868
}
6969

7070
#if !os(tvOS)

Samples/Shared/feature-flags.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +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.disable-in-dangerous-environment": false
25+
"--io.sentry.session-replay.enable-in-unreliable-environment": false
2626

2727
# user feedback
2828
"--io.sentry.feedback.use-custom-feedback-button": false

Samples/iOS-SwiftUI/iOS-SwiftUI/Info.plist

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
</dict>
3434
<key>UIApplicationSupportsIndirectInputEvents</key>
3535
<true/>
36+
<key>UIDesignRequiresCompatibility</key>
37+
<false/>
3638
<key>UILaunchScreen</key>
3739
<dict/>
3840
<key>UIRequiredDeviceCapabilities</key>

0 commit comments

Comments
 (0)