├── Glow
├── Assets.xcassets
│ ├── Contents.json
│ ├── shot.imageset
│ │ ├── shot.png
│ │ └── Contents.json
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── Preview Content
│ └── Preview Assets.xcassets
│ │ └── Contents.json
├── GlowApp.swift
├── ContentView.swift
└── Info.plist
├── README.md
├── Glow.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── xcuserdata
│ └── philipdavis.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
└── project.pbxproj
├── GlowTests
├── Info.plist
└── GlowTests.swift
└── GlowUITests
├── Info.plist
└── GlowUITests.swift
/Glow/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
--------------------------------------------------------------------------------
/Glow/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Glow/Assets.xcassets/shot.imageset/shot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/philipcdavis/swiftui-photoTintedShadows-example/HEAD/Glow/Assets.xcassets/shot.imageset/shot.png
--------------------------------------------------------------------------------
/Glow.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Glow/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 |
--------------------------------------------------------------------------------
/Glow/GlowApp.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GlowApp.swift
3 | // Glow
4 | //
5 | // Created by Philip Davis on 1/13/21.
6 | //
7 |
8 | import SwiftUI
9 |
10 | @main
11 | struct GlowApp: App {
12 | var body: some Scene {
13 | WindowGroup {
14 | ContentView()
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Glow.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Glow/Assets.xcassets/shot.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "shot.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Glow.xcodeproj/xcuserdata/philipdavis.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | Glow.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/GlowTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/GlowUITests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Glow/ContentView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ContentView.swift
3 | // Glow
4 | //
5 | // Created by Philip Davis on 1/13/21.
6 | //
7 |
8 | import SwiftUI
9 |
10 | struct ContentView: View {
11 | @State private var playing = true
12 |
13 | var Photo: some View = Image("shot")
14 | .resizable()
15 | .aspectRatio(contentMode: .fit)
16 |
17 |
18 | var body: some View {
19 | Photo
20 | .cornerRadius(64)
21 | .blur(radius: 30)
22 | .offset(y: 10)
23 | .opacity(playing ? 0.9 : 0)
24 | .frame(width: playing ? 300 : 260)
25 | .overlay(Photo.cornerRadius(12))
26 | .onTapGesture {
27 | playing.toggle()
28 | }
29 | .animation(.spring(response: 0.3, dampingFraction: 0.5))
30 | }
31 | }
32 |
33 | struct ContentView_Previews: PreviewProvider {
34 | static var previews: some View {
35 | ContentView()
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/GlowTests/GlowTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GlowTests.swift
3 | // GlowTests
4 | //
5 | // Created by Philip Davis on 1/13/21.
6 | //
7 |
8 | import XCTest
9 | @testable import Glow
10 |
11 | class GlowTests: XCTestCase {
12 |
13 | override func setUpWithError() throws {
14 | // Put setup code here. This method is called before the invocation of each test method in the class.
15 | }
16 |
17 | override func tearDownWithError() throws {
18 | // Put teardown code here. This method is called after the invocation of each test method in the class.
19 | }
20 |
21 | func testExample() throws {
22 | // This is an example of a functional test case.
23 | // Use XCTAssert and related functions to verify your tests produce the correct results.
24 | }
25 |
26 | func testPerformanceExample() throws {
27 | // This is an example of a performance test case.
28 | self.measure {
29 | // Put the code you want to measure the time of here.
30 | }
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/GlowUITests/GlowUITests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // GlowUITests.swift
3 | // GlowUITests
4 | //
5 | // Created by Philip Davis on 1/13/21.
6 | //
7 |
8 | import XCTest
9 |
10 | class GlowUITests: XCTestCase {
11 |
12 | override func setUpWithError() throws {
13 | // Put setup code here. This method is called before the invocation of each test method in the class.
14 |
15 | // In UI tests it is usually best to stop immediately when a failure occurs.
16 | continueAfterFailure = false
17 |
18 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
19 | }
20 |
21 | override func tearDownWithError() throws {
22 | // Put teardown code here. This method is called after the invocation of each test method in the class.
23 | }
24 |
25 | func testExample() throws {
26 | // UI tests must launch the application that they test.
27 | let app = XCUIApplication()
28 | app.launch()
29 |
30 | // Use recording to get started writing UI tests.
31 | // Use XCTAssert and related functions to verify your tests produce the correct results.
32 | }
33 |
34 | func testLaunchPerformance() throws {
35 | if #available(macOS 10.15, iOS 13.0, tvOS 13.0, *) {
36 | // This measures how long it takes to launch your application.
37 | measure(metrics: [XCTApplicationLaunchMetric()]) {
38 | XCUIApplication().launch()
39 | }
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/Glow/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UIApplicationSceneManifest
24 |
25 | UIApplicationSupportsMultipleScenes
26 |
27 |
28 | UIApplicationSupportsIndirectInputEvents
29 |
30 | UILaunchScreen
31 |
32 | UIRequiredDeviceCapabilities
33 |
34 | armv7
35 |
36 | UISupportedInterfaceOrientations
37 |
38 | UIInterfaceOrientationPortrait
39 | UIInterfaceOrientationLandscapeLeft
40 | UIInterfaceOrientationLandscapeRight
41 |
42 | UISupportedInterfaceOrientations~ipad
43 |
44 | UIInterfaceOrientationPortrait
45 | UIInterfaceOrientationPortraitUpsideDown
46 | UIInterfaceOrientationLandscapeLeft
47 | UIInterfaceOrientationLandscapeRight
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/Glow/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" : "1x",
76 | "size" : "76x76"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "scale" : "2x",
81 | "size" : "76x76"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "scale" : "2x",
86 | "size" : "83.5x83.5"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "scale" : "1x",
91 | "size" : "1024x1024"
92 | }
93 | ],
94 | "info" : {
95 | "author" : "xcode",
96 | "version" : 1
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/Glow.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 483CBB4A25AF440400984AF2 /* GlowApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 483CBB4925AF440400984AF2 /* GlowApp.swift */; };
11 | 483CBB4C25AF440400984AF2 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 483CBB4B25AF440400984AF2 /* ContentView.swift */; };
12 | 483CBB4E25AF440F00984AF2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 483CBB4D25AF440F00984AF2 /* Assets.xcassets */; };
13 | 483CBB5125AF440F00984AF2 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 483CBB5025AF440F00984AF2 /* Preview Assets.xcassets */; };
14 | 483CBB5C25AF441000984AF2 /* GlowTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 483CBB5B25AF441000984AF2 /* GlowTests.swift */; };
15 | 483CBB6725AF441000984AF2 /* GlowUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 483CBB6625AF441000984AF2 /* GlowUITests.swift */; };
16 | /* End PBXBuildFile section */
17 |
18 | /* Begin PBXContainerItemProxy section */
19 | 483CBB5825AF441000984AF2 /* PBXContainerItemProxy */ = {
20 | isa = PBXContainerItemProxy;
21 | containerPortal = 483CBB3E25AF440400984AF2 /* Project object */;
22 | proxyType = 1;
23 | remoteGlobalIDString = 483CBB4525AF440400984AF2;
24 | remoteInfo = Glow;
25 | };
26 | 483CBB6325AF441000984AF2 /* PBXContainerItemProxy */ = {
27 | isa = PBXContainerItemProxy;
28 | containerPortal = 483CBB3E25AF440400984AF2 /* Project object */;
29 | proxyType = 1;
30 | remoteGlobalIDString = 483CBB4525AF440400984AF2;
31 | remoteInfo = Glow;
32 | };
33 | /* End PBXContainerItemProxy section */
34 |
35 | /* Begin PBXFileReference section */
36 | 483CBB4625AF440400984AF2 /* Glow.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Glow.app; sourceTree = BUILT_PRODUCTS_DIR; };
37 | 483CBB4925AF440400984AF2 /* GlowApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlowApp.swift; sourceTree = ""; };
38 | 483CBB4B25AF440400984AF2 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
39 | 483CBB4D25AF440F00984AF2 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
40 | 483CBB5025AF440F00984AF2 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
41 | 483CBB5225AF440F00984AF2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
42 | 483CBB5725AF441000984AF2 /* GlowTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GlowTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
43 | 483CBB5B25AF441000984AF2 /* GlowTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlowTests.swift; sourceTree = ""; };
44 | 483CBB5D25AF441000984AF2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
45 | 483CBB6225AF441000984AF2 /* GlowUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GlowUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
46 | 483CBB6625AF441000984AF2 /* GlowUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlowUITests.swift; sourceTree = ""; };
47 | 483CBB6825AF441000984AF2 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
48 | /* End PBXFileReference section */
49 |
50 | /* Begin PBXFrameworksBuildPhase section */
51 | 483CBB4325AF440400984AF2 /* Frameworks */ = {
52 | isa = PBXFrameworksBuildPhase;
53 | buildActionMask = 2147483647;
54 | files = (
55 | );
56 | runOnlyForDeploymentPostprocessing = 0;
57 | };
58 | 483CBB5425AF441000984AF2 /* Frameworks */ = {
59 | isa = PBXFrameworksBuildPhase;
60 | buildActionMask = 2147483647;
61 | files = (
62 | );
63 | runOnlyForDeploymentPostprocessing = 0;
64 | };
65 | 483CBB5F25AF441000984AF2 /* Frameworks */ = {
66 | isa = PBXFrameworksBuildPhase;
67 | buildActionMask = 2147483647;
68 | files = (
69 | );
70 | runOnlyForDeploymentPostprocessing = 0;
71 | };
72 | /* End PBXFrameworksBuildPhase section */
73 |
74 | /* Begin PBXGroup section */
75 | 483CBB3D25AF440400984AF2 = {
76 | isa = PBXGroup;
77 | children = (
78 | 483CBB4825AF440400984AF2 /* Glow */,
79 | 483CBB5A25AF441000984AF2 /* GlowTests */,
80 | 483CBB6525AF441000984AF2 /* GlowUITests */,
81 | 483CBB4725AF440400984AF2 /* Products */,
82 | );
83 | sourceTree = "";
84 | };
85 | 483CBB4725AF440400984AF2 /* Products */ = {
86 | isa = PBXGroup;
87 | children = (
88 | 483CBB4625AF440400984AF2 /* Glow.app */,
89 | 483CBB5725AF441000984AF2 /* GlowTests.xctest */,
90 | 483CBB6225AF441000984AF2 /* GlowUITests.xctest */,
91 | );
92 | name = Products;
93 | sourceTree = "";
94 | };
95 | 483CBB4825AF440400984AF2 /* Glow */ = {
96 | isa = PBXGroup;
97 | children = (
98 | 483CBB4925AF440400984AF2 /* GlowApp.swift */,
99 | 483CBB4B25AF440400984AF2 /* ContentView.swift */,
100 | 483CBB4D25AF440F00984AF2 /* Assets.xcassets */,
101 | 483CBB5225AF440F00984AF2 /* Info.plist */,
102 | 483CBB4F25AF440F00984AF2 /* Preview Content */,
103 | );
104 | path = Glow;
105 | sourceTree = "";
106 | };
107 | 483CBB4F25AF440F00984AF2 /* Preview Content */ = {
108 | isa = PBXGroup;
109 | children = (
110 | 483CBB5025AF440F00984AF2 /* Preview Assets.xcassets */,
111 | );
112 | path = "Preview Content";
113 | sourceTree = "";
114 | };
115 | 483CBB5A25AF441000984AF2 /* GlowTests */ = {
116 | isa = PBXGroup;
117 | children = (
118 | 483CBB5B25AF441000984AF2 /* GlowTests.swift */,
119 | 483CBB5D25AF441000984AF2 /* Info.plist */,
120 | );
121 | path = GlowTests;
122 | sourceTree = "";
123 | };
124 | 483CBB6525AF441000984AF2 /* GlowUITests */ = {
125 | isa = PBXGroup;
126 | children = (
127 | 483CBB6625AF441000984AF2 /* GlowUITests.swift */,
128 | 483CBB6825AF441000984AF2 /* Info.plist */,
129 | );
130 | path = GlowUITests;
131 | sourceTree = "";
132 | };
133 | /* End PBXGroup section */
134 |
135 | /* Begin PBXNativeTarget section */
136 | 483CBB4525AF440400984AF2 /* Glow */ = {
137 | isa = PBXNativeTarget;
138 | buildConfigurationList = 483CBB6B25AF441000984AF2 /* Build configuration list for PBXNativeTarget "Glow" */;
139 | buildPhases = (
140 | 483CBB4225AF440400984AF2 /* Sources */,
141 | 483CBB4325AF440400984AF2 /* Frameworks */,
142 | 483CBB4425AF440400984AF2 /* Resources */,
143 | );
144 | buildRules = (
145 | );
146 | dependencies = (
147 | );
148 | name = Glow;
149 | productName = Glow;
150 | productReference = 483CBB4625AF440400984AF2 /* Glow.app */;
151 | productType = "com.apple.product-type.application";
152 | };
153 | 483CBB5625AF441000984AF2 /* GlowTests */ = {
154 | isa = PBXNativeTarget;
155 | buildConfigurationList = 483CBB6E25AF441000984AF2 /* Build configuration list for PBXNativeTarget "GlowTests" */;
156 | buildPhases = (
157 | 483CBB5325AF441000984AF2 /* Sources */,
158 | 483CBB5425AF441000984AF2 /* Frameworks */,
159 | 483CBB5525AF441000984AF2 /* Resources */,
160 | );
161 | buildRules = (
162 | );
163 | dependencies = (
164 | 483CBB5925AF441000984AF2 /* PBXTargetDependency */,
165 | );
166 | name = GlowTests;
167 | productName = GlowTests;
168 | productReference = 483CBB5725AF441000984AF2 /* GlowTests.xctest */;
169 | productType = "com.apple.product-type.bundle.unit-test";
170 | };
171 | 483CBB6125AF441000984AF2 /* GlowUITests */ = {
172 | isa = PBXNativeTarget;
173 | buildConfigurationList = 483CBB7125AF441000984AF2 /* Build configuration list for PBXNativeTarget "GlowUITests" */;
174 | buildPhases = (
175 | 483CBB5E25AF441000984AF2 /* Sources */,
176 | 483CBB5F25AF441000984AF2 /* Frameworks */,
177 | 483CBB6025AF441000984AF2 /* Resources */,
178 | );
179 | buildRules = (
180 | );
181 | dependencies = (
182 | 483CBB6425AF441000984AF2 /* PBXTargetDependency */,
183 | );
184 | name = GlowUITests;
185 | productName = GlowUITests;
186 | productReference = 483CBB6225AF441000984AF2 /* GlowUITests.xctest */;
187 | productType = "com.apple.product-type.bundle.ui-testing";
188 | };
189 | /* End PBXNativeTarget section */
190 |
191 | /* Begin PBXProject section */
192 | 483CBB3E25AF440400984AF2 /* Project object */ = {
193 | isa = PBXProject;
194 | attributes = {
195 | LastSwiftUpdateCheck = 1230;
196 | LastUpgradeCheck = 1230;
197 | TargetAttributes = {
198 | 483CBB4525AF440400984AF2 = {
199 | CreatedOnToolsVersion = 12.3;
200 | };
201 | 483CBB5625AF441000984AF2 = {
202 | CreatedOnToolsVersion = 12.3;
203 | TestTargetID = 483CBB4525AF440400984AF2;
204 | };
205 | 483CBB6125AF441000984AF2 = {
206 | CreatedOnToolsVersion = 12.3;
207 | TestTargetID = 483CBB4525AF440400984AF2;
208 | };
209 | };
210 | };
211 | buildConfigurationList = 483CBB4125AF440400984AF2 /* Build configuration list for PBXProject "Glow" */;
212 | compatibilityVersion = "Xcode 9.3";
213 | developmentRegion = en;
214 | hasScannedForEncodings = 0;
215 | knownRegions = (
216 | en,
217 | Base,
218 | );
219 | mainGroup = 483CBB3D25AF440400984AF2;
220 | productRefGroup = 483CBB4725AF440400984AF2 /* Products */;
221 | projectDirPath = "";
222 | projectRoot = "";
223 | targets = (
224 | 483CBB4525AF440400984AF2 /* Glow */,
225 | 483CBB5625AF441000984AF2 /* GlowTests */,
226 | 483CBB6125AF441000984AF2 /* GlowUITests */,
227 | );
228 | };
229 | /* End PBXProject section */
230 |
231 | /* Begin PBXResourcesBuildPhase section */
232 | 483CBB4425AF440400984AF2 /* Resources */ = {
233 | isa = PBXResourcesBuildPhase;
234 | buildActionMask = 2147483647;
235 | files = (
236 | 483CBB5125AF440F00984AF2 /* Preview Assets.xcassets in Resources */,
237 | 483CBB4E25AF440F00984AF2 /* Assets.xcassets in Resources */,
238 | );
239 | runOnlyForDeploymentPostprocessing = 0;
240 | };
241 | 483CBB5525AF441000984AF2 /* Resources */ = {
242 | isa = PBXResourcesBuildPhase;
243 | buildActionMask = 2147483647;
244 | files = (
245 | );
246 | runOnlyForDeploymentPostprocessing = 0;
247 | };
248 | 483CBB6025AF441000984AF2 /* Resources */ = {
249 | isa = PBXResourcesBuildPhase;
250 | buildActionMask = 2147483647;
251 | files = (
252 | );
253 | runOnlyForDeploymentPostprocessing = 0;
254 | };
255 | /* End PBXResourcesBuildPhase section */
256 |
257 | /* Begin PBXSourcesBuildPhase section */
258 | 483CBB4225AF440400984AF2 /* Sources */ = {
259 | isa = PBXSourcesBuildPhase;
260 | buildActionMask = 2147483647;
261 | files = (
262 | 483CBB4C25AF440400984AF2 /* ContentView.swift in Sources */,
263 | 483CBB4A25AF440400984AF2 /* GlowApp.swift in Sources */,
264 | );
265 | runOnlyForDeploymentPostprocessing = 0;
266 | };
267 | 483CBB5325AF441000984AF2 /* Sources */ = {
268 | isa = PBXSourcesBuildPhase;
269 | buildActionMask = 2147483647;
270 | files = (
271 | 483CBB5C25AF441000984AF2 /* GlowTests.swift in Sources */,
272 | );
273 | runOnlyForDeploymentPostprocessing = 0;
274 | };
275 | 483CBB5E25AF441000984AF2 /* Sources */ = {
276 | isa = PBXSourcesBuildPhase;
277 | buildActionMask = 2147483647;
278 | files = (
279 | 483CBB6725AF441000984AF2 /* GlowUITests.swift in Sources */,
280 | );
281 | runOnlyForDeploymentPostprocessing = 0;
282 | };
283 | /* End PBXSourcesBuildPhase section */
284 |
285 | /* Begin PBXTargetDependency section */
286 | 483CBB5925AF441000984AF2 /* PBXTargetDependency */ = {
287 | isa = PBXTargetDependency;
288 | target = 483CBB4525AF440400984AF2 /* Glow */;
289 | targetProxy = 483CBB5825AF441000984AF2 /* PBXContainerItemProxy */;
290 | };
291 | 483CBB6425AF441000984AF2 /* PBXTargetDependency */ = {
292 | isa = PBXTargetDependency;
293 | target = 483CBB4525AF440400984AF2 /* Glow */;
294 | targetProxy = 483CBB6325AF441000984AF2 /* PBXContainerItemProxy */;
295 | };
296 | /* End PBXTargetDependency section */
297 |
298 | /* Begin XCBuildConfiguration section */
299 | 483CBB6925AF441000984AF2 /* Debug */ = {
300 | isa = XCBuildConfiguration;
301 | buildSettings = {
302 | ALWAYS_SEARCH_USER_PATHS = NO;
303 | CLANG_ANALYZER_NONNULL = YES;
304 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
305 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
306 | CLANG_CXX_LIBRARY = "libc++";
307 | CLANG_ENABLE_MODULES = YES;
308 | CLANG_ENABLE_OBJC_ARC = YES;
309 | CLANG_ENABLE_OBJC_WEAK = YES;
310 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
311 | CLANG_WARN_BOOL_CONVERSION = YES;
312 | CLANG_WARN_COMMA = YES;
313 | CLANG_WARN_CONSTANT_CONVERSION = YES;
314 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
315 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
316 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
317 | CLANG_WARN_EMPTY_BODY = YES;
318 | CLANG_WARN_ENUM_CONVERSION = YES;
319 | CLANG_WARN_INFINITE_RECURSION = YES;
320 | CLANG_WARN_INT_CONVERSION = YES;
321 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
322 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
323 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
324 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
325 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
326 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
327 | CLANG_WARN_STRICT_PROTOTYPES = YES;
328 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
329 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
330 | CLANG_WARN_UNREACHABLE_CODE = YES;
331 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
332 | COPY_PHASE_STRIP = NO;
333 | DEBUG_INFORMATION_FORMAT = dwarf;
334 | ENABLE_STRICT_OBJC_MSGSEND = YES;
335 | ENABLE_TESTABILITY = YES;
336 | GCC_C_LANGUAGE_STANDARD = gnu11;
337 | GCC_DYNAMIC_NO_PIC = NO;
338 | GCC_NO_COMMON_BLOCKS = YES;
339 | GCC_OPTIMIZATION_LEVEL = 0;
340 | GCC_PREPROCESSOR_DEFINITIONS = (
341 | "DEBUG=1",
342 | "$(inherited)",
343 | );
344 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
345 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
346 | GCC_WARN_UNDECLARED_SELECTOR = YES;
347 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
348 | GCC_WARN_UNUSED_FUNCTION = YES;
349 | GCC_WARN_UNUSED_VARIABLE = YES;
350 | IPHONEOS_DEPLOYMENT_TARGET = 14.3;
351 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
352 | MTL_FAST_MATH = YES;
353 | ONLY_ACTIVE_ARCH = YES;
354 | SDKROOT = iphoneos;
355 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
356 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
357 | };
358 | name = Debug;
359 | };
360 | 483CBB6A25AF441000984AF2 /* Release */ = {
361 | isa = XCBuildConfiguration;
362 | buildSettings = {
363 | ALWAYS_SEARCH_USER_PATHS = NO;
364 | CLANG_ANALYZER_NONNULL = YES;
365 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
366 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
367 | CLANG_CXX_LIBRARY = "libc++";
368 | CLANG_ENABLE_MODULES = YES;
369 | CLANG_ENABLE_OBJC_ARC = YES;
370 | CLANG_ENABLE_OBJC_WEAK = YES;
371 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
372 | CLANG_WARN_BOOL_CONVERSION = YES;
373 | CLANG_WARN_COMMA = YES;
374 | CLANG_WARN_CONSTANT_CONVERSION = YES;
375 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
376 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
377 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
378 | CLANG_WARN_EMPTY_BODY = YES;
379 | CLANG_WARN_ENUM_CONVERSION = YES;
380 | CLANG_WARN_INFINITE_RECURSION = YES;
381 | CLANG_WARN_INT_CONVERSION = YES;
382 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
383 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
384 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
385 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
386 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
387 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
388 | CLANG_WARN_STRICT_PROTOTYPES = YES;
389 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
390 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
391 | CLANG_WARN_UNREACHABLE_CODE = YES;
392 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
393 | COPY_PHASE_STRIP = NO;
394 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
395 | ENABLE_NS_ASSERTIONS = NO;
396 | ENABLE_STRICT_OBJC_MSGSEND = YES;
397 | GCC_C_LANGUAGE_STANDARD = gnu11;
398 | GCC_NO_COMMON_BLOCKS = YES;
399 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
400 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
401 | GCC_WARN_UNDECLARED_SELECTOR = YES;
402 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
403 | GCC_WARN_UNUSED_FUNCTION = YES;
404 | GCC_WARN_UNUSED_VARIABLE = YES;
405 | IPHONEOS_DEPLOYMENT_TARGET = 14.3;
406 | MTL_ENABLE_DEBUG_INFO = NO;
407 | MTL_FAST_MATH = YES;
408 | SDKROOT = iphoneos;
409 | SWIFT_COMPILATION_MODE = wholemodule;
410 | SWIFT_OPTIMIZATION_LEVEL = "-O";
411 | VALIDATE_PRODUCT = YES;
412 | };
413 | name = Release;
414 | };
415 | 483CBB6C25AF441000984AF2 /* Debug */ = {
416 | isa = XCBuildConfiguration;
417 | buildSettings = {
418 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
419 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
420 | CODE_SIGN_STYLE = Automatic;
421 | DEVELOPMENT_ASSET_PATHS = "\"Glow/Preview Content\"";
422 | ENABLE_PREVIEWS = YES;
423 | INFOPLIST_FILE = Glow/Info.plist;
424 | IPHONEOS_DEPLOYMENT_TARGET = 14.0;
425 | LD_RUNPATH_SEARCH_PATHS = (
426 | "$(inherited)",
427 | "@executable_path/Frameworks",
428 | );
429 | PRODUCT_BUNDLE_IDENTIFIER = com.philipcdavis.Glow;
430 | PRODUCT_NAME = "$(TARGET_NAME)";
431 | SWIFT_VERSION = 5.0;
432 | TARGETED_DEVICE_FAMILY = "1,2";
433 | };
434 | name = Debug;
435 | };
436 | 483CBB6D25AF441000984AF2 /* Release */ = {
437 | isa = XCBuildConfiguration;
438 | buildSettings = {
439 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
440 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
441 | CODE_SIGN_STYLE = Automatic;
442 | DEVELOPMENT_ASSET_PATHS = "\"Glow/Preview Content\"";
443 | ENABLE_PREVIEWS = YES;
444 | INFOPLIST_FILE = Glow/Info.plist;
445 | IPHONEOS_DEPLOYMENT_TARGET = 14.0;
446 | LD_RUNPATH_SEARCH_PATHS = (
447 | "$(inherited)",
448 | "@executable_path/Frameworks",
449 | );
450 | PRODUCT_BUNDLE_IDENTIFIER = com.philipcdavis.Glow;
451 | PRODUCT_NAME = "$(TARGET_NAME)";
452 | SWIFT_VERSION = 5.0;
453 | TARGETED_DEVICE_FAMILY = "1,2";
454 | };
455 | name = Release;
456 | };
457 | 483CBB6F25AF441000984AF2 /* Debug */ = {
458 | isa = XCBuildConfiguration;
459 | buildSettings = {
460 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
461 | BUNDLE_LOADER = "$(TEST_HOST)";
462 | CODE_SIGN_STYLE = Automatic;
463 | INFOPLIST_FILE = GlowTests/Info.plist;
464 | IPHONEOS_DEPLOYMENT_TARGET = 14.0;
465 | LD_RUNPATH_SEARCH_PATHS = (
466 | "$(inherited)",
467 | "@executable_path/Frameworks",
468 | "@loader_path/Frameworks",
469 | );
470 | PRODUCT_BUNDLE_IDENTIFIER = com.philipcdavis.GlowTests;
471 | PRODUCT_NAME = "$(TARGET_NAME)";
472 | SWIFT_VERSION = 5.0;
473 | TARGETED_DEVICE_FAMILY = "1,2";
474 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Glow.app/Glow";
475 | };
476 | name = Debug;
477 | };
478 | 483CBB7025AF441000984AF2 /* Release */ = {
479 | isa = XCBuildConfiguration;
480 | buildSettings = {
481 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
482 | BUNDLE_LOADER = "$(TEST_HOST)";
483 | CODE_SIGN_STYLE = Automatic;
484 | INFOPLIST_FILE = GlowTests/Info.plist;
485 | IPHONEOS_DEPLOYMENT_TARGET = 14.0;
486 | LD_RUNPATH_SEARCH_PATHS = (
487 | "$(inherited)",
488 | "@executable_path/Frameworks",
489 | "@loader_path/Frameworks",
490 | );
491 | PRODUCT_BUNDLE_IDENTIFIER = com.philipcdavis.GlowTests;
492 | PRODUCT_NAME = "$(TARGET_NAME)";
493 | SWIFT_VERSION = 5.0;
494 | TARGETED_DEVICE_FAMILY = "1,2";
495 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Glow.app/Glow";
496 | };
497 | name = Release;
498 | };
499 | 483CBB7225AF441000984AF2 /* Debug */ = {
500 | isa = XCBuildConfiguration;
501 | buildSettings = {
502 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
503 | CODE_SIGN_STYLE = Automatic;
504 | INFOPLIST_FILE = GlowUITests/Info.plist;
505 | LD_RUNPATH_SEARCH_PATHS = (
506 | "$(inherited)",
507 | "@executable_path/Frameworks",
508 | "@loader_path/Frameworks",
509 | );
510 | PRODUCT_BUNDLE_IDENTIFIER = com.philipcdavis.GlowUITests;
511 | PRODUCT_NAME = "$(TARGET_NAME)";
512 | SWIFT_VERSION = 5.0;
513 | TARGETED_DEVICE_FAMILY = "1,2";
514 | TEST_TARGET_NAME = Glow;
515 | };
516 | name = Debug;
517 | };
518 | 483CBB7325AF441000984AF2 /* Release */ = {
519 | isa = XCBuildConfiguration;
520 | buildSettings = {
521 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
522 | CODE_SIGN_STYLE = Automatic;
523 | INFOPLIST_FILE = GlowUITests/Info.plist;
524 | LD_RUNPATH_SEARCH_PATHS = (
525 | "$(inherited)",
526 | "@executable_path/Frameworks",
527 | "@loader_path/Frameworks",
528 | );
529 | PRODUCT_BUNDLE_IDENTIFIER = com.philipcdavis.GlowUITests;
530 | PRODUCT_NAME = "$(TARGET_NAME)";
531 | SWIFT_VERSION = 5.0;
532 | TARGETED_DEVICE_FAMILY = "1,2";
533 | TEST_TARGET_NAME = Glow;
534 | };
535 | name = Release;
536 | };
537 | /* End XCBuildConfiguration section */
538 |
539 | /* Begin XCConfigurationList section */
540 | 483CBB4125AF440400984AF2 /* Build configuration list for PBXProject "Glow" */ = {
541 | isa = XCConfigurationList;
542 | buildConfigurations = (
543 | 483CBB6925AF441000984AF2 /* Debug */,
544 | 483CBB6A25AF441000984AF2 /* Release */,
545 | );
546 | defaultConfigurationIsVisible = 0;
547 | defaultConfigurationName = Release;
548 | };
549 | 483CBB6B25AF441000984AF2 /* Build configuration list for PBXNativeTarget "Glow" */ = {
550 | isa = XCConfigurationList;
551 | buildConfigurations = (
552 | 483CBB6C25AF441000984AF2 /* Debug */,
553 | 483CBB6D25AF441000984AF2 /* Release */,
554 | );
555 | defaultConfigurationIsVisible = 0;
556 | defaultConfigurationName = Release;
557 | };
558 | 483CBB6E25AF441000984AF2 /* Build configuration list for PBXNativeTarget "GlowTests" */ = {
559 | isa = XCConfigurationList;
560 | buildConfigurations = (
561 | 483CBB6F25AF441000984AF2 /* Debug */,
562 | 483CBB7025AF441000984AF2 /* Release */,
563 | );
564 | defaultConfigurationIsVisible = 0;
565 | defaultConfigurationName = Release;
566 | };
567 | 483CBB7125AF441000984AF2 /* Build configuration list for PBXNativeTarget "GlowUITests" */ = {
568 | isa = XCConfigurationList;
569 | buildConfigurations = (
570 | 483CBB7225AF441000984AF2 /* Debug */,
571 | 483CBB7325AF441000984AF2 /* Release */,
572 | );
573 | defaultConfigurationIsVisible = 0;
574 | defaultConfigurationName = Release;
575 | };
576 | /* End XCConfigurationList section */
577 | };
578 | rootObject = 483CBB3E25AF440400984AF2 /* Project object */;
579 | }
580 |
--------------------------------------------------------------------------------