Skip to content

Commit 7c4c1e7

Browse files
authored
Merge pull request #2454 from DataDog/ncreated/chore/revert-RUM-11242
revert: RUM-11242 [Session Replay] Capture SwiftUI shapes as SVG image resources
2 parents 5d858b3 + a8af49a commit 7c4c1e7

35 files changed

Lines changed: 97 additions & 777 deletions

File tree

CHANGELOG.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
- [IMPROVEMENT] Remove fatal errors from Logs. See [#2359][]
1616
- [IMPROVEMENT] Introduce new category for network errors. See [#2341][]
1717
- [IMPROVEMENT] Add opt-out API to disable tracking memory warnings as RUM Errors. See [#2355][]
18-
- [IMPROVEMENT] Improve SwiftUI system image and SF symbol capture in Session Replay through shape SVG recording, image maskColor support, and drawing rasterization. See [#2432][] [#2428][] [#2391][]
1918

2019
# 2.30.0 / 28-07-2025
2120

Datadog/Datadog.xcodeproj/project.pbxproj

Lines changed: 9 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -448,15 +448,10 @@
448448
49D8C0BE2AC5F2BC0075E427 /* Logs+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49D8C0B92AC5F21F0075E427 /* Logs+Internal.swift */; };
449449
5B0A9B8B2E3BB98E00A8131C /* GraphicsFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0A9B8A2E3BB98500A8131C /* GraphicsFilter.swift */; };
450450
5B0A9B8D2E3BBB4500A8131C /* GraphicsFilter+Reflection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B0A9B8C2E3BBB3D00A8131C /* GraphicsFilter+Reflection.swift */; };
451-
5B3AF8AA2E4B3AE9009E5375 /* EnrichedResourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B3AF8A92E4B3AE6009E5375 /* EnrichedResourceTests.swift */; };
452-
5B9B20C52E460A0600C95B6C /* ShapeResourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B9B20C42E4609FC00C95B6C /* ShapeResourceTests.swift */; };
453451
5B9CB9E32E41F6F9005485E6 /* ImageRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B9CB9E22E41F6F6005485E6 /* ImageRepresentable.swift */; };
454452
5B9CB9E52E41FD60005485E6 /* Drawing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B9CB9E42E41FD5C005485E6 /* Drawing.swift */; };
455453
5B9CB9E72E420ACB005485E6 /* ImageRendererTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B9CB9E62E420AC4005485E6 /* ImageRendererTests.swift */; };
456454
5BCBC0CD2DF85B6A0094DCC2 /* SessionReplayPrivacyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BCBC0CC2DF85AFE0094DCC2 /* SessionReplayPrivacyView.swift */; };
457-
5BF7B51F2E44F7D300E0B772 /* ShapeResource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF7B51E2E44F7CE00E0B772 /* ShapeResource.swift */; };
458-
5BF7B5212E45032600E0B772 /* CGPath+SessionReplay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF7B5202E45031C00E0B772 /* CGPath+SessionReplay.swift */; };
459-
5BF7B5232E45045600E0B772 /* CGPath+SessionReplayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BF7B5222E45045600E0B772 /* CGPath+SessionReplayTests.swift */; };
460455
5BFDD7A92E28FDD3009A2CEE /* RUMWebViewContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BFDD7A82E28FDC9009A2CEE /* RUMWebViewContext.swift */; };
461456
5BFDD7AA2E28FDD3009A2CEE /* RUMWebViewContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BFDD7A82E28FDC9009A2CEE /* RUMWebViewContext.swift */; };
462457
5BFE7B7B2E3CFCDE00B8FAA8 /* ImageRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BFE7B7A2E3CFCDA00B8FAA8 /* ImageRenderer.swift */; };
@@ -2480,15 +2475,10 @@
24802475
49D8C0B92AC5F21F0075E427 /* Logs+Internal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Logs+Internal.swift"; sourceTree = "<group>"; };
24812476
5B0A9B8A2E3BB98500A8131C /* GraphicsFilter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GraphicsFilter.swift; sourceTree = "<group>"; };
24822477
5B0A9B8C2E3BBB3D00A8131C /* GraphicsFilter+Reflection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GraphicsFilter+Reflection.swift"; sourceTree = "<group>"; };
2483-
5B3AF8A92E4B3AE6009E5375 /* EnrichedResourceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnrichedResourceTests.swift; sourceTree = "<group>"; };
2484-
5B9B20C42E4609FC00C95B6C /* ShapeResourceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShapeResourceTests.swift; sourceTree = "<group>"; };
24852478
5B9CB9E22E41F6F6005485E6 /* ImageRepresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageRepresentable.swift; sourceTree = "<group>"; };
24862479
5B9CB9E42E41FD5C005485E6 /* Drawing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Drawing.swift; sourceTree = "<group>"; };
24872480
5B9CB9E62E420AC4005485E6 /* ImageRendererTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageRendererTests.swift; sourceTree = "<group>"; };
24882481
5BCBC0CC2DF85AFE0094DCC2 /* SessionReplayPrivacyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionReplayPrivacyView.swift; sourceTree = "<group>"; };
2489-
5BF7B51E2E44F7CE00E0B772 /* ShapeResource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShapeResource.swift; sourceTree = "<group>"; };
2490-
5BF7B5202E45031C00E0B772 /* CGPath+SessionReplay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CGPath+SessionReplay.swift"; sourceTree = "<group>"; };
2491-
5BF7B5222E45045600E0B772 /* CGPath+SessionReplayTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CGPath+SessionReplayTests.swift"; sourceTree = "<group>"; };
24922482
5BFDD7A82E28FDC9009A2CEE /* RUMWebViewContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RUMWebViewContext.swift; sourceTree = "<group>"; };
24932483
5BFE7B7A2E3CFCDA00B8FAA8 /* ImageRenderer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageRenderer.swift; sourceTree = "<group>"; };
24942484
61020C292757AD91005EEAEA /* BackgroundLocationMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackgroundLocationMonitor.swift; sourceTree = "<group>"; };
@@ -4065,14 +4055,6 @@
40654055
path = WatchdogTerminations;
40664056
sourceTree = "<group>";
40674057
};
4068-
5B3AF8A82E4B3A7F009E5375 /* Models */ = {
4069-
isa = PBXGroup;
4070-
children = (
4071-
5B3AF8A92E4B3AE6009E5375 /* EnrichedResourceTests.swift */,
4072-
);
4073-
path = Models;
4074-
sourceTree = "<group>";
4075-
};
40764058
61020C272757AD63005EEAEA /* BackgroundEvents */ = {
40774059
isa = PBXGroup;
40784060
children = (
@@ -4106,19 +4088,18 @@
41064088
61054E022A6EE0DB00AAA894 /* DatadogSessionReplayTests */ = {
41074089
isa = PBXGroup;
41084090
children = (
4109-
61054F882A6EE1BA00AAA894 /* Feature */,
4110-
61054F922A6EE1BA00AAA894 /* Helpers */,
4111-
5B3AF8A82E4B3A7F009E5375 /* Models */,
4112-
61054F4E2A6EE1BA00AAA894 /* Processor */,
4113-
61054F592A6EE1BA00AAA894 /* Recorder */,
41144091
960B26C12D03611400D7196F /* Resources */,
4115-
61054F3E2A6EE1B900AAA894 /* Utilities */,
4116-
61054F492A6EE1BA00AAA894 /* Writer */,
41174092
96E863712C9C547B0023BF78 /* SessionReplayOverrideTests.swift */,
41184093
61054F482A6EE1B900AAA894 /* SessionReplayTests.swift */,
41194094
61054F3D2A6EE1B900AAA894 /* SessionReplayConfigurationTests.swift */,
41204095
D2A434AD2A8E426C0028E329 /* DDSessionReplayTests.swift */,
41214096
96E863752C9C7E800023BF78 /* DDSessionReplayOverridesTests.swift */,
4097+
61054F882A6EE1BA00AAA894 /* Feature */,
4098+
61054F922A6EE1BA00AAA894 /* Helpers */,
4099+
61054F4E2A6EE1BA00AAA894 /* Processor */,
4100+
61054F592A6EE1BA00AAA894 /* Recorder */,
4101+
61054F3E2A6EE1B900AAA894 /* Utilities */,
4102+
61054F492A6EE1BA00AAA894 /* Writer */,
41224103
);
41234104
name = DatadogSessionReplayTests;
41244105
path = ../DatadogSessionReplay/Tests;
@@ -4162,7 +4143,6 @@
41624143
children = (
41634144
61054E142A6EE10A00AAA894 /* UIImage+SessionReplay.swift */,
41644145
962D72BE2CF7538800F86EF0 /* CGImage+SessionReplay.swift */,
4165-
5BF7B5202E45031C00E0B772 /* CGPath+SessionReplay.swift */,
41664146
D22442C42CA301DA002E71E4 /* UIColor+SessionReplay.swift */,
41674147
61054E152A6EE10A00AAA894 /* UIView+SessionReplay.swift */,
41684148
61054E162A6EE10A00AAA894 /* CFType+Safety.swift */,
@@ -4455,7 +4435,6 @@
44554435
children = (
44564436
61054F5D2A6EE1BA00AAA894 /* UIView+SessionReplayTests.swift */,
44574437
61054F5F2A6EE1BA00AAA894 /* CGRect+SessionReplayTests.swift */,
4458-
5BF7B5222E45045600E0B772 /* CGPath+SessionReplayTests.swift */,
44594438
);
44604439
path = Utilties;
44614440
sourceTree = "<group>";
@@ -5965,7 +5944,6 @@
59655944
960B26BA2D03541900D7196F /* SwiftUI */ = {
59665945
isa = PBXGroup;
59675946
children = (
5968-
5B9B20C42E4609FC00C95B6C /* ShapeResourceTests.swift */,
59695947
5B9CB9E62E420AC4005485E6 /* ImageRendererTests.swift */,
59705948
D21331C02D132F0600E4A6A1 /* SwiftUIWireframesBuilderTests.swift */,
59715949
962D72C42CF7806300F86EF0 /* GraphicsImageReflectionTests.swift */,
@@ -6227,8 +6205,10 @@
62276205
E2AA55E62C32C6D9002FEF28 /* ApplicationNotifications.swift */,
62286206
D23039B3298D5235001A1FA3 /* AppState.swift */,
62296207
D23039B5298D5235001A1FA3 /* BatteryStatus.swift */,
6208+
6174D6122BFDF16C00EC7469 /* BundleType.swift */,
62306209
D23039B6298D5235001A1FA3 /* CarrierInfo.swift */,
62316210
D23039BA298D5235001A1FA3 /* DatadogContext.swift */,
6211+
D2F8235229915E12003C7E99 /* DatadogSite.swift */,
62326212
D23039B7298D5235001A1FA3 /* DateProvider.swift */,
62336213
D23039BC298D5235001A1FA3 /* DeviceInfo.swift */,
62346214
D23039BE298D5235001A1FA3 /* LaunchInfo.swift */,
@@ -6240,6 +6220,7 @@
62406220
D23039B8298D5235001A1FA3 /* Sysctl.swift */,
62416221
D23039BB298D5235001A1FA3 /* TrackingConsent.swift */,
62426222
D23039B4298D5235001A1FA3 /* UserInfo.swift */,
6223+
8648D07A2E01ABB0002F226B /* BrightnessStatus.swift */,
62436224
D2F8235229915E12003C7E99 /* DatadogSite.swift */,
62446225
6174D6122BFDF16C00EC7469 /* BundleType.swift */,
62456226
8648D07A2E01ABB0002F226B /* BrightnessLevel.swift */,
@@ -6660,7 +6641,6 @@
66606641
962D72BB2CF6436600F86EF0 /* GraphicsImage+Reflection.swift */,
66616642
5B9CB9E22E41F6F6005485E6 /* ImageRepresentable.swift */,
66626643
5BFE7B7A2E3CFCDA00B8FAA8 /* ImageRenderer.swift */,
6663-
5BF7B51E2E44F7CE00E0B772 /* ShapeResource.swift */,
66646644
D2AD1CBE2CE4AE6600106C74 /* SwiftUIWireframesBuilder.swift */,
66656645
D2AD1CBF2CE4AE6600106C74 /* Text.swift */,
66666646
D2AD1CC02CE4AE6600106C74 /* Text+Reflection.swift */,
@@ -8597,7 +8577,6 @@
85978577
61054E972A6EE10A00AAA894 /* Diff.swift in Sources */,
85988578
61054E6E2A6EE10A00AAA894 /* RecordingCoordinator.swift in Sources */,
85998579
61054E9F2A6EE10B00AAA894 /* Errors.swift in Sources */,
8600-
5BF7B51F2E44F7D300E0B772 /* ShapeResource.swift in Sources */,
86018580
D29A470D2D2ED49F0092BC79 /* Xoshiro.swift in Sources */,
86028581
61054E642A6EE10A00AAA894 /* SessionReplay.swift in Sources */,
86038582
61054E952A6EE10A00AAA894 /* SnapshotProcessor.swift in Sources */,
@@ -8632,7 +8611,6 @@
86328611
D22442C52CA301DA002E71E4 /* UIColor+SessionReplay.swift in Sources */,
86338612
61054E8E2A6EE10A00AAA894 /* SRContextPublisher.swift in Sources */,
86348613
61054E732A6EE10A00AAA894 /* WindowTouchSnapshotProducer.swift in Sources */,
8635-
5BF7B5212E45032600E0B772 /* CGPath+SessionReplay.swift in Sources */,
86368614
96F25A822CC7EA4400459567 /* SessionReplayPrivacyOverrides+objc.swift in Sources */,
86378615
A70ADCD22B583B1300321BC9 /* UIImageResource.swift in Sources */,
86388616
61054E792A6EE10A00AAA894 /* UITextViewRecorder.swift in Sources */,
@@ -8650,9 +8628,7 @@
86508628
960B26C32D075BD200D7196F /* DisplayListReflectionTests.swift in Sources */,
86518629
61054FD42A6EE1BA00AAA894 /* SegmentRequestBuilderTests.swift in Sources */,
86528630
61054FB52A6EE1BA00AAA894 /* UISliderRecorderTests.swift in Sources */,
8653-
5B9B20C52E460A0600C95B6C /* ShapeResourceTests.swift in Sources */,
86548631
61054FB22A6EE1BA00AAA894 /* UILabelRecorderTests.swift in Sources */,
8655-
5B3AF8AA2E4B3AE9009E5375 /* EnrichedResourceTests.swift in Sources */,
86568632
D2C5D52D2B84F6D800B63F36 /* WebViewRecordReceiverTests.swift in Sources */,
86578633
61054FBA2A6EE1BA00AAA894 /* UIImageViewRecorderTests.swift in Sources */,
86588634
61054FC02A6EE1BA00AAA894 /* UITextViewRecorderTests.swift in Sources */,
@@ -8681,7 +8657,6 @@
86818657
61054FBD2A6EE1BA00AAA894 /* UIViewRecorderTests.swift in Sources */,
86828658
61054F952A6EE1BA00AAA894 /* SessionReplayConfigurationTests.swift in Sources */,
86838659
61054FAC2A6EE1BA00AAA894 /* CGRect+SessionReplayTests.swift in Sources */,
8684-
5BF7B5232E45045600E0B772 /* CGPath+SessionReplayTests.swift in Sources */,
86858660
D218B0482D072CF300E3F82C /* SessionReplayTelemetryTests.swift in Sources */,
86868661
D21331C12D132F0600E4A6A1 /* SwiftUIWireframesBuilderTests.swift in Sources */,
86878662
61054FA42A6EE1BA00AAA894 /* DiffTests.swift in Sources */,

DatadogSessionReplay/SRSnapshotTests/SRSnapshotTests.xcodeproj/project.pbxproj

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10-
5BA0067B2E49F6A3000148DB /* UIImage+SVG.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA0067A2E49F698000148DB /* UIImage+SVG.swift */; };
11-
5BA0067D2E49F8BF000148DB /* UIColor+Hex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA0067C2E49F8B3000148DB /* UIColor+Hex.swift */; };
1210
5BB746152E02ABB900B568F1 /* SwiftUIFixture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB746142E02ABB500B568F1 /* SwiftUIFixture.swift */; };
1311
5BB746182E02B4CD00B568F1 /* SwiftUIViewWithPrivacyOverrides.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB746172E02B4CD00B568F1 /* SwiftUIViewWithPrivacyOverrides.swift */; };
1412
614396642A5E8C0600197326 /* Environment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 614396632A5E8C0600197326 /* Environment.swift */; };
@@ -42,8 +40,6 @@
4240
/* End PBXContainerItemProxy section */
4341

4442
/* Begin PBXFileReference section */
45-
5BA0067A2E49F698000148DB /* UIImage+SVG.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+SVG.swift"; sourceTree = "<group>"; };
46-
5BA0067C2E49F8B3000148DB /* UIColor+Hex.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+Hex.swift"; sourceTree = "<group>"; };
4743
5BB746142E02ABB500B568F1 /* SwiftUIFixture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUIFixture.swift; sourceTree = "<group>"; };
4844
5BB746172E02B4CD00B568F1 /* SwiftUIViewWithPrivacyOverrides.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUIViewWithPrivacyOverrides.swift; sourceTree = "<group>"; };
4945
614396632A5E8C0600197326 /* Environment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Environment.swift; path = SRHost/Environment.swift; sourceTree = "<group>"; };
@@ -105,8 +101,6 @@
105101
619C49B529955106006B66A6 /* Utils */ = {
106102
isa = PBXGroup;
107103
children = (
108-
5BA0067C2E49F8B3000148DB /* UIColor+Hex.swift */,
109-
5BA0067A2E49F698000148DB /* UIImage+SVG.swift */,
110104
5BB746142E02ABB500B568F1 /* SwiftUIFixture.swift */,
111105
619C49B329952E12006B66A6 /* SnapshotTestCase.swift */,
112106
96363B2B2CD26AF3006FEC9D /* PrivacyOverrides.swift */,
@@ -310,10 +304,8 @@
310304
files = (
311305
619C49BB299639BC006B66A6 /* ImageRendering.swift in Sources */,
312306
614396652A5E8C0600197326 /* Environment.swift in Sources */,
313-
5BA0067B2E49F6A3000148DB /* UIImage+SVG.swift in Sources */,
314307
61B3BC652993BEAF0032C78A /* SRSnapshotTests.swift in Sources */,
315308
96363B2C2CD26AF3006FEC9D /* PrivacyOverrides.swift in Sources */,
316-
5BA0067D2E49F8BF000148DB /* UIColor+Hex.swift in Sources */,
317309
61BB975F2A5D675400AFFF86 /* ImageComposition.swift in Sources */,
318310
5BB746182E02B4CD00B568F1 /* SwiftUIViewWithPrivacyOverrides.swift in Sources */,
319311
619C49B72995512A006B66A6 /* ImageComparison.swift in Sources */,

DatadogSessionReplay/SRSnapshotTests/SRSnapshotTests/Utils/ImageRendering.swift

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,11 @@ private extension SRWireframe {
5959
case .textWireframe(let text):
6060
return text.toFrame()
6161
case .imageWireframe(value: let image):
62-
let resource = resources.first {
63-
$0.calculateIdentifier() == image.resourceId
64-
}
65-
switch resource?.mimeType {
66-
case .some("image/svg+xml"):
67-
return image.toFrame(svgData: resource?.calculateData())
68-
default:
69-
return image.toFrame(imageData: resource?.calculateData())
70-
}
62+
return image.toFrame(
63+
imageData: resources
64+
.first { $0.calculateIdentifier() == image.resourceId }?
65+
.calculateData()
66+
)
7167
case .placeholderWireframe(value: let placeholder):
7268
return placeholder.toFrame()
7369
case .webviewWireframe(value: let webview):
@@ -119,19 +115,6 @@ private extension SRImageWireframe {
119115
content: .init(imageData: imageData)
120116
)
121117
}
122-
123-
func toFrame(svgData: Data?) -> BlueprintFrame {
124-
BlueprintFrame(
125-
x: x,
126-
y: y,
127-
width: width,
128-
height: height,
129-
border: border,
130-
style: shapeStyle,
131-
clip: clip,
132-
content: .init(svgData: svgData)
133-
)
134-
}
135118
}
136119

137120
private extension SRWebviewWireframe {
@@ -284,10 +267,23 @@ extension BlueprintFrame.Content {
284267
let contentType: BlueprintFrame.Content.ContentType = .image(image: image)
285268
self.init(contentType: contentType)
286269
}
270+
}
287271

288-
init(svgData: Data?) {
289-
let image = svgData.flatMap { UIImage(svgData: $0, scale: UIScreen.main.scale) } ?? UIImage()
290-
let contentType: BlueprintFrame.Content.ContentType = .image(image: image)
291-
self.init(contentType: contentType)
272+
private extension UIColor {
273+
convenience init(hexString: String) {
274+
precondition(hexString.count == 9, "Invalid `hexString` - expected 9 characters, got '\(hexString)'")
275+
precondition(hexString.hasPrefix("#"), "Invalid `hexString` - expected # prefix, got '\(hexString)'")
276+
277+
guard let hex8 = UInt64(hexString.dropFirst(), radix: 16) else {
278+
preconditionFailure("Invalid `hexString`` - expected hexadecimal value, got '\(hexString)'")
279+
}
280+
281+
let mask: UInt64 = 0x00000000FF
282+
self.init(
283+
red: CGFloat((hex8 >> 24) & mask) / CGFloat(255),
284+
green: CGFloat((hex8 >> 16) & mask) / CGFloat(255),
285+
blue: CGFloat((hex8 >> 8) & mask) / CGFloat(255),
286+
alpha: CGFloat(hex8 & mask) / CGFloat(255)
287+
)
292288
}
293289
}

DatadogSessionReplay/SRSnapshotTests/SRSnapshotTests/Utils/UIColor+Hex.swift

Lines changed: 0 additions & 26 deletions
This file was deleted.

0 commit comments

Comments
 (0)