├── .gitattributes
├── Shared
├── Assets.xcassets
│ ├── Contents.json
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── d3_custom_navigation_swiftuiApp.swift
└── ContentView.swift
├── .gitignore
├── d3-custom-navigation-swiftui.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── project.pbxproj
├── macOS
└── macOS.entitlements
└── README.md
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/Shared/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 | /*.xcodeproj
5 | xcuserdata/
6 | DerivedData/
7 | .swiftpm/
8 | *.pbxproj
9 | d3-custom-navigation-swiftui.xcodeproj/project.pbxproj
10 |
--------------------------------------------------------------------------------
/Shared/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 |
--------------------------------------------------------------------------------
/d3-custom-navigation-swiftui.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/d3-custom-navigation-swiftui.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/macOS/macOS.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 |
--------------------------------------------------------------------------------
/Shared/d3_custom_navigation_swiftuiApp.swift:
--------------------------------------------------------------------------------
1 | //
2 | // d3_custom_navigation_swiftuiApp.swift
3 | // Shared
4 | //
5 | // Created by Igor Shelopaev on 09.06.2022.
6 | //
7 |
8 | import SwiftUI
9 |
10 | @main
11 | struct d3_custom_navigation_swiftuiApp: App {
12 | var body: some Scene {
13 | WindowGroup {
14 | ContentView()
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Custom navigation swiftui
2 |
3 |
4 | Experimenting with navigation link. if you find this idea interesting you can take and expend it into a more powerful solution.
5 | [Live youtube](https://youtu.be/_wbJqWjqCO0)
6 |
7 | ## The result navigation
8 | ```swift
9 |
10 | @State var route : Router = .empty
11 |
12 | var body: some View {
13 | NavigationView{
14 | VStack{
15 | Button("go1") { route = .go1}
16 | Button("go2") { route = .go2}
17 | Button("go3") { route = .go3}
18 | }.navigation(route: $route)
19 |
20 | }.navigationViewStyle(.stack)
21 | }
22 | ```
23 |
24 | ### 1. Define sub view
25 | ```swift
26 | struct SubView: View {
27 |
28 | let text: String
29 |
30 | var body: some View {
31 | Text("\(text)")
32 | }
33 | }
34 | ```
35 |
36 | ### 2. Define routes
37 | ```swift
38 | enum Router {
39 | case go1
40 | case go2
41 | case go3
42 | case empty
43 |
44 | @ViewBuilder
45 | var builder: some View {
46 | switch(self) {
47 | case .go1: SubView(text: "go1")
48 | case .go2: SubView(text: "go2")
49 | case .go3: SubView(text: "go3")
50 | default: EmptyView()
51 | }
52 | }
53 | }
54 | ```
55 | ### 3. Define view modifier
56 | ```swift
57 | struct NavigationModifire : ViewModifier{
58 |
59 | @State var isActive : Bool = true
60 |
61 | @Binding var route : Router
62 |
63 | func body(content: Content) -> some View {
64 | content
65 | .background{
66 | NavigationLink(destination : route.builder, isActive: $isActive ){
67 | EmptyView()
68 | }.hidden()
69 | }
70 | .onChange(of: isActive){
71 | if $0 == false { route = .empty }
72 | }
73 | }
74 |
75 | }
76 |
77 | extension View{
78 | @ViewBuilder
79 | func navigation(route : Binding) -> some View{
80 | if route.wrappedValue != .empty{
81 | modifier(NavigationModifire(route: route))
82 | }else { self }
83 | }
84 | }
85 | ```
86 |
87 |
88 |
--------------------------------------------------------------------------------
/Shared/ContentView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ContentView.swift
3 | // Shared
4 | //
5 | // Created by Igor Shelopaev on 09.06.2022.
6 | // The link to the code is under the video
7 | //
8 |
9 | import SwiftUI
10 |
11 | // experimenting with nav link
12 | struct ContentView: View {
13 | @State var route: Router = .empty
14 |
15 | var body: some View {
16 | NavigationView {
17 | VStack {
18 | Button("go1") { route = .go1 }
19 | Button("go2") { route = .go2 }
20 | Button("go3") { route = .go3 }
21 | }.navigation(route: $route)
22 | }.navigationViewStyle(.stack)
23 | }
24 | }
25 |
26 | extension View {
27 | @ViewBuilder
28 | func navigation(route: Binding) -> some View {
29 | if route.wrappedValue != .empty {
30 | modifier(NavigationModifire(route: route))
31 | } else { self }
32 | }
33 | }
34 |
35 | // MARK: - define view modifire
36 |
37 | struct NavigationModifire: ViewModifier {
38 | @State var isActive: Bool = true
39 |
40 | @Binding var route: Router
41 |
42 | func body(content: Content) -> some View {
43 | content
44 | .background {
45 | NavigationLink(destination: route.builder, isActive: $isActive) {
46 | EmptyView()
47 | }.hidden()
48 | }
49 | .onChange(of: isActive) {
50 | if $0 == false { route = .empty }
51 | }
52 | }
53 | }
54 |
55 | // MARK: - Define routes
56 |
57 | enum Router {
58 | case go1
59 | case go2
60 | case go3
61 | case empty
62 |
63 | @ViewBuilder
64 | var builder: some View {
65 | switch self {
66 | case .go1: SubView(text: "go1")
67 | case .go2: SubView(text: "go2")
68 | case .go3: SubView(text: "go3")
69 | default: EmptyView()
70 | }
71 | }
72 | }
73 |
74 | // MARK: - Define sub view
75 |
76 | struct SubView: View {
77 | let text: String
78 |
79 | var body: some View {
80 | Text("\(text)")
81 | }
82 | }
83 |
84 | struct ContentView_Previews: PreviewProvider {
85 | static var previews: some View {
86 | ContentView()
87 | }
88 | }
89 |
--------------------------------------------------------------------------------
/Shared/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "scale" : "2x",
6 | "size" : "20x20"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "scale" : "3x",
11 | "size" : "20x20"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "scale" : "2x",
16 | "size" : "29x29"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "scale" : "3x",
21 | "size" : "29x29"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "scale" : "2x",
26 | "size" : "40x40"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "scale" : "3x",
31 | "size" : "40x40"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "scale" : "2x",
36 | "size" : "60x60"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "scale" : "3x",
41 | "size" : "60x60"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "scale" : "1x",
46 | "size" : "20x20"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "scale" : "2x",
51 | "size" : "20x20"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "scale" : "1x",
56 | "size" : "29x29"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "scale" : "2x",
61 | "size" : "29x29"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "scale" : "1x",
66 | "size" : "40x40"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "scale" : "2x",
71 | "size" : "40x40"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "scale" : "2x",
76 | "size" : "76x76"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "scale" : "2x",
81 | "size" : "83.5x83.5"
82 | },
83 | {
84 | "idiom" : "ios-marketing",
85 | "scale" : "1x",
86 | "size" : "1024x1024"
87 | },
88 | {
89 | "idiom" : "mac",
90 | "scale" : "1x",
91 | "size" : "16x16"
92 | },
93 | {
94 | "idiom" : "mac",
95 | "scale" : "2x",
96 | "size" : "16x16"
97 | },
98 | {
99 | "idiom" : "mac",
100 | "scale" : "1x",
101 | "size" : "32x32"
102 | },
103 | {
104 | "idiom" : "mac",
105 | "scale" : "2x",
106 | "size" : "32x32"
107 | },
108 | {
109 | "idiom" : "mac",
110 | "scale" : "1x",
111 | "size" : "128x128"
112 | },
113 | {
114 | "idiom" : "mac",
115 | "scale" : "2x",
116 | "size" : "128x128"
117 | },
118 | {
119 | "idiom" : "mac",
120 | "scale" : "1x",
121 | "size" : "256x256"
122 | },
123 | {
124 | "idiom" : "mac",
125 | "scale" : "2x",
126 | "size" : "256x256"
127 | },
128 | {
129 | "idiom" : "mac",
130 | "scale" : "1x",
131 | "size" : "512x512"
132 | },
133 | {
134 | "idiom" : "mac",
135 | "scale" : "2x",
136 | "size" : "512x512"
137 | }
138 | ],
139 | "info" : {
140 | "author" : "xcode",
141 | "version" : 1
142 | }
143 | }
144 |
--------------------------------------------------------------------------------
/d3-custom-navigation-swiftui.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 55;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | B2C7168F2851E09F0020B958 /* d3_custom_navigation_swiftuiApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2C7167F2851E09E0020B958 /* d3_custom_navigation_swiftuiApp.swift */; };
11 | B2C716902851E09F0020B958 /* d3_custom_navigation_swiftuiApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2C7167F2851E09E0020B958 /* d3_custom_navigation_swiftuiApp.swift */; };
12 | B2C716912851E09F0020B958 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2C716802851E09E0020B958 /* ContentView.swift */; };
13 | B2C716922851E09F0020B958 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2C716802851E09E0020B958 /* ContentView.swift */; };
14 | B2C716932851E09F0020B958 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B2C716812851E09F0020B958 /* Assets.xcassets */; };
15 | B2C716942851E09F0020B958 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B2C716812851E09F0020B958 /* Assets.xcassets */; };
16 | B2C7169E285200510020B958 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = B2C7169D285200510020B958 /* README.md */; };
17 | /* End PBXBuildFile section */
18 |
19 | /* Begin PBXFileReference section */
20 | B2C7167F2851E09E0020B958 /* d3_custom_navigation_swiftuiApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = d3_custom_navigation_swiftuiApp.swift; sourceTree = ""; };
21 | B2C716802851E09E0020B958 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
22 | B2C716812851E09F0020B958 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
23 | B2C716862851E09F0020B958 /* d3-custom-navigation-swiftui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "d3-custom-navigation-swiftui.app"; sourceTree = BUILT_PRODUCTS_DIR; };
24 | B2C7168C2851E09F0020B958 /* d3-custom-navigation-swiftui.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "d3-custom-navigation-swiftui.app"; sourceTree = BUILT_PRODUCTS_DIR; };
25 | B2C7168E2851E09F0020B958 /* macOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = macOS.entitlements; sourceTree = ""; };
26 | B2C7169D285200510020B958 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; };
27 | /* End PBXFileReference section */
28 |
29 | /* Begin PBXFrameworksBuildPhase section */
30 | B2C716832851E09F0020B958 /* Frameworks */ = {
31 | isa = PBXFrameworksBuildPhase;
32 | buildActionMask = 2147483647;
33 | files = (
34 | );
35 | runOnlyForDeploymentPostprocessing = 0;
36 | };
37 | B2C716892851E09F0020B958 /* Frameworks */ = {
38 | isa = PBXFrameworksBuildPhase;
39 | buildActionMask = 2147483647;
40 | files = (
41 | );
42 | runOnlyForDeploymentPostprocessing = 0;
43 | };
44 | /* End PBXFrameworksBuildPhase section */
45 |
46 | /* Begin PBXGroup section */
47 | B2C716792851E09E0020B958 = {
48 | isa = PBXGroup;
49 | children = (
50 | B2C7169D285200510020B958 /* README.md */,
51 | B2C7167E2851E09E0020B958 /* Shared */,
52 | B2C7168D2851E09F0020B958 /* macOS */,
53 | B2C716872851E09F0020B958 /* Products */,
54 | );
55 | sourceTree = "";
56 | };
57 | B2C7167E2851E09E0020B958 /* Shared */ = {
58 | isa = PBXGroup;
59 | children = (
60 | B2C7167F2851E09E0020B958 /* d3_custom_navigation_swiftuiApp.swift */,
61 | B2C716802851E09E0020B958 /* ContentView.swift */,
62 | B2C716812851E09F0020B958 /* Assets.xcassets */,
63 | );
64 | path = Shared;
65 | sourceTree = "";
66 | };
67 | B2C716872851E09F0020B958 /* Products */ = {
68 | isa = PBXGroup;
69 | children = (
70 | B2C716862851E09F0020B958 /* d3-custom-navigation-swiftui.app */,
71 | B2C7168C2851E09F0020B958 /* d3-custom-navigation-swiftui.app */,
72 | );
73 | name = Products;
74 | sourceTree = "";
75 | };
76 | B2C7168D2851E09F0020B958 /* macOS */ = {
77 | isa = PBXGroup;
78 | children = (
79 | B2C7168E2851E09F0020B958 /* macOS.entitlements */,
80 | );
81 | path = macOS;
82 | sourceTree = "";
83 | };
84 | /* End PBXGroup section */
85 |
86 | /* Begin PBXNativeTarget section */
87 | B2C716852851E09F0020B958 /* d3-custom-navigation-swiftui (iOS) */ = {
88 | isa = PBXNativeTarget;
89 | buildConfigurationList = B2C716972851E09F0020B958 /* Build configuration list for PBXNativeTarget "d3-custom-navigation-swiftui (iOS)" */;
90 | buildPhases = (
91 | B2C716822851E09F0020B958 /* Sources */,
92 | B2C716832851E09F0020B958 /* Frameworks */,
93 | B2C716842851E09F0020B958 /* Resources */,
94 | );
95 | buildRules = (
96 | );
97 | dependencies = (
98 | );
99 | name = "d3-custom-navigation-swiftui (iOS)";
100 | productName = "d3-custom-navigation-swiftui (iOS)";
101 | productReference = B2C716862851E09F0020B958 /* d3-custom-navigation-swiftui.app */;
102 | productType = "com.apple.product-type.application";
103 | };
104 | B2C7168B2851E09F0020B958 /* d3-custom-navigation-swiftui (macOS) */ = {
105 | isa = PBXNativeTarget;
106 | buildConfigurationList = B2C7169A2851E09F0020B958 /* Build configuration list for PBXNativeTarget "d3-custom-navigation-swiftui (macOS)" */;
107 | buildPhases = (
108 | B2C716882851E09F0020B958 /* Sources */,
109 | B2C716892851E09F0020B958 /* Frameworks */,
110 | B2C7168A2851E09F0020B958 /* Resources */,
111 | );
112 | buildRules = (
113 | );
114 | dependencies = (
115 | );
116 | name = "d3-custom-navigation-swiftui (macOS)";
117 | productName = "d3-custom-navigation-swiftui (macOS)";
118 | productReference = B2C7168C2851E09F0020B958 /* d3-custom-navigation-swiftui.app */;
119 | productType = "com.apple.product-type.application";
120 | };
121 | /* End PBXNativeTarget section */
122 |
123 | /* Begin PBXProject section */
124 | B2C7167A2851E09E0020B958 /* Project object */ = {
125 | isa = PBXProject;
126 | attributes = {
127 | BuildIndependentTargetsInParallel = 1;
128 | LastSwiftUpdateCheck = 1340;
129 | LastUpgradeCheck = 1340;
130 | TargetAttributes = {
131 | B2C716852851E09F0020B958 = {
132 | CreatedOnToolsVersion = 13.4.1;
133 | };
134 | B2C7168B2851E09F0020B958 = {
135 | CreatedOnToolsVersion = 13.4.1;
136 | };
137 | };
138 | };
139 | buildConfigurationList = B2C7167D2851E09E0020B958 /* Build configuration list for PBXProject "d3-custom-navigation-swiftui" */;
140 | compatibilityVersion = "Xcode 13.0";
141 | developmentRegion = en;
142 | hasScannedForEncodings = 0;
143 | knownRegions = (
144 | en,
145 | Base,
146 | );
147 | mainGroup = B2C716792851E09E0020B958;
148 | productRefGroup = B2C716872851E09F0020B958 /* Products */;
149 | projectDirPath = "";
150 | projectRoot = "";
151 | targets = (
152 | B2C716852851E09F0020B958 /* d3-custom-navigation-swiftui (iOS) */,
153 | B2C7168B2851E09F0020B958 /* d3-custom-navigation-swiftui (macOS) */,
154 | );
155 | };
156 | /* End PBXProject section */
157 |
158 | /* Begin PBXResourcesBuildPhase section */
159 | B2C716842851E09F0020B958 /* Resources */ = {
160 | isa = PBXResourcesBuildPhase;
161 | buildActionMask = 2147483647;
162 | files = (
163 | B2C7169E285200510020B958 /* README.md in Resources */,
164 | B2C716932851E09F0020B958 /* Assets.xcassets in Resources */,
165 | );
166 | runOnlyForDeploymentPostprocessing = 0;
167 | };
168 | B2C7168A2851E09F0020B958 /* Resources */ = {
169 | isa = PBXResourcesBuildPhase;
170 | buildActionMask = 2147483647;
171 | files = (
172 | B2C716942851E09F0020B958 /* Assets.xcassets in Resources */,
173 | );
174 | runOnlyForDeploymentPostprocessing = 0;
175 | };
176 | /* End PBXResourcesBuildPhase section */
177 |
178 | /* Begin PBXSourcesBuildPhase section */
179 | B2C716822851E09F0020B958 /* Sources */ = {
180 | isa = PBXSourcesBuildPhase;
181 | buildActionMask = 2147483647;
182 | files = (
183 | B2C716912851E09F0020B958 /* ContentView.swift in Sources */,
184 | B2C7168F2851E09F0020B958 /* d3_custom_navigation_swiftuiApp.swift in Sources */,
185 | );
186 | runOnlyForDeploymentPostprocessing = 0;
187 | };
188 | B2C716882851E09F0020B958 /* Sources */ = {
189 | isa = PBXSourcesBuildPhase;
190 | buildActionMask = 2147483647;
191 | files = (
192 | B2C716922851E09F0020B958 /* ContentView.swift in Sources */,
193 | B2C716902851E09F0020B958 /* d3_custom_navigation_swiftuiApp.swift in Sources */,
194 | );
195 | runOnlyForDeploymentPostprocessing = 0;
196 | };
197 | /* End PBXSourcesBuildPhase section */
198 |
199 | /* Begin XCBuildConfiguration section */
200 | B2C716952851E09F0020B958 /* Debug */ = {
201 | isa = XCBuildConfiguration;
202 | buildSettings = {
203 | ALWAYS_SEARCH_USER_PATHS = NO;
204 | CLANG_ANALYZER_NONNULL = YES;
205 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
206 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
207 | CLANG_ENABLE_MODULES = YES;
208 | CLANG_ENABLE_OBJC_ARC = YES;
209 | CLANG_ENABLE_OBJC_WEAK = YES;
210 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
211 | CLANG_WARN_BOOL_CONVERSION = YES;
212 | CLANG_WARN_COMMA = YES;
213 | CLANG_WARN_CONSTANT_CONVERSION = YES;
214 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
215 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
216 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
217 | CLANG_WARN_EMPTY_BODY = YES;
218 | CLANG_WARN_ENUM_CONVERSION = YES;
219 | CLANG_WARN_INFINITE_RECURSION = YES;
220 | CLANG_WARN_INT_CONVERSION = YES;
221 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
222 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
223 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
224 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
225 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
226 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
227 | CLANG_WARN_STRICT_PROTOTYPES = YES;
228 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
229 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
230 | CLANG_WARN_UNREACHABLE_CODE = YES;
231 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
232 | COPY_PHASE_STRIP = NO;
233 | DEBUG_INFORMATION_FORMAT = dwarf;
234 | ENABLE_STRICT_OBJC_MSGSEND = YES;
235 | ENABLE_TESTABILITY = YES;
236 | GCC_C_LANGUAGE_STANDARD = gnu11;
237 | GCC_DYNAMIC_NO_PIC = NO;
238 | GCC_NO_COMMON_BLOCKS = YES;
239 | GCC_OPTIMIZATION_LEVEL = 0;
240 | GCC_PREPROCESSOR_DEFINITIONS = (
241 | "DEBUG=1",
242 | "$(inherited)",
243 | );
244 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
245 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
246 | GCC_WARN_UNDECLARED_SELECTOR = YES;
247 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
248 | GCC_WARN_UNUSED_FUNCTION = YES;
249 | GCC_WARN_UNUSED_VARIABLE = YES;
250 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
251 | MTL_FAST_MATH = YES;
252 | ONLY_ACTIVE_ARCH = YES;
253 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
254 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
255 | };
256 | name = Debug;
257 | };
258 | B2C716962851E09F0020B958 /* Release */ = {
259 | isa = XCBuildConfiguration;
260 | buildSettings = {
261 | ALWAYS_SEARCH_USER_PATHS = NO;
262 | CLANG_ANALYZER_NONNULL = YES;
263 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
264 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
265 | CLANG_ENABLE_MODULES = YES;
266 | CLANG_ENABLE_OBJC_ARC = YES;
267 | CLANG_ENABLE_OBJC_WEAK = YES;
268 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
269 | CLANG_WARN_BOOL_CONVERSION = YES;
270 | CLANG_WARN_COMMA = YES;
271 | CLANG_WARN_CONSTANT_CONVERSION = YES;
272 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
273 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
274 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
275 | CLANG_WARN_EMPTY_BODY = YES;
276 | CLANG_WARN_ENUM_CONVERSION = YES;
277 | CLANG_WARN_INFINITE_RECURSION = YES;
278 | CLANG_WARN_INT_CONVERSION = YES;
279 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
280 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
281 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
282 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
283 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
284 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
285 | CLANG_WARN_STRICT_PROTOTYPES = YES;
286 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
287 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
288 | CLANG_WARN_UNREACHABLE_CODE = YES;
289 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
290 | COPY_PHASE_STRIP = NO;
291 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
292 | ENABLE_NS_ASSERTIONS = NO;
293 | ENABLE_STRICT_OBJC_MSGSEND = YES;
294 | GCC_C_LANGUAGE_STANDARD = gnu11;
295 | GCC_NO_COMMON_BLOCKS = YES;
296 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
297 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
298 | GCC_WARN_UNDECLARED_SELECTOR = YES;
299 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
300 | GCC_WARN_UNUSED_FUNCTION = YES;
301 | GCC_WARN_UNUSED_VARIABLE = YES;
302 | MTL_ENABLE_DEBUG_INFO = NO;
303 | MTL_FAST_MATH = YES;
304 | SWIFT_COMPILATION_MODE = wholemodule;
305 | SWIFT_OPTIMIZATION_LEVEL = "-O";
306 | };
307 | name = Release;
308 | };
309 | B2C716982851E09F0020B958 /* Debug */ = {
310 | isa = XCBuildConfiguration;
311 | buildSettings = {
312 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
313 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
314 | CODE_SIGN_STYLE = Automatic;
315 | CURRENT_PROJECT_VERSION = 1;
316 | DEVELOPMENT_TEAM = FZ42RW4USG;
317 | ENABLE_PREVIEWS = YES;
318 | GENERATE_INFOPLIST_FILE = YES;
319 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
320 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
321 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
322 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
323 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
324 | IPHONEOS_DEPLOYMENT_TARGET = 15.5;
325 | LD_RUNPATH_SEARCH_PATHS = (
326 | "$(inherited)",
327 | "@executable_path/Frameworks",
328 | );
329 | MARKETING_VERSION = 1.0;
330 | PRODUCT_BUNDLE_IDENTIFIER = "ishelopaev.d3-custom-navigation-swiftui";
331 | PRODUCT_NAME = "d3-custom-navigation-swiftui";
332 | SDKROOT = iphoneos;
333 | SWIFT_EMIT_LOC_STRINGS = YES;
334 | SWIFT_VERSION = 5.0;
335 | TARGETED_DEVICE_FAMILY = "1,2";
336 | };
337 | name = Debug;
338 | };
339 | B2C716992851E09F0020B958 /* Release */ = {
340 | isa = XCBuildConfiguration;
341 | buildSettings = {
342 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
343 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
344 | CODE_SIGN_STYLE = Automatic;
345 | CURRENT_PROJECT_VERSION = 1;
346 | DEVELOPMENT_TEAM = FZ42RW4USG;
347 | ENABLE_PREVIEWS = YES;
348 | GENERATE_INFOPLIST_FILE = YES;
349 | INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
350 | INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
351 | INFOPLIST_KEY_UILaunchScreen_Generation = YES;
352 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
353 | INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
354 | IPHONEOS_DEPLOYMENT_TARGET = 15.5;
355 | LD_RUNPATH_SEARCH_PATHS = (
356 | "$(inherited)",
357 | "@executable_path/Frameworks",
358 | );
359 | MARKETING_VERSION = 1.0;
360 | PRODUCT_BUNDLE_IDENTIFIER = "ishelopaev.d3-custom-navigation-swiftui";
361 | PRODUCT_NAME = "d3-custom-navigation-swiftui";
362 | SDKROOT = iphoneos;
363 | SWIFT_EMIT_LOC_STRINGS = YES;
364 | SWIFT_VERSION = 5.0;
365 | TARGETED_DEVICE_FAMILY = "1,2";
366 | VALIDATE_PRODUCT = YES;
367 | };
368 | name = Release;
369 | };
370 | B2C7169B2851E09F0020B958 /* Debug */ = {
371 | isa = XCBuildConfiguration;
372 | buildSettings = {
373 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
374 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
375 | CODE_SIGN_ENTITLEMENTS = macOS/macOS.entitlements;
376 | CODE_SIGN_STYLE = Automatic;
377 | COMBINE_HIDPI_IMAGES = YES;
378 | CURRENT_PROJECT_VERSION = 1;
379 | DEVELOPMENT_TEAM = FZ42RW4USG;
380 | ENABLE_HARDENED_RUNTIME = YES;
381 | ENABLE_PREVIEWS = YES;
382 | GENERATE_INFOPLIST_FILE = YES;
383 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
384 | LD_RUNPATH_SEARCH_PATHS = (
385 | "$(inherited)",
386 | "@executable_path/../Frameworks",
387 | );
388 | MACOSX_DEPLOYMENT_TARGET = 12.3;
389 | MARKETING_VERSION = 1.0;
390 | PRODUCT_BUNDLE_IDENTIFIER = "ishelopaev.d3-custom-navigation-swiftui";
391 | PRODUCT_NAME = "d3-custom-navigation-swiftui";
392 | SDKROOT = macosx;
393 | SWIFT_EMIT_LOC_STRINGS = YES;
394 | SWIFT_VERSION = 5.0;
395 | };
396 | name = Debug;
397 | };
398 | B2C7169C2851E09F0020B958 /* Release */ = {
399 | isa = XCBuildConfiguration;
400 | buildSettings = {
401 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
402 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
403 | CODE_SIGN_ENTITLEMENTS = macOS/macOS.entitlements;
404 | CODE_SIGN_STYLE = Automatic;
405 | COMBINE_HIDPI_IMAGES = YES;
406 | CURRENT_PROJECT_VERSION = 1;
407 | DEVELOPMENT_TEAM = FZ42RW4USG;
408 | ENABLE_HARDENED_RUNTIME = YES;
409 | ENABLE_PREVIEWS = YES;
410 | GENERATE_INFOPLIST_FILE = YES;
411 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
412 | LD_RUNPATH_SEARCH_PATHS = (
413 | "$(inherited)",
414 | "@executable_path/../Frameworks",
415 | );
416 | MACOSX_DEPLOYMENT_TARGET = 12.3;
417 | MARKETING_VERSION = 1.0;
418 | PRODUCT_BUNDLE_IDENTIFIER = "ishelopaev.d3-custom-navigation-swiftui";
419 | PRODUCT_NAME = "d3-custom-navigation-swiftui";
420 | SDKROOT = macosx;
421 | SWIFT_EMIT_LOC_STRINGS = YES;
422 | SWIFT_VERSION = 5.0;
423 | };
424 | name = Release;
425 | };
426 | /* End XCBuildConfiguration section */
427 |
428 | /* Begin XCConfigurationList section */
429 | B2C7167D2851E09E0020B958 /* Build configuration list for PBXProject "d3-custom-navigation-swiftui" */ = {
430 | isa = XCConfigurationList;
431 | buildConfigurations = (
432 | B2C716952851E09F0020B958 /* Debug */,
433 | B2C716962851E09F0020B958 /* Release */,
434 | );
435 | defaultConfigurationIsVisible = 0;
436 | defaultConfigurationName = Release;
437 | };
438 | B2C716972851E09F0020B958 /* Build configuration list for PBXNativeTarget "d3-custom-navigation-swiftui (iOS)" */ = {
439 | isa = XCConfigurationList;
440 | buildConfigurations = (
441 | B2C716982851E09F0020B958 /* Debug */,
442 | B2C716992851E09F0020B958 /* Release */,
443 | );
444 | defaultConfigurationIsVisible = 0;
445 | defaultConfigurationName = Release;
446 | };
447 | B2C7169A2851E09F0020B958 /* Build configuration list for PBXNativeTarget "d3-custom-navigation-swiftui (macOS)" */ = {
448 | isa = XCConfigurationList;
449 | buildConfigurations = (
450 | B2C7169B2851E09F0020B958 /* Debug */,
451 | B2C7169C2851E09F0020B958 /* Release */,
452 | );
453 | defaultConfigurationIsVisible = 0;
454 | defaultConfigurationName = Release;
455 | };
456 | /* End XCConfigurationList section */
457 | };
458 | rootObject = B2C7167A2851E09E0020B958 /* Project object */;
459 | }
460 |
--------------------------------------------------------------------------------