@@ -143,6 +143,9 @@ class SentryUIRedactBuilderTests_Common: SentryUIRedactBuilderTests { // swiftli
143143
144144 let opaqueView = UIView ( frame: CGRect ( x: 10 , y: 10 , width: 60 , height: 60 ) )
145145 opaqueView. backgroundColor = . white
146+ opaqueView. isOpaque = true
147+ opaqueView. layer. isOpaque = true
148+ opaqueView. layer. backgroundColor = UIColor . white. cgColor
146149 rootView. addSubview ( opaqueView)
147150
148151 // View Hierarchy:
@@ -837,6 +840,9 @@ class SentryUIRedactBuilderTests_Common: SentryUIRedactBuilderTests { // swiftli
837840
838841 let overView = UIView ( frame: rootView. bounds)
839842 overView. backgroundColor = . black
843+ overView. isOpaque = true
844+ overView. layer. isOpaque = true
845+ overView. layer. backgroundColor = UIColor . black. cgColor
840846 rootView. addSubview ( overView)
841847
842848 // View Hierarchy:
@@ -1098,7 +1104,7 @@ class SentryUIRedactBuilderTests_Common: SentryUIRedactBuilderTests { // swiftli
10981104
10991105 // View Hierarchy:
11001106 // ---------------
1101- // == iOS 26 ==
1107+ // == iOS 26.1 - Xcode 26 ==
11021108 // <UIView: 0x11b209710; frame = (0 0; 100 100); layer = <CALayer: 0x600000cd1440>>
11031109 // | <UISlider: 0x11b23e2e0; frame = (10 10; 80 20); opaque = NO; gestureRecognizers = <NSArray: 0x600000276be0>; layer = <CALayer: 0x600000ce80c0>; value: 0.000000>
11041110 // | | <UIKit._UISliderGlassVisualElement: 0x11b25bdd0; frame = (0 0; 80 20); autoresize = W+H; layer = <CALayer: 0x600000cde0a0>>
@@ -1109,48 +1115,36 @@ class SentryUIRedactBuilderTests_Common: SentryUIRedactBuilderTests { // swiftli
11091115 // | | | | <UIView: 0x11b22bf60; frame = (0 0; 37 24); autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x600000ce9410>>
11101116 // | | | | | <UIView: 0x11b434710; frame = (0 0; 37 24); autoresize = W+H; userInteractionEnabled = NO; backgroundColor = <UIDynamicSystemColor: 0x600001749000; name = _controlForegroundColor>; layer = <CALayer: 0x600000cdd740>>
11111117 //
1118+ // == iOS 26.1 - Xcode 16.4 ==
1119+ // <UIView: 0x10701dbf0; frame = (0 0; 100 100); layer = <CALayer: 0x600000cb96b0>>
1120+ // | <UISlider: 0x100e28d30; frame = (10 10; 80 20); opaque = NO; layer = <CALayer: 0x600000cae490>; value: 0.000000>
1121+ // | | <_UISlideriOSVisualElement: 0x100f06990; frame = (0 0; 80 20); opaque = NO; autoresize = W+H; layer = <CALayer: 0x600000c05fe0>>
1122+ //
11121123 // == iOS 18 & 17 & 16 ==
11131124 // <UIView: 0x12ed12bc0; frame = (0 0; 100 100); layer = <CALayer: 0x600001de3540>>
11141125 // | <UISlider: 0x13ed0f7e0; frame = (10 10; 80 20); opaque = NO; layer = <CALayer: 0x600001df0020>; value: 0.000000>
11151126 // | | <_UISlideriOSVisualElement: 0x13ed0fbd0; frame = (0 0; 80 20); opaque = NO; autoresize = W+H; layer = <CALayer: 0x600001da7f80>>
11161127
11171128 // -- Act --
1129+ print ( rootView. value ( forKey: " recursiveDescription " ) !)
11181130 let sut = getSut ( maskAllText: true , maskAllImages: true )
11191131 let result = sut. redactRegionsFor ( view: rootView)
11201132
11211133 // -- Assert --
1122- // UISlider behavior differs by iOS version
1123- if #available( iOS 26 . 0 , * ) {
1124- // On iOS 26, UISlider uses a new visual implementation that creates clipping regions
1125- // even though the slider itself is in the ignore list
1126- let region0 = try XCTUnwrap ( result. element ( at: 0 ) )
1127- XCTAssertNil ( region0. color)
1128- XCTAssertEqual ( region0. size, CGSize ( width: 37 , height: 24 ) )
1129- XCTAssertEqual ( region0. type, . clipOut)
1130- XCTAssertEqual ( region0. transform, CGAffineTransform ( a: 1 , b: 0 , c: 0 , d: 1 , tx: 10 , ty: 8 ) )
1131-
1132- let region1 = try XCTUnwrap ( result. element ( at: 1 ) )
1134+ if #available( iOS 26 , * ) , isBuiltWithSDK26 ( ) {
1135+ // Only applies to Liquid Glass (enabled when built with Xcode 26+)
1136+ let region1 = try XCTUnwrap ( result. element ( at: 0 ) )
11331137 XCTAssertNil ( region1. color)
11341138 XCTAssertEqual ( region1. size, CGSize ( width: 80 , height: 6 ) )
11351139 XCTAssertEqual ( region1. type, . clipBegin)
11361140 XCTAssertEqual ( region1. transform, CGAffineTransform ( a: 1 , b: 0 , c: 0 , d: 1 , tx: 10 , ty: 17 ) )
11371141
1138- let region2 = try XCTUnwrap ( result. element ( at: 2 ) )
1142+ let region2 = try XCTUnwrap ( result. element ( at: 1 ) )
11391143 XCTAssertNil ( region2. color)
1140- XCTAssertEqual ( region2. size, CGSize ( width: 0 , height: 6 ) )
1141- XCTAssertEqual ( region2. type, . clipOut )
1144+ XCTAssertEqual ( region2. size, CGSize ( width: 80 , height: 6 ) )
1145+ XCTAssertEqual ( region2. type, . clipEnd )
11421146 XCTAssertEqual ( region2. transform, CGAffineTransform ( a: 1 , b: 0 , c: 0 , d: 1 , tx: 10 , ty: 17 ) )
1143-
1144- let region3 = try XCTUnwrap ( result. element ( at: 3 ) )
1145- XCTAssertNil ( region3. color)
1146- XCTAssertEqual ( region3. size, CGSize ( width: 80 , height: 6 ) )
1147- XCTAssertEqual ( region3. type, . clipEnd)
1148- XCTAssertEqual ( region3. transform, CGAffineTransform ( a: 1 , b: 0 , c: 0 , d: 1 , tx: 10 , ty: 17 ) )
1149-
1150- // Assert that there are no other regions
1151- XCTAssertEqual ( result. count, 4 )
11521147 } else {
1153- // On iOS < 26, UISlider is completely ignored (no regions)
11541148 XCTAssertEqual ( result. count, 0 )
11551149 }
11561150 }
@@ -1347,6 +1341,17 @@ private class TestGridView: UIView {
13471341 ctx. setFillColor ( UIColor . orange. cgColor)
13481342 ctx. fill ( CGRect ( x: midX, y: midY, width: bounds. width - midX, height: bounds. height - midY) )
13491343 }
1344+
1345+ }
1346+
1347+ private func isBuiltWithSDK26( ) -> Bool {
1348+ guard let value = Bundle . main. object ( forInfoDictionaryKey: " DTXcode " ) as? String else {
1349+ return false
1350+ }
1351+ guard let xcodeVersion = Int ( value) else {
1352+ return false
1353+ }
1354+ return xcodeVersion >= 2_600
13501355}
13511356
13521357#endif // os(iOS) && !targetEnvironment(macCatalyst)
0 commit comments