├── Resources
├── Screenshot.png
└── example.json
├── Example
├── ExampleApp
│ ├── Assets.xcassets
│ │ ├── Contents.json
│ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ └── AppIcon.appiconset
│ │ │ └── Contents.json
│ ├── Preview Content
│ │ └── Preview Assets.xcassets
│ │ │ └── Contents.json
│ ├── ExampleApp.swift
│ ├── ExampleApp.entitlements
│ └── ContentView.swift
└── ExampleApp.xcodeproj
│ ├── project.xcworkspace
│ └── contents.xcworkspacedata
│ └── project.pbxproj
├── .gitignore
├── Package.swift
├── LICENSE.txt
├── README.md
└── Sources
└── SwiftUIViewDebug
└── ViewDebug.swift
/Resources/Screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/OpenSwiftUIProject/SwiftUIViewDebug/HEAD/Resources/Screenshot.png
--------------------------------------------------------------------------------
/Example/ExampleApp/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/ExampleApp/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | xcuserdata/
5 | DerivedData/
6 | .swiftpm/configuration/registries.json
7 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
8 | .netrc
9 |
--------------------------------------------------------------------------------
/Example/ExampleApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Example/ExampleApp/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Example/ExampleApp/ExampleApp.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ExampleApp.swift
3 | // ExampleApp
4 | //
5 | // Created by Kyle on 2023/10/3.
6 | //
7 |
8 | import SwiftUI
9 |
10 | @main
11 | struct ExampleApp: App {
12 | var body: some Scene {
13 | WindowGroup {
14 | ContentView()
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Example/ExampleApp/ExampleApp.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 | com.apple.security.files.user-selected.read-only
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Example/ExampleApp/ContentView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ContentView.swift
3 | // ExampleApp
4 | //
5 | // Created by Kyle on 2023/10/3.
6 | //
7 |
8 | import SwiftUI
9 | import SwiftUIViewDebug
10 |
11 | struct ContentView: View {
12 | var body: some View {
13 | VStack {
14 | Image(systemName: "globe")
15 | ._viewDebug()
16 | Text("Hello, world!")
17 | ._viewDebug(exportTo: FileManager.default.temporaryDirectory.appendingPathComponent("text_dump.json"))
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version: 5.9
2 | // The swift-tools-version declares the minimum version of Swift required to build this package.
3 |
4 | import PackageDescription
5 |
6 | let package = Package(
7 | name: "SwiftUIViewDebug",
8 | platforms: [
9 | .iOS(.v13),
10 | .tvOS(.v13),
11 | .visionOS(.v1),
12 | .macOS(.v10_15),
13 | ],
14 | products: [
15 | .library(name: "SwiftUIViewDebug", targets: ["SwiftUIViewDebug"]),
16 | ],
17 | targets: [
18 | .target(
19 | name: "SwiftUIViewDebug"
20 | ),
21 | ]
22 | )
23 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) 2023 Kyle-Ye
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining
4 | a copy of this software and associated documentation files (the
5 | "Software"), to deal in the Software without restriction, including
6 | without limitation the rights to use, copy, modify, merge, publish,
7 | distribute, sublicense, and/or sell copies of the Software, and to
8 | permit persons to whom the Software is furnished to do so, subject to
9 | the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be
12 | included in all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/Example/ExampleApp/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "platform" : "ios",
6 | "size" : "1024x1024"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "scale" : "1x",
11 | "size" : "16x16"
12 | },
13 | {
14 | "idiom" : "mac",
15 | "scale" : "2x",
16 | "size" : "16x16"
17 | },
18 | {
19 | "idiom" : "mac",
20 | "scale" : "1x",
21 | "size" : "32x32"
22 | },
23 | {
24 | "idiom" : "mac",
25 | "scale" : "2x",
26 | "size" : "32x32"
27 | },
28 | {
29 | "idiom" : "mac",
30 | "scale" : "1x",
31 | "size" : "128x128"
32 | },
33 | {
34 | "idiom" : "mac",
35 | "scale" : "2x",
36 | "size" : "128x128"
37 | },
38 | {
39 | "idiom" : "mac",
40 | "scale" : "1x",
41 | "size" : "256x256"
42 | },
43 | {
44 | "idiom" : "mac",
45 | "scale" : "2x",
46 | "size" : "256x256"
47 | },
48 | {
49 | "idiom" : "mac",
50 | "scale" : "1x",
51 | "size" : "512x512"
52 | },
53 | {
54 | "idiom" : "mac",
55 | "scale" : "2x",
56 | "size" : "512x512"
57 | }
58 | ],
59 | "info" : {
60 | "author" : "xcode",
61 | "version" : 1
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SwiftUIViewDebug
2 |
3 | [](https://swift.org/)
4 |
5 | ## Background
6 |
7 | In addition to `View._printChanges` and `ViewModifier._printChanges` for performance diagnosis, we can also use the method provided by `SwiftUI._ViewDebug` to get *more* debug info of SwiftUI View.
8 |
9 | SwiftUI does not full exposed the debug info property for us to use directly. But we can encode it to `Swift.Data`, convert it to `Swift.String` and finally consume it by human readable JSON format.
10 |
11 | > Xcode's Debug View Hierarchy Window is probrobly using this method to get more debugging information.
12 | >
13 | > Other UI debugging Application (such as [Lookin](https://github.com/hughkli/Lookin)) may also use such information to display more information of the SwiftUI view
14 |
15 | ## Installation
16 |
17 | ```swift
18 | let package = Package(
19 | dependencies: [
20 | .package(url: "https://github.com/Kyle-Ye/SwiftUIViewDebug", from: "1.0.0"),
21 | ],
22 | targets: [
23 | .target(name: <#Target Name#>, dependencies: [
24 | .product(name: "SwiftUIViewDebug", package: "SwiftUIViewDebug"),
25 | ]),
26 | ]
27 | )
28 | ```
29 |
30 | ## Example Usage
31 |
32 | ```swift
33 | struct ContentView: View {
34 | var body: some View {
35 | VStack {
36 | Image(systemName: "globe")
37 | .imageScale(.large)
38 | Text("Hello, world!")
39 | }
40 | ._viewDebug(exportTo: FileManager.default.temporaryDirectory.appendingPathComponent("example.json"))
41 | }
42 | }
43 | ```
44 |
45 | See full example usage on Example/ExampleApp
46 |
47 | The example output can be found at [example.json](Resources/example.json)
48 |
49 | 
50 |
51 | ## Explaination
52 |
53 | Currently only `_UIHostingView` / `NSHostingView` exposes the `_viewDebugData()` method. So we need to wrap it in `UIHostingController` / `NSHostingController` to get the debug data.
54 |
55 | If you are interested in the implementation detail of `_ViewDebug`, you can check my WIP implementation of [_ViewDebug](https://github.com/Kyle-Ye/OpenSwiftUI/blob/1bebc5d5d8a8c1228da9c262b599ac256f9f1467/Sources/OpenSwiftUI/View/Debug/TODO/_ViewDebug.swift) here.
56 |
57 | ## License
58 |
59 | See LICENSE.txt
60 |
--------------------------------------------------------------------------------
/Sources/SwiftUIViewDebug/ViewDebug.swift:
--------------------------------------------------------------------------------
1 | import SwiftUI
2 |
3 | extension View {
4 | public func _viewDebug(dataHandler: @escaping (Data?) -> Void) -> some View {
5 | DebugVC(view: self, dataHandler: dataHandler)
6 | }
7 | }
8 |
9 | extension View {
10 | /// Helper method for `_viewDebug(dataHandler:)`
11 | ///
12 | /// Convert the data to UTF8 string and print it to console.
13 | ///
14 | /// > Note:
15 | /// > If the view is complex, the string may be too large to be printed
16 | /// > to console. You should consider using other way to process the data.
17 | public func _viewDebug() -> some View {
18 | DebugVC(view: self) { data in
19 | guard let data,
20 | let string = String(data: data, encoding: .utf8)
21 | else { return }
22 | print(string)
23 | }
24 | }
25 |
26 | /// Helper method for `_viewDebug(dataHandler:)`
27 | ///
28 | /// Write the data to provided file location.
29 | public func _viewDebug(exportTo file: URL) -> some View {
30 | DebugVC(view: self) { data in
31 | guard let data else {
32 | return
33 | }
34 | try? data.write(to: file)
35 | }
36 | }
37 | }
38 |
39 | #if os(iOS) || os(tvOS) || os(visionOS)
40 | typealias PlatformControllerRepresentable = UIViewControllerRepresentable
41 | typealias PlatformHostingController = UIHostingController
42 | typealias PlatformHostingView = _UIHostingView
43 | #elseif os(macOS)
44 | typealias PlatformControllerRepresentable = NSViewControllerRepresentable
45 | typealias PlatformHostingController = NSHostingController
46 | typealias PlatformHostingView = NSHostingView
47 | #endif
48 |
49 | private struct DebugVC: PlatformControllerRepresentable {
50 | init(view: V, dataHandler: @escaping (Data?) -> Void) {
51 | self.view = view
52 | self.dataHandler = dataHandler
53 | }
54 |
55 | let view: V
56 | let dataHandler: (Data?) -> Void
57 |
58 | #if os(iOS) || os(tvOS) || os(visionOS)
59 | func makeUIViewController(context _: Context) -> DebugHostingController {
60 | DebugHostingController(rootView: view, dataHandler: dataHandler)
61 | }
62 |
63 | func updateUIViewController(_: DebugHostingController, context _: Context) {}
64 | #elseif os(macOS)
65 | func makeNSViewController(context _: Context) -> DebugHostingController {
66 | DebugHostingController(rootView: view, dataHandler: dataHandler)
67 | }
68 |
69 | func updateNSViewController(_: NSViewControllerType, context _: Context) {}
70 | #endif
71 | }
72 |
73 | class DebugHostingController: PlatformHostingController {
74 | init(rootView: V, dataHandler: @escaping (Data?) -> Void) {
75 | self.dataHandler = dataHandler
76 | super.init(rootView: rootView)
77 | }
78 |
79 | @available(*, unavailable)
80 | @MainActor dynamic required init?(coder _: NSCoder) {
81 | fatalError("init(coder:) has not been implemented")
82 | }
83 |
84 | let dataHandler: (Data?) -> Void
85 |
86 | #if os(iOS) || os(tvOS) || os(visionOS)
87 | override func viewDidAppear(_: Bool) {
88 | if let hostingView = view as? PlatformHostingView {
89 | let debugData = hostingView._viewDebugData()
90 | dataHandler(_ViewDebug.serializedData(debugData))
91 | }
92 | }
93 | #elseif os(macOS)
94 | override func viewDidAppear() {
95 | if let hostingView = view as? PlatformHostingView {
96 | let debugData = hostingView._viewDebugData()
97 | dataHandler(_ViewDebug.serializedData(debugData))
98 | }
99 | }
100 | #endif
101 | }
102 |
--------------------------------------------------------------------------------
/Example/ExampleApp.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 56;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 2741AA692ACB443200A44E9A /* ExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2741AA682ACB443200A44E9A /* ExampleApp.swift */; };
11 | 2741AA6B2ACB443200A44E9A /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2741AA6A2ACB443200A44E9A /* ContentView.swift */; };
12 | 2741AA6D2ACB443400A44E9A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2741AA6C2ACB443400A44E9A /* Assets.xcassets */; };
13 | 2741AA712ACB443400A44E9A /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2741AA702ACB443400A44E9A /* Preview Assets.xcassets */; };
14 | 27B11EA72ACB44E000F11F44 /* SwiftUIViewDebug in Frameworks */ = {isa = PBXBuildFile; productRef = 27B11EA62ACB44E000F11F44 /* SwiftUIViewDebug */; };
15 | /* End PBXBuildFile section */
16 |
17 | /* Begin PBXFileReference section */
18 | 2741AA652ACB443200A44E9A /* ExampleApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ExampleApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
19 | 2741AA682ACB443200A44E9A /* ExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExampleApp.swift; sourceTree = ""; };
20 | 2741AA6A2ACB443200A44E9A /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
21 | 2741AA6C2ACB443400A44E9A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
22 | 2741AA6E2ACB443400A44E9A /* ExampleApp.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ExampleApp.entitlements; sourceTree = ""; };
23 | 2741AA702ACB443400A44E9A /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
24 | 27B11EA42ACB448E00F11F44 /* SwiftUIViewDebug */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = SwiftUIViewDebug; path = ..; sourceTree = ""; };
25 | /* End PBXFileReference section */
26 |
27 | /* Begin PBXFrameworksBuildPhase section */
28 | 2741AA622ACB443200A44E9A /* Frameworks */ = {
29 | isa = PBXFrameworksBuildPhase;
30 | buildActionMask = 2147483647;
31 | files = (
32 | 27B11EA72ACB44E000F11F44 /* SwiftUIViewDebug in Frameworks */,
33 | );
34 | runOnlyForDeploymentPostprocessing = 0;
35 | };
36 | /* End PBXFrameworksBuildPhase section */
37 |
38 | /* Begin PBXGroup section */
39 | 2741AA5C2ACB443200A44E9A = {
40 | isa = PBXGroup;
41 | children = (
42 | 27B11EA32ACB448800F11F44 /* Packages */,
43 | 2741AA672ACB443200A44E9A /* ExampleApp */,
44 | 2741AA662ACB443200A44E9A /* Products */,
45 | 27B11EA52ACB44E000F11F44 /* Frameworks */,
46 | );
47 | sourceTree = "";
48 | };
49 | 2741AA662ACB443200A44E9A /* Products */ = {
50 | isa = PBXGroup;
51 | children = (
52 | 2741AA652ACB443200A44E9A /* ExampleApp.app */,
53 | );
54 | name = Products;
55 | sourceTree = "";
56 | };
57 | 2741AA672ACB443200A44E9A /* ExampleApp */ = {
58 | isa = PBXGroup;
59 | children = (
60 | 2741AA682ACB443200A44E9A /* ExampleApp.swift */,
61 | 2741AA6A2ACB443200A44E9A /* ContentView.swift */,
62 | 2741AA6C2ACB443400A44E9A /* Assets.xcassets */,
63 | 2741AA6E2ACB443400A44E9A /* ExampleApp.entitlements */,
64 | 2741AA6F2ACB443400A44E9A /* Preview Content */,
65 | );
66 | path = ExampleApp;
67 | sourceTree = "";
68 | };
69 | 2741AA6F2ACB443400A44E9A /* Preview Content */ = {
70 | isa = PBXGroup;
71 | children = (
72 | 2741AA702ACB443400A44E9A /* Preview Assets.xcassets */,
73 | );
74 | path = "Preview Content";
75 | sourceTree = "";
76 | };
77 | 27B11EA32ACB448800F11F44 /* Packages */ = {
78 | isa = PBXGroup;
79 | children = (
80 | 27B11EA42ACB448E00F11F44 /* SwiftUIViewDebug */,
81 | );
82 | name = Packages;
83 | sourceTree = "";
84 | };
85 | 27B11EA52ACB44E000F11F44 /* Frameworks */ = {
86 | isa = PBXGroup;
87 | children = (
88 | );
89 | name = Frameworks;
90 | sourceTree = "";
91 | };
92 | /* End PBXGroup section */
93 |
94 | /* Begin PBXNativeTarget section */
95 | 2741AA642ACB443200A44E9A /* ExampleApp */ = {
96 | isa = PBXNativeTarget;
97 | buildConfigurationList = 2741AA742ACB443400A44E9A /* Build configuration list for PBXNativeTarget "ExampleApp" */;
98 | buildPhases = (
99 | 2741AA612ACB443200A44E9A /* Sources */,
100 | 2741AA622ACB443200A44E9A /* Frameworks */,
101 | 2741AA632ACB443200A44E9A /* Resources */,
102 | );
103 | buildRules = (
104 | );
105 | dependencies = (
106 | );
107 | name = ExampleApp;
108 | packageProductDependencies = (
109 | 27B11EA62ACB44E000F11F44 /* SwiftUIViewDebug */,
110 | );
111 | productName = ExampleApp;
112 | productReference = 2741AA652ACB443200A44E9A /* ExampleApp.app */;
113 | productType = "com.apple.product-type.application";
114 | };
115 | /* End PBXNativeTarget section */
116 |
117 | /* Begin PBXProject section */
118 | 2741AA5D2ACB443200A44E9A /* Project object */ = {
119 | isa = PBXProject;
120 | attributes = {
121 | BuildIndependentTargetsInParallel = 1;
122 | LastSwiftUpdateCheck = 1500;
123 | LastUpgradeCheck = 1500;
124 | TargetAttributes = {
125 | 2741AA642ACB443200A44E9A = {
126 | CreatedOnToolsVersion = 15.0;
127 | };
128 | };
129 | };
130 | buildConfigurationList = 2741AA602ACB443200A44E9A /* Build configuration list for PBXProject "ExampleApp" */;
131 | compatibilityVersion = "Xcode 14.0";
132 | developmentRegion = en;
133 | hasScannedForEncodings = 0;
134 | knownRegions = (
135 | en,
136 | Base,
137 | );
138 | mainGroup = 2741AA5C2ACB443200A44E9A;
139 | productRefGroup = 2741AA662ACB443200A44E9A /* Products */;
140 | projectDirPath = "";
141 | projectRoot = "";
142 | targets = (
143 | 2741AA642ACB443200A44E9A /* ExampleApp */,
144 | );
145 | };
146 | /* End PBXProject section */
147 |
148 | /* Begin PBXResourcesBuildPhase section */
149 | 2741AA632ACB443200A44E9A /* Resources */ = {
150 | isa = PBXResourcesBuildPhase;
151 | buildActionMask = 2147483647;
152 | files = (
153 | 2741AA712ACB443400A44E9A /* Preview Assets.xcassets in Resources */,
154 | 2741AA6D2ACB443400A44E9A /* Assets.xcassets in Resources */,
155 | );
156 | runOnlyForDeploymentPostprocessing = 0;
157 | };
158 | /* End PBXResourcesBuildPhase section */
159 |
160 | /* Begin PBXSourcesBuildPhase section */
161 | 2741AA612ACB443200A44E9A /* Sources */ = {
162 | isa = PBXSourcesBuildPhase;
163 | buildActionMask = 2147483647;
164 | files = (
165 | 2741AA6B2ACB443200A44E9A /* ContentView.swift in Sources */,
166 | 2741AA692ACB443200A44E9A /* ExampleApp.swift in Sources */,
167 | );
168 | runOnlyForDeploymentPostprocessing = 0;
169 | };
170 | /* End PBXSourcesBuildPhase section */
171 |
172 | /* Begin XCBuildConfiguration section */
173 | 2741AA722ACB443400A44E9A /* Debug */ = {
174 | isa = XCBuildConfiguration;
175 | buildSettings = {
176 | ALWAYS_SEARCH_USER_PATHS = NO;
177 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
178 | CLANG_ANALYZER_NONNULL = YES;
179 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
180 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
181 | CLANG_ENABLE_MODULES = YES;
182 | CLANG_ENABLE_OBJC_ARC = YES;
183 | CLANG_ENABLE_OBJC_WEAK = YES;
184 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
185 | CLANG_WARN_BOOL_CONVERSION = YES;
186 | CLANG_WARN_COMMA = YES;
187 | CLANG_WARN_CONSTANT_CONVERSION = YES;
188 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
189 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
190 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
191 | CLANG_WARN_EMPTY_BODY = YES;
192 | CLANG_WARN_ENUM_CONVERSION = YES;
193 | CLANG_WARN_INFINITE_RECURSION = YES;
194 | CLANG_WARN_INT_CONVERSION = YES;
195 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
196 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
197 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
198 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
199 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
200 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
201 | CLANG_WARN_STRICT_PROTOTYPES = YES;
202 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
203 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
204 | CLANG_WARN_UNREACHABLE_CODE = YES;
205 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
206 | COPY_PHASE_STRIP = NO;
207 | DEBUG_INFORMATION_FORMAT = dwarf;
208 | ENABLE_STRICT_OBJC_MSGSEND = YES;
209 | ENABLE_TESTABILITY = YES;
210 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
211 | GCC_C_LANGUAGE_STANDARD = gnu17;
212 | GCC_DYNAMIC_NO_PIC = NO;
213 | GCC_NO_COMMON_BLOCKS = YES;
214 | GCC_OPTIMIZATION_LEVEL = 0;
215 | GCC_PREPROCESSOR_DEFINITIONS = (
216 | "DEBUG=1",
217 | "$(inherited)",
218 | );
219 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
220 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
221 | GCC_WARN_UNDECLARED_SELECTOR = YES;
222 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
223 | GCC_WARN_UNUSED_FUNCTION = YES;
224 | GCC_WARN_UNUSED_VARIABLE = YES;
225 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
226 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
227 | MTL_FAST_MATH = YES;
228 | ONLY_ACTIVE_ARCH = YES;
229 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
230 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
231 | };
232 | name = Debug;
233 | };
234 | 2741AA732ACB443400A44E9A /* Release */ = {
235 | isa = XCBuildConfiguration;
236 | buildSettings = {
237 | ALWAYS_SEARCH_USER_PATHS = NO;
238 | ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
239 | CLANG_ANALYZER_NONNULL = YES;
240 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
241 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
242 | CLANG_ENABLE_MODULES = YES;
243 | CLANG_ENABLE_OBJC_ARC = YES;
244 | CLANG_ENABLE_OBJC_WEAK = YES;
245 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
246 | CLANG_WARN_BOOL_CONVERSION = YES;
247 | CLANG_WARN_COMMA = YES;
248 | CLANG_WARN_CONSTANT_CONVERSION = YES;
249 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
250 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
251 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
252 | CLANG_WARN_EMPTY_BODY = YES;
253 | CLANG_WARN_ENUM_CONVERSION = YES;
254 | CLANG_WARN_INFINITE_RECURSION = YES;
255 | CLANG_WARN_INT_CONVERSION = YES;
256 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
257 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
258 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
259 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
260 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
261 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
262 | CLANG_WARN_STRICT_PROTOTYPES = YES;
263 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
264 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
265 | CLANG_WARN_UNREACHABLE_CODE = YES;
266 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
267 | COPY_PHASE_STRIP = NO;
268 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
269 | ENABLE_NS_ASSERTIONS = NO;
270 | ENABLE_STRICT_OBJC_MSGSEND = YES;
271 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
272 | GCC_C_LANGUAGE_STANDARD = gnu17;
273 | GCC_NO_COMMON_BLOCKS = YES;
274 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
275 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
276 | GCC_WARN_UNDECLARED_SELECTOR = YES;
277 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
278 | GCC_WARN_UNUSED_FUNCTION = YES;
279 | GCC_WARN_UNUSED_VARIABLE = YES;
280 | LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
281 | MTL_ENABLE_DEBUG_INFO = NO;
282 | MTL_FAST_MATH = YES;
283 | SWIFT_COMPILATION_MODE = wholemodule;
284 | };
285 | name = Release;
286 | };
287 | 2741AA752ACB443400A44E9A /* Debug */ = {
288 | isa = XCBuildConfiguration;
289 | buildSettings = {
290 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
291 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
292 | CODE_SIGN_ENTITLEMENTS = ExampleApp/ExampleApp.entitlements;
293 | CODE_SIGN_STYLE = Automatic;
294 | CURRENT_PROJECT_VERSION = 1;
295 | DEVELOPMENT_ASSET_PATHS = "\"ExampleApp/Preview Content\"";
296 | DEVELOPMENT_TEAM = VB7MJ8R223;
297 | ENABLE_HARDENED_RUNTIME = YES;
298 | ENABLE_PREVIEWS = YES;
299 | GENERATE_INFOPLIST_FILE = YES;
300 | "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES;
301 | "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES;
302 | "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES;
303 | "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES;
304 | "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES;
305 | "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES;
306 | "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault;
307 | "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault;
308 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
309 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
310 | IPHONEOS_DEPLOYMENT_TARGET = 14.0;
311 | LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
312 | "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
313 | MACOSX_DEPLOYMENT_TARGET = 11.0;
314 | MARKETING_VERSION = 1.0;
315 | PRODUCT_BUNDLE_IDENTIFIER = top.kyleye.ExampleApp;
316 | PRODUCT_NAME = "$(TARGET_NAME)";
317 | SDKROOT = auto;
318 | SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx";
319 | SUPPORTS_MACCATALYST = NO;
320 | SWIFT_EMIT_LOC_STRINGS = YES;
321 | SWIFT_VERSION = 5.0;
322 | TARGETED_DEVICE_FAMILY = "1,2,3";
323 | TVOS_DEPLOYMENT_TARGET = 14.0;
324 | };
325 | name = Debug;
326 | };
327 | 2741AA762ACB443400A44E9A /* Release */ = {
328 | isa = XCBuildConfiguration;
329 | buildSettings = {
330 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
331 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
332 | CODE_SIGN_ENTITLEMENTS = ExampleApp/ExampleApp.entitlements;
333 | CODE_SIGN_STYLE = Automatic;
334 | CURRENT_PROJECT_VERSION = 1;
335 | DEVELOPMENT_ASSET_PATHS = "\"ExampleApp/Preview Content\"";
336 | DEVELOPMENT_TEAM = VB7MJ8R223;
337 | ENABLE_HARDENED_RUNTIME = YES;
338 | ENABLE_PREVIEWS = YES;
339 | GENERATE_INFOPLIST_FILE = YES;
340 | "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES;
341 | "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES;
342 | "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphoneos*]" = YES;
343 | "INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents[sdk=iphonesimulator*]" = YES;
344 | "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphoneos*]" = YES;
345 | "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES;
346 | "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault;
347 | "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault;
348 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
349 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
350 | IPHONEOS_DEPLOYMENT_TARGET = 14.0;
351 | LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
352 | "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks";
353 | MACOSX_DEPLOYMENT_TARGET = 11.0;
354 | MARKETING_VERSION = 1.0;
355 | PRODUCT_BUNDLE_IDENTIFIER = top.kyleye.ExampleApp;
356 | PRODUCT_NAME = "$(TARGET_NAME)";
357 | SDKROOT = auto;
358 | SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator macosx";
359 | SUPPORTS_MACCATALYST = NO;
360 | SWIFT_EMIT_LOC_STRINGS = YES;
361 | SWIFT_VERSION = 5.0;
362 | TARGETED_DEVICE_FAMILY = "1,2,3";
363 | TVOS_DEPLOYMENT_TARGET = 14.0;
364 | };
365 | name = Release;
366 | };
367 | /* End XCBuildConfiguration section */
368 |
369 | /* Begin XCConfigurationList section */
370 | 2741AA602ACB443200A44E9A /* Build configuration list for PBXProject "ExampleApp" */ = {
371 | isa = XCConfigurationList;
372 | buildConfigurations = (
373 | 2741AA722ACB443400A44E9A /* Debug */,
374 | 2741AA732ACB443400A44E9A /* Release */,
375 | );
376 | defaultConfigurationIsVisible = 0;
377 | defaultConfigurationName = Release;
378 | };
379 | 2741AA742ACB443400A44E9A /* Build configuration list for PBXNativeTarget "ExampleApp" */ = {
380 | isa = XCConfigurationList;
381 | buildConfigurations = (
382 | 2741AA752ACB443400A44E9A /* Debug */,
383 | 2741AA762ACB443400A44E9A /* Release */,
384 | );
385 | defaultConfigurationIsVisible = 0;
386 | defaultConfigurationName = Release;
387 | };
388 | /* End XCConfigurationList section */
389 |
390 | /* Begin XCSwiftPackageProductDependency section */
391 | 27B11EA62ACB44E000F11F44 /* SwiftUIViewDebug */ = {
392 | isa = XCSwiftPackageProductDependency;
393 | productName = SwiftUIViewDebug;
394 | };
395 | /* End XCSwiftPackageProductDependency section */
396 | };
397 | rootObject = 2741AA5D2ACB443200A44E9A /* Project object */;
398 | }
399 |
--------------------------------------------------------------------------------
/Resources/example.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "properties": [
4 | {
5 | "id": 1,
6 | "attribute": {
7 | "flags": 0,
8 | "subattributes": [
9 | {
10 | "flags": 0,
11 | "value": "[]",
12 | "name": "elements",
13 | "type": "Swift.Array",
14 | "readableType": "Array"
15 | }
16 | ],
17 | "type": "SwiftUI._SafeAreaInsetsModifier",
18 | "readableType": "_SafeAreaInsetsModifier"
19 | }
20 | },
21 | {
22 | "id": 4,
23 | "attribute": {
24 | "flags": 0,
25 | "value": [428, 845],
26 | "type": "__C.CGSize",
27 | "readableType": "CGSize"
28 | }
29 | },
30 | {
31 | "id": 8,
32 | "attribute": {
33 | "flags": 0,
34 | "value": {
35 | "items": [
36 | {
37 | "frame": [
38 | 203.33333333333331, 401.66666666666663,
39 | 21.666666666666664, 21.666666666666664
40 | ],
41 | "identity": 2,
42 | "value": {
43 | "value": {
44 | "interpolation": 1,
45 | "maskColor": [0, 0, 0, 1],
46 | "antialiased": true,
47 | "resizingInfo": null,
48 | "size": [65, 65],
49 | "contents": {
50 | "data": "Cq8GCqwGCqkGCpYGEpMGCv8FCipAw8PDw0DDw8PDQEFBQUDDQcPDQcNAQUFBQMNBw8NBw0DDw8PDQMPDw8MS0AV/rwFC2rS4Py9nJELatLg/s8dBQgS8ZUGzx0FCn1sBQrPHQUL1mklCz4IkQg1gfUJ/rwFCDWB9QpG4vUENYH1C72WDQfWaSULvZYNBn1sBQu9lg0EEvGVBnO+9Qdq0uD9/rwFC2rS4P3+vAUIx829CtrUbQjHzb0Jg0jJCp3Q9QmDSMkKfWwFCYNIyQpKjjUG2tRtCsJOZQH+vAUKwk5lAz4nPQbCTmUB6UKFBkqONQXpQoUGfWwFCelChQad0PULPic9BMfNvQn+vAUIx829CzL30QT+De0LMvfRBM6EEQCQACUIzoQRAJAAJQj+De0J/rwFCuteeQWz+tEG6155BCB9gQf6HikEbJBhBuh9VQVjHREEHRzBBPPyEQW0vZUEirLxBhHiBQX+vAUKEeIFBfyQlQoR4gUHf4EBCbS9lQZ9IUkIHRzBBzHFdQrofVUFwV0tC/oeKQWf7KEK6155Bf68BQrrXnkFC0nhCPgAJQgTKKEA+AAlCBMooQBu+9EFC0nhCG770QX+vAUJgSzNCZ/soQmBLM0JwV0tCTHM9QsxxXUJcb01Cn0hSQlOlVkLf4EBCb2tJQn8kJUIJ+0FCf68BQgn7QUIirLxBCftBQjz8hEFva0lCWMdEQVOlVkIbJBhBXG9NQggfYEFMcz1CbP60QWBLM0J/rwFCYEszQn+vAUL9YAU5cK5IQv1gBTk4vYFCpsNqQTi9gUKmrwFCOL2BQlWuSELCkkhCda+BQuuTAUJ1r4FCYYlqQXWvgUK1/pY3Va5IQrX+ljemrwFCtf6WN6bDakHj92pB/WAFOX+vAUL9YAU5f68BQmj5cEDW8oVBaPlwQHmwckAl84VBebByQKavAUJ5sHJAuWVAQsu7hUG9T3RC65MBQr1PdEIAV0BCvU90QpZPdEK5ZUBClk90QqavAUKWT3RCJfOFQa5yQEJo+XBAf68BQmj5cEASDw2rqqo+Jauqqr41FuqsQRICCgAaCiUAAIC/NRbqrEE="
51 | },
52 | "orientation": 0,
53 | "scale": 3
54 | },
55 | "kind": 2
56 | },
57 | "kind": 1
58 | },
59 | {
60 | "frame": [
61 | 166.66666666666666, 425.33333333333331,
62 | 94.666666666666657, 20.333333333333332
63 | ],
64 | "identity": 3,
65 | "value": {
66 | "value": {
67 | "text": {
68 | "string": {
69 | "string": "Hello, world!",
70 | "attributes": [
71 | {
72 | "font": {
73 | "sizeCategory": 3,
74 | "size": 17,
75 | "textStyle": "UICTFontTextStyleBody"
76 | },
77 | "foregroundColor": [
78 | 0, 0, 0, 1
79 | ],
80 | "paragraphStyle": {
81 | "lineHeightMultiple": 0
82 | }
83 | }
84 | ]
85 | },
86 | "pixelLength": 0.33333333333333331
87 | },
88 | "size": [
89 | 94.666666666666657,
90 | 20.333333333333332
91 | ]
92 | },
93 | "kind": 4
94 | },
95 | "kind": 1
96 | }
97 | ]
98 | },
99 | "type": "SwiftUI.DisplayList",
100 | "readableType": "DisplayList"
101 | }
102 | },
103 | {
104 | "id": 0,
105 | "attribute": {
106 | "type": "SwiftUI._SafeAreaInsetsModifier",
107 | "flags": 2,
108 | "readableType": "_SafeAreaInsetsModifier"
109 | }
110 | },
111 | {
112 | "id": 2,
113 | "attribute": {
114 | "flags": 0,
115 | "value": {
116 | "items": [{}, { "translation": [-0, 47] }],
117 | "positionAdjustment": [0, 0]
118 | },
119 | "type": "SwiftUI.ViewTransform",
120 | "readableType": "ViewTransform"
121 | }
122 | },
123 | {
124 | "id": 3,
125 | "attribute": {
126 | "flags": 0,
127 | "value": [0, 0],
128 | "type": "__C.CGPoint",
129 | "readableType": "CGPoint"
130 | }
131 | }
132 | ],
133 | "children": [
134 | {
135 | "properties": [
136 | {
137 | "id": 4,
138 | "attribute": {
139 | "flags": 0,
140 | "value": [94.666666666666657, 46],
141 | "type": "__C.CGSize",
142 | "readableType": "CGSize"
143 | }
144 | },
145 | {
146 | "id": 2,
147 | "attribute": {
148 | "flags": 0,
149 | "value": {
150 | "items": [{}, {}, { "translation": [-0, 47] }],
151 | "positionAdjustment": [0, 0]
152 | },
153 | "type": "SwiftUI.ViewTransform",
154 | "readableType": "ViewTransform"
155 | }
156 | },
157 | {
158 | "id": 0,
159 | "attribute": {
160 | "type": "SwiftUI.ModifiedContent>, SwiftUI.Text)>>, SwiftUI.EditModeScopeModifier>, SwiftUI.HitTestBindingModifier>",
161 | "flags": 1,
162 | "readableType": "ModifiedContent"
163 | }
164 | },
165 | {
166 | "id": 1,
167 | "attribute": {
168 | "type": "SwiftUI.ModifiedContent>, SwiftUI.Text)>>, SwiftUI.EditModeScopeModifier>, SwiftUI.HitTestBindingModifier>",
169 | "flags": 0,
170 | "readableType": "ModifiedContent"
171 | }
172 | },
173 | {
174 | "id": 3,
175 | "attribute": {
176 | "flags": 0,
177 | "value": [166.66666666666669, 399.5],
178 | "type": "__C.CGPoint",
179 | "readableType": "CGPoint"
180 | }
181 | }
182 | ],
183 | "children": [
184 | {
185 | "properties": [
186 | {
187 | "id": 0,
188 | "attribute": {
189 | "type": "SwiftUI.HitTestBindingModifier",
190 | "flags": 2,
191 | "readableType": "HitTestBindingModifier"
192 | }
193 | },
194 | {
195 | "id": 1,
196 | "attribute": {
197 | "type": "SwiftUI.HitTestBindingModifier",
198 | "flags": 0,
199 | "readableType": "HitTestBindingModifier"
200 | }
201 | }
202 | ],
203 | "children": [
204 | {
205 | "properties": [
206 | {
207 | "id": 0,
208 | "attribute": {
209 | "type": "SwiftUI.ModifiedContent>, SwiftUI.Text)>>, SwiftUI.EditModeScopeModifier>",
210 | "flags": 1,
211 | "readableType": "ModifiedContent"
212 | }
213 | },
214 | {
215 | "id": 1,
216 | "attribute": {
217 | "type": "SwiftUI.ModifiedContent>, SwiftUI.Text)>>, SwiftUI.EditModeScopeModifier>",
218 | "flags": 0,
219 | "readableType": "ModifiedContent"
220 | }
221 | }
222 | ],
223 | "children": [
224 | {
225 | "properties": [
226 | {
227 | "id": 1,
228 | "attribute": {
229 | "flags": 0,
230 | "subattributes": [
231 | {
232 | "flags": 0,
233 | "subattributes": [
234 | {
235 | "flags": 0,
236 | "value": "inactive",
237 | "name": "_value",
238 | "type": "SwiftUI.EditMode",
239 | "readableType": "EditMode"
240 | }
241 | ],
242 | "name": "_editMode",
243 | "type": "SwiftUI.State",
244 | "readableType": "State"
245 | }
246 | ],
247 | "type": "SwiftUI.EditModeScopeModifier",
248 | "readableType": "EditModeScopeModifier"
249 | }
250 | },
251 | {
252 | "id": 0,
253 | "attribute": {
254 | "type": "SwiftUI.EditModeScopeModifier",
255 | "flags": 2,
256 | "readableType": "EditModeScopeModifier"
257 | }
258 | }
259 | ],
260 | "children": [
261 | {
262 | "properties": [
263 | {
264 | "id": 1,
265 | "attribute": {
266 | "type": "SwiftUI.ModifiedContent, SwiftUI._EnvironmentKeyWritingModifier>>>",
267 | "flags": 0,
268 | "readableType": "ModifiedContent"
269 | }
270 | },
271 | {
272 | "id": 0,
273 | "attribute": {
274 | "type": "SwiftUI.ModifiedContent, SwiftUI._EnvironmentKeyWritingModifier>>>",
275 | "flags": 1,
276 | "readableType": "ModifiedContent"
277 | }
278 | }
279 | ],
280 | "children": [
281 | {
282 | "properties": [
283 | {
284 | "id": 0,
285 | "attribute": {
286 | "type": "SwiftUI._EnvironmentKeyWritingModifier>>",
287 | "flags": 2,
288 | "readableType": "_EnvironmentKeyWritingModifier"
289 | }
290 | },
291 | {
292 | "id": 1,
293 | "attribute": {
294 | "flags": 0,
295 | "subattributes": [
296 | {
297 | "flags": 0,
298 | "name": "keyPath",
299 | "type": "Swift.WritableKeyPath>>",
300 | "readableType": "WritableKeyPath"
301 | },
302 | {
303 | "flags": 0,
304 | "subattributes": [
305 | {
306 | "flags": 0,
307 | "subattributes": [
308 | {
309 | "flags": 0,
310 | "subattributes": [],
311 | "name": "plist",
312 | "type": "SwiftUI.PropertyList",
313 | "readableType": "PropertyList"
314 | }
315 | ],
316 | "name": "transaction",
317 | "type": "SwiftUI.Transaction",
318 | "readableType": "Transaction"
319 | },
320 | {
321 | "flags": 0,
322 | "subattributes": [
323 | {
324 | "flags": 0,
325 | "name": "host",
326 | "type": "SwiftUI.ViewGraph",
327 | "readableType": "ViewGraph"
328 | },
329 | {
330 | "flags": 0,
331 | "subattributes": [
332 | {
333 | "flags": 0,
334 | "subattributes": [
335 | {
336 | "flags": 0,
337 | "subattributes": [
338 | {
339 | "flags": 0,
340 | "name": "identifier",
341 | "type": "__C.AGAttribute",
342 | "readableType": "AnyAttribute"
343 | },
344 | {
345 | "flags": 0,
346 | "value": 7,
347 | "name": "seed",
348 | "type": "Swift.UInt32",
349 | "readableType": "UInt32"
350 | }
351 | ],
352 | "name": "_details",
353 | "type": "__C.AGWeakAttribute.__Unnamed_struct__details",
354 | "readableType": "AnyWeakAttribute.__Unnamed_struct__details"
355 | }
356 | ],
357 | "name": "base",
358 | "type": "__C.AGWeakAttribute",
359 | "readableType": "AnyWeakAttribute"
360 | }
361 | ],
362 | "name": "_signal",
363 | "type": "AttributeGraph.WeakAttribute<()>",
364 | "readableType": "WeakAttribute"
365 | }
366 | ],
367 | "name": "location",
368 | "type": "SwiftUI.StoredLocation",
369 | "readableType": "StoredLocation"
370 | },
371 | {
372 | "flags": 0,
373 | "value": "inactive",
374 | "name": "_value",
375 | "type": "SwiftUI.EditMode",
376 | "readableType": "EditMode"
377 | }
378 | ],
379 | "name": "value",
380 | "type": "SwiftUI.Binding",
381 | "readableType": "Binding"
382 | }
383 | ],
384 | "type": "SwiftUI._EnvironmentKeyWritingModifier>>",
385 | "readableType": "_EnvironmentKeyWritingModifier"
386 | }
387 | }
388 | ],
389 | "children": [
390 | {
391 | "properties": [
392 | {
393 | "id": 1,
394 | "attribute": {
395 | "type": "SwiftUI._ViewModifier_Content",
396 | "flags": 0,
397 | "readableType": "_ViewModifier_Content"
398 | }
399 | },
400 | {
401 | "id": 0,
402 | "attribute": {
403 | "type": "SwiftUI._ViewModifier_Content",
404 | "flags": 1,
405 | "readableType": "_ViewModifier_Content"
406 | }
407 | }
408 | ],
409 | "children": [
410 | {
411 | "properties": [
412 | {
413 | "id": 1,
414 | "attribute": {
415 | "flags": 0,
416 | "subattributes": [
417 | {
418 | "flags": 0,
419 | "subattributes": [
420 | {
421 | "flags": 0,
422 | "subattributes": [
423 | {
424 | "flags": 0,
425 | "value": "Center",
426 | "name": "alignment",
427 | "type": "SwiftUI.HorizontalAlignment",
428 | "readableType": "HorizontalAlignment"
429 | }
430 | ],
431 | "name": "root",
432 | "type": "SwiftUI._VStackLayout",
433 | "readableType": "_VStackLayout"
434 | },
435 | {
436 | "flags": 0,
437 | "subattributes": [
438 | {
439 | "flags": 0,
440 | "subattributes": [
441 | {
442 | "flags": 0,
443 | "name": ".0",
444 | "type": "SwiftUI.ModifiedContent>",
445 | "readableType": "ModifiedContent"
446 | },
447 | {
448 | "flags": 0,
449 | "subattributes": [
450 | {
451 | "flags": 0,
452 | "subattributes": [
453 | {
454 | "flags": 0,
455 | "name": "anyTextStorage",
456 | "type": "SwiftUI.(unknown context at $1ba668448).LocalizedTextStorage",
457 | "readableType": "LocalizedTextStorage"
458 | }
459 | ],
460 | "name": "storage",
461 | "type": "SwiftUI.Text.Storage",
462 | "readableType": "Text.Storage"
463 | },
464 | {
465 | "flags": 0,
466 | "value": "[]",
467 | "name": "modifiers",
468 | "type": "Swift.Array",
469 | "readableType": "Array"
470 | }
471 | ],
472 | "name": ".1",
473 | "type": "SwiftUI.Text",
474 | "readableType": "Text"
475 | }
476 | ],
477 | "name": "value",
478 | "type": "(SwiftUI.ModifiedContent>, SwiftUI.Text)",
479 | "readableType": "(ModifiedContent, Text)"
480 | }
481 | ],
482 | "name": "content",
483 | "type": "SwiftUI.TupleView<(SwiftUI.ModifiedContent>, SwiftUI.Text)>",
484 | "readableType": "TupleView"
485 | }
486 | ],
487 | "name": "_tree",
488 | "type": "SwiftUI._VariadicView.Tree>, SwiftUI.Text)>>",
489 | "readableType": "_VariadicView.Tree"
490 | }
491 | ],
492 | "type": "SwiftUI.VStack>, SwiftUI.Text)>>",
493 | "readableType": "VStack"
494 | }
495 | },
496 | {
497 | "id": 0,
498 | "attribute": {
499 | "type": "SwiftUI.VStack>, SwiftUI.Text)>>",
500 | "flags": 1,
501 | "readableType": "VStack"
502 | }
503 | }
504 | ],
505 | "children": [
506 | {
507 | "properties": [
508 | {
509 | "id": 8,
510 | "attribute": {
511 | "flags": 0,
512 | "value": {
513 | "items": [
514 | {
515 | "frame": [
516 | 203.33333333333331,
517 | 401.66666666666663,
518 | 21.666666666666664,
519 | 21.666666666666664
520 | ],
521 | "identity": 2,
522 | "value": {
523 | "value": {
524 | "interpolation": 1,
525 | "maskColor": [
526 | 0,
527 | 0,
528 | 0,
529 | 1
530 | ],
531 | "antialiased": true,
532 | "resizingInfo": null,
533 | "size": [
534 | 65,
535 | 65
536 | ],
537 | "contents": {
538 | "data": "Cq8GCqwGCqkGCpYGEpMGCv8FCipAw8PDw0DDw8PDQEFBQUDDQcPDQcNAQUFBQMNBw8NBw0DDw8PDQMPDw8MS0AV/rwFC2rS4Py9nJELatLg/s8dBQgS8ZUGzx0FCn1sBQrPHQUL1mklCz4IkQg1gfUJ/rwFCDWB9QpG4vUENYH1C72WDQfWaSULvZYNBn1sBQu9lg0EEvGVBnO+9Qdq0uD9/rwFC2rS4P3+vAUIx829CtrUbQjHzb0Jg0jJCp3Q9QmDSMkKfWwFCYNIyQpKjjUG2tRtCsJOZQH+vAUKwk5lAz4nPQbCTmUB6UKFBkqONQXpQoUGfWwFCelChQad0PULPic9BMfNvQn+vAUIx829CzL30QT+De0LMvfRBM6EEQCQACUIzoQRAJAAJQj+De0J/rwFCuteeQWz+tEG6155BCB9gQf6HikEbJBhBuh9VQVjHREEHRzBBPPyEQW0vZUEirLxBhHiBQX+vAUKEeIFBfyQlQoR4gUHf4EBCbS9lQZ9IUkIHRzBBzHFdQrofVUFwV0tC/oeKQWf7KEK6155Bf68BQrrXnkFC0nhCPgAJQgTKKEA+AAlCBMooQBu+9EFC0nhCG770QX+vAUJgSzNCZ/soQmBLM0JwV0tCTHM9QsxxXUJcb01Cn0hSQlOlVkLf4EBCb2tJQn8kJUIJ+0FCf68BQgn7QUIirLxBCftBQjz8hEFva0lCWMdEQVOlVkIbJBhBXG9NQggfYEFMcz1CbP60QWBLM0J/rwFCYEszQn+vAUL9YAU5cK5IQv1gBTk4vYFCpsNqQTi9gUKmrwFCOL2BQlWuSELCkkhCda+BQuuTAUJ1r4FCYYlqQXWvgUK1/pY3Va5IQrX+ljemrwFCtf6WN6bDakHj92pB/WAFOX+vAUL9YAU5f68BQmj5cEDW8oVBaPlwQHmwckAl84VBebByQKavAUJ5sHJAuWVAQsu7hUG9T3RC65MBQr1PdEIAV0BCvU90QpZPdEK5ZUBClk90QqavAUKWT3RCJfOFQa5yQEJo+XBAf68BQmj5cEASDw2rqqo+Jauqqr41FuqsQRICCgAaCiUAAIC/NRbqrEE="
539 | },
540 | "orientation": 0,
541 | "scale": 3
542 | },
543 | "kind": 2
544 | },
545 | "kind": 1
546 | },
547 | {
548 | "frame": [
549 | 166.66666666666666,
550 | 425.33333333333331,
551 | 94.666666666666657,
552 | 20.333333333333332
553 | ],
554 | "identity": 3,
555 | "value": {
556 | "value": {
557 | "text": {
558 | "string": {
559 | "string": "Hello, world!",
560 | "attributes": [
561 | {
562 | "font": {
563 | "sizeCategory": 3,
564 | "size": 17,
565 | "textStyle": "UICTFontTextStyleBody"
566 | },
567 | "foregroundColor": [
568 | 0,
569 | 0,
570 | 0,
571 | 1
572 | ],
573 | "paragraphStyle": {
574 | "lineHeightMultiple": 0
575 | }
576 | }
577 | ]
578 | },
579 | "pixelLength": 0.33333333333333331
580 | },
581 | "size": [
582 | 94.666666666666657,
583 | 20.333333333333332
584 | ]
585 | },
586 | "kind": 4
587 | },
588 | "kind": 1
589 | }
590 | ]
591 | },
592 | "type": "SwiftUI.DisplayList",
593 | "readableType": "DisplayList"
594 | }
595 | },
596 | {
597 | "id": 0,
598 | "attribute": {
599 | "type": "SwiftUI._VariadicView.Tree>, SwiftUI.Text)>>",
600 | "flags": 1,
601 | "readableType": "_VariadicView.Tree"
602 | }
603 | },
604 | {
605 | "id": 1,
606 | "attribute": {
607 | "flags": 0,
608 | "subattributes": [
609 | {
610 | "flags": 0,
611 | "subattributes": [
612 | {
613 | "flags": 0,
614 | "value": "Center",
615 | "name": "alignment",
616 | "type": "SwiftUI.HorizontalAlignment",
617 | "readableType": "HorizontalAlignment"
618 | }
619 | ],
620 | "name": "root",
621 | "type": "SwiftUI._VStackLayout",
622 | "readableType": "_VStackLayout"
623 | },
624 | {
625 | "flags": 0,
626 | "subattributes": [
627 | {
628 | "flags": 0,
629 | "subattributes": [
630 | {
631 | "flags": 0,
632 | "name": ".0",
633 | "type": "SwiftUI.ModifiedContent>",
634 | "readableType": "ModifiedContent"
635 | },
636 | {
637 | "flags": 0,
638 | "subattributes": [
639 | {
640 | "flags": 0,
641 | "subattributes": [
642 | {
643 | "flags": 0,
644 | "subattributes": [
645 | {
646 | "flags": 0,
647 | "name": "key",
648 | "type": "SwiftUI.LocalizedStringKey",
649 | "readableType": "LocalizedStringKey"
650 | }
651 | ],
652 | "name": "anyTextStorage",
653 | "type": "SwiftUI.(unknown context at $1ba668448).LocalizedTextStorage",
654 | "readableType": "LocalizedTextStorage"
655 | }
656 | ],
657 | "name": "storage",
658 | "type": "SwiftUI.Text.Storage",
659 | "readableType": "Text.Storage"
660 | },
661 | {
662 | "flags": 0,
663 | "value": "[]",
664 | "name": "modifiers",
665 | "type": "Swift.Array",
666 | "readableType": "Array"
667 | }
668 | ],
669 | "name": ".1",
670 | "type": "SwiftUI.Text",
671 | "readableType": "Text"
672 | }
673 | ],
674 | "name": "value",
675 | "type": "(SwiftUI.ModifiedContent>, SwiftUI.Text)",
676 | "readableType": "(ModifiedContent, Text)"
677 | }
678 | ],
679 | "name": "content",
680 | "type": "SwiftUI.TupleView<(SwiftUI.ModifiedContent>, SwiftUI.Text)>",
681 | "readableType": "TupleView"
682 | }
683 | ],
684 | "type": "SwiftUI._VariadicView.Tree>, SwiftUI.Text)>>",
685 | "readableType": "_VariadicView.Tree"
686 | }
687 | }
688 | ],
689 | "children": [
690 | {
691 | "properties": [
692 | {
693 | "id": 4,
694 | "attribute": {
695 | "flags": 0,
696 | "value": [
697 | 94.666666666666657,
698 | 20.333333333333332
699 | ],
700 | "type": "__C.CGSize",
701 | "readableType": "CGSize"
702 | }
703 | },
704 | {
705 | "id": 0,
706 | "attribute": {
707 | "type": "SwiftUI.Text",
708 | "flags": 1,
709 | "readableType": "Text"
710 | }
711 | },
712 | {
713 | "id": 3,
714 | "attribute": {
715 | "flags": 0,
716 | "value": [
717 | 166.66666666666669,
718 | 425.16666666666669
719 | ],
720 | "type": "__C.CGPoint",
721 | "readableType": "CGPoint"
722 | }
723 | },
724 | {
725 | "id": 1,
726 | "attribute": {
727 | "flags": 0,
728 | "subattributes": [
729 | {
730 | "flags": 0,
731 | "subattributes": [
732 | {
733 | "flags": 0,
734 | "subattributes": [
735 | {
736 | "flags": 0,
737 | "subattributes": [
738 | {
739 | "flags": 0,
740 | "value": "Hello, world!",
741 | "name": "key",
742 | "type": "Swift.String",
743 | "readableType": "String"
744 | },
745 | {
746 | "flags": 0,
747 | "value": false,
748 | "name": "hasFormatting",
749 | "type": "Swift.Bool",
750 | "readableType": "Bool"
751 | },
752 | {
753 | "flags": 0,
754 | "value": "[]",
755 | "name": "arguments",
756 | "type": "Swift.Array",
757 | "readableType": "Array"
758 | }
759 | ],
760 | "name": "key",
761 | "type": "SwiftUI.LocalizedStringKey",
762 | "readableType": "LocalizedStringKey"
763 | }
764 | ],
765 | "name": "anyTextStorage",
766 | "type": "SwiftUI.(unknown context at $1ba668448).LocalizedTextStorage",
767 | "readableType": "LocalizedTextStorage"
768 | }
769 | ],
770 | "name": "storage",
771 | "type": "SwiftUI.Text.Storage",
772 | "readableType": "Text.Storage"
773 | },
774 | {
775 | "flags": 0,
776 | "value": "[]",
777 | "name": "modifiers",
778 | "type": "Swift.Array",
779 | "readableType": "Array"
780 | }
781 | ],
782 | "type": "SwiftUI.Text",
783 | "readableType": "Text"
784 | }
785 | }
786 | ],
787 | "children": [
788 | {
789 | "properties": [
790 | {
791 | "id": 1,
792 | "attribute": {
793 | "flags": 0,
794 | "subattributes": [
795 | {
796 | "flags": 0,
797 | "value": {
798 | "string": {
799 | "string": "Hello, world!",
800 | "attributes": [
801 | {
802 | "font": {
803 | "sizeCategory": 3,
804 | "size": 17,
805 | "textStyle": "UICTFontTextStyleBody"
806 | },
807 | "foregroundColor": [
808 | 0,
809 | 0,
810 | 0,
811 | 1
812 | ],
813 | "paragraphStyle": {
814 | "lineHeightMultiple": 0
815 | }
816 | }
817 | ]
818 | },
819 | "pixelLength": 0.33333333333333331
820 | },
821 | "name": "text",
822 | "type": "SwiftUI.ResolvedStyledText",
823 | "readableType": "ResolvedStyledText"
824 | },
825 | {
826 | "flags": 0,
827 | "subattributes": [
828 | {
829 | "flags": 0,
830 | "subattributes": [
831 | {
832 | "flags": 0,
833 | "subattributes": [
834 | {
835 | "flags": 0,
836 | "subattributes": [
837 | {
838 | "flags": 0,
839 | "value": "Hello, world!",
840 | "name": "key",
841 | "type": "Swift.String",
842 | "readableType": "String"
843 | },
844 | {
845 | "flags": 0,
846 | "value": false,
847 | "name": "hasFormatting",
848 | "type": "Swift.Bool",
849 | "readableType": "Bool"
850 | },
851 | {
852 | "flags": 0,
853 | "value": "[]",
854 | "name": "arguments",
855 | "type": "Swift.Array",
856 | "readableType": "Array"
857 | }
858 | ],
859 | "name": "key",
860 | "type": "SwiftUI.LocalizedStringKey",
861 | "readableType": "LocalizedStringKey"
862 | }
863 | ],
864 | "name": "anyTextStorage",
865 | "type": "SwiftUI.(unknown context at $1ba668448).LocalizedTextStorage",
866 | "readableType": "LocalizedTextStorage"
867 | }
868 | ],
869 | "name": "storage",
870 | "type": "SwiftUI.Text.Storage",
871 | "readableType": "Text.Storage"
872 | },
873 | {
874 | "flags": 0,
875 | "value": "[]",
876 | "name": "modifiers",
877 | "type": "Swift.Array",
878 | "readableType": "Array"
879 | }
880 | ],
881 | "name": "unresolvedText",
882 | "type": "SwiftUI.Text",
883 | "readableType": "Text"
884 | }
885 | ],
886 | "type": "SwiftUI.AccessibilityStyledTextContentView",
887 | "readableType": "AccessibilityStyledTextContentView"
888 | }
889 | },
890 | {
891 | "id": 0,
892 | "attribute": {
893 | "type": "SwiftUI.AccessibilityStyledTextContentView",
894 | "flags": 1,
895 | "readableType": "AccessibilityStyledTextContentView"
896 | }
897 | }
898 | ],
899 | "children": [
900 | {
901 | "properties": [
902 | {
903 | "id": 0,
904 | "attribute": {
905 | "type": "SwiftUI.ModifiedContent, SwiftUI.(unknown context at $1ba695780).AccessibilityLargeContentViewModifier>",
906 | "flags": 1,
907 | "readableType": "ModifiedContent"
908 | }
909 | },
910 | {
911 | "id": 1,
912 | "attribute": {
913 | "type": "SwiftUI.ModifiedContent, SwiftUI.(unknown context at $1ba695780).AccessibilityLargeContentViewModifier>",
914 | "flags": 0,
915 | "readableType": "ModifiedContent"
916 | }
917 | }
918 | ],
919 | "children": [
920 | {
921 | "properties": [
922 | {
923 | "id": 0,
924 | "attribute": {
925 | "type": "SwiftUI.(unknown context at $1ba695780).AccessibilityLargeContentViewModifier",
926 | "flags": 2,
927 | "readableType": "AccessibilityLargeContentViewModifier"
928 | }
929 | },
930 | {
931 | "id": 1,
932 | "attribute": {
933 | "flags": 0,
934 | "subattributes": [
935 | {
936 | "flags": 0,
937 | "value": "placeholder",
938 | "name": "behavior",
939 | "type": "SwiftUI.AccessibilityLargeContentViewBehavior",
940 | "readableType": "AccessibilityLargeContentViewBehavior"
941 | },
942 | {
943 | "flags": 0,
944 | "subattributes": [
945 | {
946 | "flags": 0,
947 | "subattributes": [
948 | {
949 | "flags": 0,
950 | "subattributes": [
951 | {
952 | "flags": 0,
953 | "value": {
954 | "storage": {
955 | "value": {
956 | "base": {
957 | "string": "Hello, world!",
958 | "attributes": [
959 | {
960 | "font": {
961 | "sizeCategory": 3,
962 | "size": 17,
963 | "textStyle": "UICTFontTextStyleBody"
964 | },
965 | "foregroundColor": [
966 | 0,
967 | 0,
968 | 0,
969 | 1
970 | ],
971 | "paragraphStyle": {
972 | "lineHeightMultiple": 0
973 | }
974 | }
975 | ]
976 | },
977 | "attributes": [
978 | {}
979 | ]
980 | },
981 | "isAttributed": true
982 | }
983 | },
984 | "name": "base",
985 | "type": "SwiftUI.AccessibilityText",
986 | "readableType": "AccessibilityText"
987 | }
988 | ],
989 | "name": "anyTextStorage",
990 | "type": "SwiftUI.(unknown context at $1ba6b3fd0).AccessibilityTextStorage",
991 | "readableType": "AccessibilityTextStorage"
992 | }
993 | ],
994 | "name": "storage",
995 | "type": "SwiftUI.Text.Storage",
996 | "readableType": "Text.Storage"
997 | },
998 | {
999 | "flags": 0,
1000 | "value": "[]",
1001 | "name": "modifiers",
1002 | "type": "Swift.Array",
1003 | "readableType": "Array"
1004 | }
1005 | ],
1006 | "name": "largeContentView",
1007 | "type": "SwiftUI.Text",
1008 | "readableType": "Text"
1009 | }
1010 | ],
1011 | "type": "SwiftUI.(unknown context at $1ba695780).AccessibilityLargeContentViewModifier",
1012 | "readableType": "AccessibilityLargeContentViewModifier"
1013 | }
1014 | }
1015 | ],
1016 | "children": [
1017 | {
1018 | "properties": [
1019 | {
1020 | "id": 1,
1021 | "attribute": {
1022 | "type": "SwiftUI.ModifiedContent",
1023 | "flags": 0,
1024 | "readableType": "ModifiedContent"
1025 | }
1026 | },
1027 | {
1028 | "id": 0,
1029 | "attribute": {
1030 | "type": "SwiftUI.ModifiedContent",
1031 | "flags": 1,
1032 | "readableType": "ModifiedContent"
1033 | }
1034 | }
1035 | ],
1036 | "children": [
1037 | {
1038 | "properties": [
1039 | {
1040 | "id": 1,
1041 | "attribute": {
1042 | "flags": 0,
1043 | "subattributes": [
1044 | {
1045 | "flags": 0,
1046 | "subattributes": [
1047 | {
1048 | "flags": 0,
1049 | "subattributes": [
1050 | {
1051 | "type": "SwiftUI.(unknown context at $1ba650438).ReplacingPropertiesComponent>",
1052 | "flags": 0,
1053 | "readableType": "ReplacingPropertiesComponent"
1054 | },
1055 | {
1056 | "type": "SwiftUI.(unknown context at $1ba650438).ReplacingPropertiesComponent SwiftUI.AXAnyViewTypeDescribingBox>>",
1057 | "flags": 0,
1058 | "readableType": "ReplacingPropertiesComponent"
1059 | },
1060 | {
1061 | "type": "SwiftUI.(unknown context at $1ba650438).ReplacingPropertiesComponent>",
1062 | "flags": 0,
1063 | "readableType": "ReplacingPropertiesComponent"
1064 | },
1065 | {
1066 | "type": "SwiftUI.(unknown context at $1ba650438).ReplacingPropertiesComponent>",
1067 | "flags": 0,
1068 | "readableType": "ReplacingPropertiesComponent"
1069 | },
1070 | {
1071 | "type": "SwiftUI.(unknown context at $1ba650508).CombiningPropertiesComponent>",
1072 | "flags": 0,
1073 | "readableType": "CombiningPropertiesComponent"
1074 | }
1075 | ],
1076 | "name": "propertiesComponent",
1077 | "type": "Swift.Array",
1078 | "readableType": "Array"
1079 | }
1080 | ],
1081 | "name": "storage",
1082 | "type": "SwiftUI.AccessibilityAttachmentModifier.(unknown context at $1ba650628).Storage",
1083 | "readableType": "AccessibilityAttachmentModifier.Storage"
1084 | }
1085 | ],
1086 | "type": "SwiftUI.AccessibilityAttachmentModifier",
1087 | "readableType": "AccessibilityAttachmentModifier"
1088 | }
1089 | },
1090 | {
1091 | "id": 0,
1092 | "attribute": {
1093 | "type": "SwiftUI.AccessibilityAttachmentModifier",
1094 | "flags": 2,
1095 | "readableType": "AccessibilityAttachmentModifier"
1096 | }
1097 | }
1098 | ],
1099 | "children": [
1100 | {
1101 | "properties": [
1102 | {
1103 | "id": 0,
1104 | "attribute": {
1105 | "type": "SwiftUI.StyledTextContentView",
1106 | "flags": 1,
1107 | "readableType": "StyledTextContentView"
1108 | }
1109 | },
1110 | {
1111 | "id": 1,
1112 | "attribute": {
1113 | "flags": 0,
1114 | "subattributes": [
1115 | {
1116 | "flags": 0,
1117 | "value": {
1118 | "string": {
1119 | "string": "Hello, world!",
1120 | "attributes": [
1121 | {
1122 | "font": {
1123 | "sizeCategory": 3,
1124 | "size": 17,
1125 | "textStyle": "UICTFontTextStyleBody"
1126 | },
1127 | "foregroundColor": [
1128 | 0,
1129 | 0,
1130 | 0,
1131 | 1
1132 | ],
1133 | "paragraphStyle": {
1134 | "lineHeightMultiple": 0
1135 | }
1136 | }
1137 | ]
1138 | },
1139 | "pixelLength": 0.33333333333333331
1140 | },
1141 | "name": "text",
1142 | "type": "SwiftUI.ResolvedStyledText",
1143 | "readableType": "ResolvedStyledText"
1144 | }
1145 | ],
1146 | "type": "SwiftUI.StyledTextContentView",
1147 | "readableType": "StyledTextContentView"
1148 | }
1149 | },
1150 | {
1151 | "id": 8,
1152 | "attribute": {
1153 | "flags": 0,
1154 | "value": {
1155 | "items": [
1156 | {
1157 | "frame": [
1158 | 166.66666666666666,
1159 | 425.33333333333331,
1160 | 94.666666666666657,
1161 | 20.333333333333332
1162 | ],
1163 | "identity": 3,
1164 | "value": {
1165 | "value": {
1166 | "text": {
1167 | "string": {
1168 | "string": "Hello, world!",
1169 | "attributes": [
1170 | {
1171 | "font": {
1172 | "sizeCategory": 3,
1173 | "size": 17,
1174 | "textStyle": "UICTFontTextStyleBody"
1175 | },
1176 | "foregroundColor": [
1177 | 0,
1178 | 0,
1179 | 0,
1180 | 1
1181 | ],
1182 | "paragraphStyle": {
1183 | "lineHeightMultiple": 0
1184 | }
1185 | }
1186 | ]
1187 | },
1188 | "pixelLength": 0.33333333333333331
1189 | },
1190 | "size": [
1191 | 94.666666666666657,
1192 | 20.333333333333332
1193 | ]
1194 | },
1195 | "kind": 4
1196 | },
1197 | "kind": 1
1198 | }
1199 | ]
1200 | },
1201 | "type": "SwiftUI.DisplayList",
1202 | "readableType": "DisplayList"
1203 | }
1204 | }
1205 | ],
1206 | "children": []
1207 | }
1208 | ]
1209 | }
1210 | ]
1211 | }
1212 | ]
1213 | }
1214 | ]
1215 | }
1216 | ]
1217 | }
1218 | ]
1219 | },
1220 | {
1221 | "properties": [
1222 | {
1223 | "id": 0,
1224 | "attribute": {
1225 | "type": "SwiftUI.Image",
1226 | "flags": 1,
1227 | "readableType": "Image"
1228 | }
1229 | },
1230 | {
1231 | "id": 3,
1232 | "attribute": {
1233 | "flags": 0,
1234 | "value": [
1235 | 201.16666666666669,
1236 | 399.5
1237 | ],
1238 | "type": "__C.CGPoint",
1239 | "readableType": "CGPoint"
1240 | }
1241 | },
1242 | {
1243 | "id": 1,
1244 | "attribute": {
1245 | "flags": 0,
1246 | "subattributes": [
1247 | {
1248 | "flags": 0,
1249 | "subattributes": [
1250 | {
1251 | "flags": 0,
1252 | "subattributes": [
1253 | {
1254 | "flags": 0,
1255 | "value": "globe",
1256 | "name": "name",
1257 | "type": "Swift.String",
1258 | "readableType": "String"
1259 | },
1260 | {
1261 | "flags": 0,
1262 | "value": "system",
1263 | "name": "location",
1264 | "type": "SwiftUI.Image.Location",
1265 | "readableType": "Image.Location"
1266 | },
1267 | {
1268 | "flags": 0,
1269 | "subattributes": [
1270 | {
1271 | "flags": 0,
1272 | "value": "globe",
1273 | "name": "systemSymbol",
1274 | "type": "Swift.String",
1275 | "readableType": "String"
1276 | }
1277 | ],
1278 | "name": "label",
1279 | "type": "SwiftUI.Image.(unknown context at $1ba606df0).ImageLabel",
1280 | "readableType": "Image.ImageLabel"
1281 | },
1282 | {
1283 | "flags": 0,
1284 | "value": false,
1285 | "name": "decorative",
1286 | "type": "Swift.Bool",
1287 | "readableType": "Bool"
1288 | }
1289 | ],
1290 | "name": "base",
1291 | "type": "SwiftUI.Image.(unknown context at $1ba606db0).NamedImageProvider",
1292 | "readableType": "Image.NamedImageProvider"
1293 | }
1294 | ],
1295 | "name": "provider",
1296 | "type": "SwiftUI.ImageProviderBox",
1297 | "readableType": "ImageProviderBox"
1298 | }
1299 | ],
1300 | "type": "SwiftUI.Image",
1301 | "readableType": "Image"
1302 | }
1303 | },
1304 | {
1305 | "id": 4,
1306 | "attribute": {
1307 | "flags": 0,
1308 | "value": [
1309 | 25.666666666666668,
1310 | 25.666666666666668
1311 | ],
1312 | "type": "__C.CGSize",
1313 | "readableType": "CGSize"
1314 | }
1315 | }
1316 | ],
1317 | "children": [
1318 | {
1319 | "properties": [
1320 | {
1321 | "id": 1,
1322 | "attribute": {
1323 | "type": "SwiftUI.ModifiedContent",
1324 | "flags": 0,
1325 | "readableType": "ModifiedContent"
1326 | }
1327 | },
1328 | {
1329 | "id": 0,
1330 | "attribute": {
1331 | "type": "SwiftUI.ModifiedContent",
1332 | "flags": 1,
1333 | "readableType": "ModifiedContent"
1334 | }
1335 | }
1336 | ],
1337 | "children": [
1338 | {
1339 | "properties": [
1340 | {
1341 | "id": 1,
1342 | "attribute": {
1343 | "flags": 0,
1344 | "subattributes": [
1345 | {
1346 | "flags": 0,
1347 | "subattributes": [
1348 | {
1349 | "flags": 0,
1350 | "subattributes": [
1351 | {
1352 | "type": "SwiftUI.(unknown context at $1ba650438).ReplacingPropertiesComponent>",
1353 | "flags": 0,
1354 | "readableType": "ReplacingPropertiesComponent"
1355 | },
1356 | {
1357 | "type": "SwiftUI.(unknown context at $1ba650438).ReplacingPropertiesComponent SwiftUI.AXAnyViewTypeDescribingBox>>",
1358 | "flags": 0,
1359 | "readableType": "ReplacingPropertiesComponent"
1360 | },
1361 | {
1362 | "type": "SwiftUI.(unknown context at $1ba650508).CombiningPropertiesComponent>",
1363 | "flags": 0,
1364 | "readableType": "CombiningPropertiesComponent"
1365 | },
1366 | {
1367 | "type": "SwiftUI.(unknown context at $1ba650508).CombiningPropertiesComponent>",
1368 | "flags": 0,
1369 | "readableType": "CombiningPropertiesComponent"
1370 | },
1371 | {
1372 | "type": "SwiftUI.(unknown context at $1ba650508).CombiningPropertiesComponent>",
1373 | "flags": 0,
1374 | "readableType": "CombiningPropertiesComponent"
1375 | },
1376 | {
1377 | "type": "SwiftUI.(unknown context at $1ba650438).ReplacingPropertiesComponent>",
1378 | "flags": 0,
1379 | "readableType": "ReplacingPropertiesComponent"
1380 | }
1381 | ],
1382 | "name": "propertiesComponent",
1383 | "type": "Swift.Array",
1384 | "readableType": "Array"
1385 | }
1386 | ],
1387 | "name": "storage",
1388 | "type": "SwiftUI.AccessibilityAttachmentModifier.(unknown context at $1ba650628).Storage",
1389 | "readableType": "AccessibilityAttachmentModifier.Storage"
1390 | }
1391 | ],
1392 | "type": "SwiftUI.AccessibilityAttachmentModifier",
1393 | "readableType": "AccessibilityAttachmentModifier"
1394 | }
1395 | },
1396 | {
1397 | "id": 0,
1398 | "attribute": {
1399 | "type": "SwiftUI.AccessibilityAttachmentModifier",
1400 | "flags": 2,
1401 | "readableType": "AccessibilityAttachmentModifier"
1402 | }
1403 | }
1404 | ],
1405 | "children": [
1406 | {
1407 | "properties": [
1408 | {
1409 | "id": 8,
1410 | "attribute": {
1411 | "flags": 0,
1412 | "value": {
1413 | "items": [
1414 | {
1415 | "frame": [
1416 | 203.33333333333331,
1417 | 401.66666666666663,
1418 | 21.666666666666664,
1419 | 21.666666666666664
1420 | ],
1421 | "identity": 2,
1422 | "value": {
1423 | "value": {
1424 | "interpolation": 1,
1425 | "maskColor": [
1426 | 0,
1427 | 0,
1428 | 0,
1429 | 1
1430 | ],
1431 | "antialiased": true,
1432 | "resizingInfo": null,
1433 | "size": [
1434 | 65,
1435 | 65
1436 | ],
1437 | "contents": {
1438 | "data": "Cq8GCqwGCqkGCpYGEpMGCv8FCipAw8PDw0DDw8PDQEFBQUDDQcPDQcNAQUFBQMNBw8NBw0DDw8PDQMPDw8MS0AV/rwFC2rS4Py9nJELatLg/s8dBQgS8ZUGzx0FCn1sBQrPHQUL1mklCz4IkQg1gfUJ/rwFCDWB9QpG4vUENYH1C72WDQfWaSULvZYNBn1sBQu9lg0EEvGVBnO+9Qdq0uD9/rwFC2rS4P3+vAUIx829CtrUbQjHzb0Jg0jJCp3Q9QmDSMkKfWwFCYNIyQpKjjUG2tRtCsJOZQH+vAUKwk5lAz4nPQbCTmUB6UKFBkqONQXpQoUGfWwFCelChQad0PULPic9BMfNvQn+vAUIx829CzL30QT+De0LMvfRBM6EEQCQACUIzoQRAJAAJQj+De0J/rwFCuteeQWz+tEG6155BCB9gQf6HikEbJBhBuh9VQVjHREEHRzBBPPyEQW0vZUEirLxBhHiBQX+vAUKEeIFBfyQlQoR4gUHf4EBCbS9lQZ9IUkIHRzBBzHFdQrofVUFwV0tC/oeKQWf7KEK6155Bf68BQrrXnkFC0nhCPgAJQgTKKEA+AAlCBMooQBu+9EFC0nhCG770QX+vAUJgSzNCZ/soQmBLM0JwV0tCTHM9QsxxXUJcb01Cn0hSQlOlVkLf4EBCb2tJQn8kJUIJ+0FCf68BQgn7QUIirLxBCftBQjz8hEFva0lCWMdEQVOlVkIbJBhBXG9NQggfYEFMcz1CbP60QWBLM0J/rwFCYEszQn+vAUL9YAU5cK5IQv1gBTk4vYFCpsNqQTi9gUKmrwFCOL2BQlWuSELCkkhCda+BQuuTAUJ1r4FCYYlqQXWvgUK1/pY3Va5IQrX+ljemrwFCtf6WN6bDakHj92pB/WAFOX+vAUL9YAU5f68BQmj5cEDW8oVBaPlwQHmwckAl84VBebByQKavAUJ5sHJAuWVAQsu7hUG9T3RC65MBQr1PdEIAV0BCvU90QpZPdEK5ZUBClk90QqavAUKWT3RCJfOFQa5yQEJo+XBAf68BQmj5cEASDw2rqqo+Jauqqr41FuqsQRICCgAaCiUAAIC/NRbqrEE="
1439 | },
1440 | "orientation": 0,
1441 | "scale": 3
1442 | },
1443 | "kind": 2
1444 | },
1445 | "kind": 1
1446 | }
1447 | ]
1448 | },
1449 | "type": "SwiftUI.DisplayList",
1450 | "readableType": "DisplayList"
1451 | }
1452 | },
1453 | {
1454 | "id": 0,
1455 | "attribute": {
1456 | "type": "SwiftUI.Image.Resolved",
1457 | "flags": 1,
1458 | "readableType": "Image.Resolved"
1459 | }
1460 | },
1461 | {
1462 | "id": 1,
1463 | "attribute": {
1464 | "flags": 0,
1465 | "subattributes": [
1466 | {
1467 | "flags": 0,
1468 | "value": {
1469 | "interpolation": 1,
1470 | "maskColor": [
1471 | 0.99999994039535522,
1472 | 0.99999994039535522,
1473 | 0.99999994039535522,
1474 | 1
1475 | ],
1476 | "antialiased": true,
1477 | "resizingInfo": null,
1478 | "size": [
1479 | 65,
1480 | 65
1481 | ],
1482 | "contents": {
1483 | "data": "Cq8GCqwGCqkGCpYGEpMGCv8FCipAw8PDw0DDw8PDQEFBQUDDQcPDQcNAQUFBQMNBw8NBw0DDw8PDQMPDw8MS0AV/rwFC2rS4Py9nJELatLg/s8dBQgS8ZUGzx0FCn1sBQrPHQUL1mklCz4IkQg1gfUJ/rwFCDWB9QpG4vUENYH1C72WDQfWaSULvZYNBn1sBQu9lg0EEvGVBnO+9Qdq0uD9/rwFC2rS4P3+vAUIx829CtrUbQjHzb0Jg0jJCp3Q9QmDSMkKfWwFCYNIyQpKjjUG2tRtCsJOZQH+vAUKwk5lAz4nPQbCTmUB6UKFBkqONQXpQoUGfWwFCelChQad0PULPic9BMfNvQn+vAUIx829CzL30QT+De0LMvfRBM6EEQCQACUIzoQRAJAAJQj+De0J/rwFCuteeQWz+tEG6155BCB9gQf6HikEbJBhBuh9VQVjHREEHRzBBPPyEQW0vZUEirLxBhHiBQX+vAUKEeIFBfyQlQoR4gUHf4EBCbS9lQZ9IUkIHRzBBzHFdQrofVUFwV0tC/oeKQWf7KEK6155Bf68BQrrXnkFC0nhCPgAJQgTKKEA+AAlCBMooQBu+9EFC0nhCG770QX+vAUJgSzNCZ/soQmBLM0JwV0tCTHM9QsxxXUJcb01Cn0hSQlOlVkLf4EBCb2tJQn8kJUIJ+0FCf68BQgn7QUIirLxBCftBQjz8hEFva0lCWMdEQVOlVkIbJBhBXG9NQggfYEFMcz1CbP60QWBLM0J/rwFCYEszQn+vAUL9YAU5cK5IQv1gBTk4vYFCpsNqQTi9gUKmrwFCOL2BQlWuSELCkkhCda+BQuuTAUJ1r4FCYYlqQXWvgUK1/pY3Va5IQrX+ljemrwFCtf6WN6bDakHj92pB/WAFOX+vAUL9YAU5f68BQmj5cEDW8oVBaPlwQHmwckAl84VBebByQKavAUJ5sHJAuWVAQsu7hUG9T3RC65MBQr1PdEIAV0BCvU90QpZPdEK5ZUBClk90QqavAUKWT3RCJfOFQa5yQEJo+XBAf68BQmj5cEASDw2rqqo+Jauqqr41FuqsQRICCgAaCiUAAIC/NRbqrEE="
1484 | },
1485 | "orientation": 0,
1486 | "scale": 3
1487 | },
1488 | "name": "image",
1489 | "type": "SwiftUI.GraphicsImage",
1490 | "readableType": "GraphicsImage"
1491 | },
1492 | {
1493 | "flags": 0,
1494 | "value": "globe",
1495 | "name": "label",
1496 | "type": "Swift.String",
1497 | "readableType": "String"
1498 | },
1499 | {
1500 | "flags": 0,
1501 | "subattributes": [
1502 | {
1503 | "flags": 0,
1504 | "subattributes": [
1505 | {
1506 | "flags": 0,
1507 | "value": 5,
1508 | "name": "baselineOffset",
1509 | "type": "CoreGraphics.CGFloat",
1510 | "readableType": "CGFloat"
1511 | },
1512 | {
1513 | "flags": 0,
1514 | "value": 12,
1515 | "name": "capHeight",
1516 | "type": "CoreGraphics.CGFloat",
1517 | "readableType": "CGFloat"
1518 | },
1519 | {
1520 | "flags": 0,
1521 | "value": [
1522 | 25.666666666666668,
1523 | 25.666666666666668
1524 | ],
1525 | "name": "contentSize",
1526 | "type": "__C.CGSize",
1527 | "readableType": "CGSize"
1528 | },
1529 | {
1530 | "flags": 0,
1531 | "value": [
1532 | 2,
1533 | 2
1534 | ],
1535 | "name": "alignmentOrigin",
1536 | "type": "__C.CGPoint",
1537 | "readableType": "CGPoint"
1538 | }
1539 | ],
1540 | "name": "some",
1541 | "type": "SwiftUI.Image.LayoutMetrics",
1542 | "readableType": "Image.LayoutMetrics"
1543 | }
1544 | ],
1545 | "name": "_layoutMetrics",
1546 | "type": "SwiftUI.IndirectOptional",
1547 | "readableType": "IndirectOptional"
1548 | },
1549 | {
1550 | "flags": 0,
1551 | "value": false,
1552 | "name": "decorative",
1553 | "type": "Swift.Bool",
1554 | "readableType": "Bool"
1555 | },
1556 | {
1557 | "flags": 0,
1558 | "subattributes": [
1559 | {
1560 | "flags": 0,
1561 | "value": 1,
1562 | "name": "maxLevels",
1563 | "type": "Swift.UInt16",
1564 | "readableType": "UInt16"
1565 | }
1566 | ],
1567 | "name": "styleResolverMode",
1568 | "type": "SwiftUI.ShapeStyle_ResolverMode",
1569 | "readableType": "ShapeStyle_ResolverMode"
1570 | }
1571 | ],
1572 | "type": "SwiftUI.Image.Resolved",
1573 | "readableType": "Image.Resolved"
1574 | }
1575 | }
1576 | ],
1577 | "children": []
1578 | }
1579 | ]
1580 | }
1581 | ]
1582 | }
1583 | ]
1584 | }
1585 | ]
1586 | }
1587 | ]
1588 | }
1589 | ]
1590 | }
1591 | ]
1592 | }
1593 | ]
1594 | }
1595 | ]
1596 | }
1597 | ]
1598 | }
1599 | ]
1600 | }
1601 | ]
1602 | }
1603 | ]
1604 | }
1605 | ]
1606 |
--------------------------------------------------------------------------------