.Context(
249 | coordinator: coordinator,
250 | transaction: Transaction()
251 | )
252 | let container = adaptor.makeUIViewController(context: context)
253 | adaptor.updateUIViewController(container, context: context)
254 | return Context(container: container, coordinator: coordinator)
255 | }
256 | }
257 |
258 | private struct ContentView: View {
259 |
260 | var body: some View {
261 | List { Text("") }
262 | }
263 | }
264 |
265 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # DynamicOverlay
2 |
3 |
4 | DynamicOverlay is a SwiftUI library. It makes easier to develop overlay based interfaces, such as the one presented in the Apple Maps, Stocks or Shortcuts apps.
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | ---
17 |
18 | - [Requirements](#requirements)
19 | - [Getting started](#getting-started)
20 | - [Examples](#examples)
21 | - [Magnetic notch overlay](#magnetic-notch-overlay)
22 | - [Specifying the notches](#specifying-the-notches)
23 | - [Drag gesture support](#drag-gesture-support)
24 | - [Scroll view support](#scroll-view-support)
25 | - [Responding to overlay update](#responding-to-overlay-update)
26 | - [Moving the overlay](#moving-the-overlay)
27 | - [Disabling notches](#disabling-notches)
28 | - [Installation](#installation)
29 | - [CocoaPods](#cocoapods)
30 | - [Carthage](#carthage)
31 | - [Swift Package Manager](#swift-package-manager)
32 | - [Under the hood](#under-the-hood)
33 | - [Release](#release)
34 | - [Author](#author)
35 | - [License](#license)
36 |
37 | ## Requirements
38 |
39 | `DynamicOverlay` is written in Swift 5. Compatible with iOS 13.0+.
40 |
41 | ## Getting started
42 |
43 | A dynamic overlay is an overlay that dynamically reveals or hides the content underneath it.
44 |
45 | You add a dynamic overlay as a [regular one](https://developer.apple.com/documentation/swiftui/view/overlay(_:alignment:)) using a view modifier:
46 |
47 | ```swift
48 | Color.blue.dynamicOverlay(Color.red)
49 | ```
50 | Its behavior is defined by the `DynamicOverlayBehavior` associated to it if any.
51 |
52 | ```swift
53 |
54 | Color.blue
55 | .dynamicOverlay(Color.red)
56 | .dynamicOverlayBehavior(myOverlayBehavior)
57 |
58 | var myOverlayBehavior: some DynamicOverlayBehavior {
59 | ...
60 | }
61 | ```
62 | If you do not specify a behavior in the overlay view hierarchy, it uses a default one.
63 |
64 | ## Examples
65 |
66 | - [Map App](https://github.com/faberNovel/DynamicOverlay/blob/main/DynamicOverlay_Example/DynamicOverlay_Example/View/MapRootView.swift)
67 |
68 | | Min | Max |
69 | | ------------------- | ------------------ |
70 | |
|
|
71 |
72 | ## Magnetic notch overlay
73 |
74 | `MagneticNotchOverlayBehavior` is a `DynamicOverlayBehavior` instance. It is the only behavior available for now.
75 |
76 | It describes an overlay that can be dragged up and down alongside predefined notches. Whenever a drag gesture ends, the overlay motion will continue until it reaches one of its notches.
77 |
78 | ### Specifying the notches
79 |
80 | The preferred way to define the notches is to declare an `CaseIterable` enum:
81 |
82 | ```swift
83 | enum Notch: CaseIterable, Equatable {
84 | case min, max
85 | }
86 | ```
87 | You specify the dimensions of each notch when you create a `MagneticNotchOverlayBehavior` instance:
88 |
89 | ```swift
90 | @State var isCompact = false
91 |
92 | var myOverlayBehavior: some DynamicOverlayBehavior {
93 | MagneticNotchOverlayBehavior { notch in
94 | switch notch {
95 | case .max:
96 | return isCompact ? .fractional(0.5) : .fractional(0.8)
97 | case .min:
98 | return .fractional(0.3)
99 | }
100 | }
101 | }
102 | ```
103 | There are two kinds of dimension:
104 | ```swift
105 | extension NotchDimension {
106 |
107 | /// Creates a dimension with an absolute point value.
108 | static func absolute(_ value: Double) -> NotchDimension
109 |
110 | /// Creates a dimension that is computed as a fraction of the height of the overlay parent view.
111 | static func fractional(_ value: Double) -> NotchDimension
112 | }
113 | ```
114 | ### Drag gesture support
115 |
116 | By default, all the content of the overlay is draggable but you can limit this behavior using the `draggable` view modifier.
117 |
118 | Here only the list header is draggable:
119 |
120 | ```swift
121 | var body: some View {
122 | Color.green
123 | .dynamicOverlay(myOverlayContent)
124 | .dynamicOverlayBehavior(myOverlayBehavior)
125 | }
126 |
127 | var myOverlayContent: some View {
128 | VStack {
129 | Text("Header").draggable()
130 | List {
131 | Text("Row 1")
132 | Text("Row 2")
133 | Text("Row 3")
134 | }
135 | }
136 | }
137 |
138 | var myOverlayBehavior: some DynamicOverlayBehavior {
139 | MagneticNotchOverlayBehavior { ... }
140 | }
141 | ```
142 | Here we disable the drag gesture entirely:
143 | ```swift
144 | var myOverlayContent: some View {
145 | VStack {
146 | Text("Header")
147 | List {
148 | Text("Row 1")
149 | Text("Row 2")
150 | Text("Row 3")
151 | }
152 | }
153 | .draggable(false)
154 | }
155 | ```
156 |
157 | ### Scroll view support
158 |
159 | A magnetic notch overlay can coordinate its motion with the scrolling of a scroll view.
160 |
161 | Mark the ScrollView or List that should dictate the overlays movement with `divingScrollView()`.
162 |
163 | ```swift
164 | var myOverlayContent: some View {
165 | VStack {
166 | Text("Header").draggable()
167 | List {
168 | Text("Row 1")
169 | Text("Row 2")
170 | Text("Row 3")
171 | }
172 | .drivingScrollView()
173 | }
174 | }
175 | ```
176 |
177 | ### Responding to overlay updates
178 |
179 | You can track the overlay motions using the `onTranslation(_:)` view modifier. It is a great occasion to update your UI based on the current overlay state.
180 |
181 | Here we define a control that should be right above the overlay:
182 |
183 | ```swift
184 | struct ControlView: View {
185 |
186 | let height: CGFloat
187 | let action: () -> Void
188 |
189 | var body: some View {
190 | VStack {
191 | Button("Action", action: action)
192 | Spacer().frame(height: height)
193 | }
194 | }
195 | }
196 | ```
197 | We make sure the control is always visible thanks to the translation parameter:
198 |
199 | ```swift
200 | @State var height: CGFloat = 0.0
201 |
202 | var body: some View {
203 | ZStack {
204 | Color.blue
205 | ControlView(height: height, action: {})
206 | }
207 | .dynamicOverlay(Color.red)
208 | .dynamicOverlayBehavior(myOverlayBehavior)
209 | }
210 |
211 | var myOverlayBehavior: some DynamicOverlayBehavior {
212 | MagneticNotchOverlayBehavior { ... }
213 | .onTranslation { translation in
214 | height = translation.height
215 | }
216 | }
217 | ```
218 | You can also be notified when a notch is reached using a binding:
219 | ```swift
220 | @State var notch: Notch = .min
221 |
222 | var body: some View {
223 | Color.blue
224 | .dynamicOverlay(Text("\(notch)"))
225 | .dynamicOverlayBehavior(myOverlayBehavior)
226 | }
227 |
228 | var myOverlayBehavior: some DynamicOverlayBehavior {
229 | MagneticNotchOverlayBehavior { ... }
230 | .notchChange($notch)
231 | }
232 | ```
233 |
234 | ### Moving the overlay
235 |
236 | You can move explicitly the overlay using a notch binding.
237 |
238 | ```swift
239 | @State var notch: Notch = .min
240 |
241 | var body: some View {
242 | ZStack {
243 | Color.green
244 | Button("Move to top") {
245 | notch = .max
246 | }
247 | }
248 | .dynamicOverlay(Color.red)
249 | .dynamicOverlayBehavior(myOverlayBehavior)
250 | }
251 |
252 | var myOverlayBehavior: some DynamicOverlayBehavior {
253 | MagneticNotchOverlayBehavior { ... }
254 | .notchChange($notch)
255 | }
256 | ```
257 | Wrap the change in an animation block to animate the change.
258 |
259 | ```swift
260 | Button("Move to top") {
261 | withAnimation {
262 | notch = .max
263 | }
264 | }
265 | ```
266 |
267 | ### Disabling notches
268 |
269 | When a notch is disabled, the overlay will ignore it. Here we block the overlay in its `min` position:
270 |
271 | ```swift
272 | @State var notch: Notch = .max
273 |
274 | var myOverlayBehavior: some DynamicOverlayBehavior {
275 | MagneticNotchOverlayBehavior { ... }
276 | .notchChange($notch)
277 | .disable(.max, notch == .min)
278 | }
279 | ```
280 |
281 | ## Under the hood
282 |
283 | `DynamicOverlay` is built on top of [OverlayContainer](https://github.com/applidium/OverlayContainer). If you need more control, consider using it or open an issue.
284 |
285 | ## Installation
286 |
287 | `DynamicOverlay` is available through [CocoaPods](https://cocoapods.org). To install it, simply add the following line to your Podfile:
288 |
289 | ### Cocoapods
290 |
291 | ```ruby
292 | pod 'DynamicOverlay'
293 | ```
294 |
295 | ### Carthage
296 |
297 | Add the following to your Cartfile:
298 |
299 | ```ruby
300 | github "https://github.com/fabernovel/DynamicOverlay"
301 | ```
302 |
303 | ### Swift Package Manager
304 |
305 | `DynamicOverlay` can be installed as a Swift Package with Xcode 11 or higher. To install it, add a package using Xcode or a dependency to your Package.swift file:
306 |
307 | ```swift
308 | .package(url: "https://github.com/fabernovel/DynamicOverlay.git")
309 | ```
310 |
311 | ## Release
312 |
313 | - Create a release branch for the new version (release/#version#)
314 | - Update the [CHANGELOG.md](https://github.com/faberNovel/DynamicOverlay/blob/main/CHANGELOG.md) (Be sure to spell your release version correctly)
315 | - Push your release branch
316 | - Run the [release workflow](https://github.com/faberNovel/DynamicOverlay/actions/workflows/release.yml) from your release branch
317 |
318 | ## Author
319 |
320 | [@gaetanzanella](https://twitter.com/gaetanzanella), gaetan.zanella@fabernovel.com
321 |
322 | ## License
323 |
324 | `DynamicOverlay` is available under the MIT license. See the LICENSE file for more info.
325 |
--------------------------------------------------------------------------------
/DynamicOverlay_Example/DynamicOverlay_Example.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 52;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | E739AD94291D45F00076B2AC /* DynamicOverlay in Frameworks */ = {isa = PBXBuildFile; productRef = E739AD93291D45F00076B2AC /* DynamicOverlay */; };
11 | E73A7CE9262B2A8400959344 /* MapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E73A7CE8262B2A8400959344 /* MapView.swift */; };
12 | E73A7CEC262B2AA400959344 /* MapRootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E73A7CEB262B2AA400959344 /* MapRootView.swift */; };
13 | E750EE4E262B2B4800E79C6B /* OverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E750EE4D262B2B4800E79C6B /* OverlayView.swift */; };
14 | E750EE51262C30F600E79C6B /* SearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = E750EE50262C30F600E79C6B /* SearchBar.swift */; };
15 | E750EE63262C463100E79C6B /* MapApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = E742E3C422302B4B002A2BED /* MapApp.swift */; };
16 | E750EE68262C69A900E79C6B /* UIKitAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E750EE67262C69A900E79C6B /* UIKitAppDelegate.swift */; };
17 | E750EE96262D772700E79C6B /* OverlayBackgroundView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E750EE95262D772700E79C6B /* OverlayBackgroundView.swift */; };
18 | E750EE98262D798F00E79C6B /* ActionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E750EE97262D798F00E79C6B /* ActionCell.swift */; };
19 | E750EE9A262D799B00E79C6B /* FavoriteCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E750EE99262D799B00E79C6B /* FavoriteCell.swift */; };
20 | E750EE9C262D7C9000E79C6B /* BackdropView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E750EE9B262D7C9000E79C6B /* BackdropView.swift */; };
21 | E7691574222EA78B00FDEE7F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E7691573222EA78B00FDEE7F /* Assets.xcassets */; };
22 | E7691577222EA78B00FDEE7F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E7691575222EA78B00FDEE7F /* LaunchScreen.storyboard */; };
23 | E79705A0292F83100047839F /* OverlayContainerRepresentableAdaptorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7970598292F83100047839F /* OverlayContainerRepresentableAdaptorTests.swift */; };
24 | E79705A1292F83100047839F /* NotchDimensionDynamicOverlayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7970599292F83100047839F /* NotchDimensionDynamicOverlayTests.swift */; };
25 | E79705A2292F83100047839F /* OverlayNotchIndexMapperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E797059A292F83100047839F /* OverlayNotchIndexMapperTests.swift */; };
26 | E79705A3292F83100047839F /* DrivingScrollViewModifierTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E797059B292F83100047839F /* DrivingScrollViewModifierTests.swift */; };
27 | E79705A4292F83100047839F /* DragHandleViewModifierTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E797059C292F83100047839F /* DragHandleViewModifierTests.swift */; };
28 | E79705A5292F83100047839F /* NotchTranslationDynamicOverlayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E797059D292F83100047839F /* NotchTranslationDynamicOverlayTests.swift */; };
29 | E79705A6292F83100047839F /* MagneticNotchOverlayBehaviorValueTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E797059E292F83100047839F /* MagneticNotchOverlayBehaviorValueTests.swift */; };
30 | E79705A7292F83100047839F /* NotchBindingDynamicOverlayTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E797059F292F83100047839F /* NotchBindingDynamicOverlayTests.swift */; };
31 | E79705AC292F83190047839F /* ViewInspector.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79705A8292F83190047839F /* ViewInspector.swift */; };
32 | E79705AD292F83190047839F /* ValuePublisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79705A9292F83190047839F /* ValuePublisher.swift */; };
33 | E79705AE292F83190047839F /* View+Measure.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79705AA292F83190047839F /* View+Measure.swift */; };
34 | E79705AF292F83190047839F /* ViewRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79705AB292F83190047839F /* ViewRenderer.swift */; };
35 | /* End PBXBuildFile section */
36 |
37 | /* Begin PBXContainerItemProxy section */
38 | E7970593292F817F0047839F /* PBXContainerItemProxy */ = {
39 | isa = PBXContainerItemProxy;
40 | containerPortal = E7691561222EA78A00FDEE7F /* Project object */;
41 | proxyType = 1;
42 | remoteGlobalIDString = E7691568222EA78A00FDEE7F;
43 | remoteInfo = DynamicOverlay_Example;
44 | };
45 | /* End PBXContainerItemProxy section */
46 |
47 | /* Begin PBXFileReference section */
48 | E739AD92291D45B10076B2AC /* DynamicOverlay */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = DynamicOverlay; path = ..; sourceTree = ""; };
49 | E73A7CE8262B2A8400959344 /* MapView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapView.swift; sourceTree = ""; };
50 | E73A7CEB262B2AA400959344 /* MapRootView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapRootView.swift; sourceTree = ""; };
51 | E741EE722576B10D0073FF6B /* DynamicOverlay.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DynamicOverlay.framework; sourceTree = BUILT_PRODUCTS_DIR; };
52 | E742E3C422302B4B002A2BED /* MapApp.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MapApp.swift; path = Classes/MapApp.swift; sourceTree = ""; };
53 | E750EE4D262B2B4800E79C6B /* OverlayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverlayView.swift; sourceTree = ""; };
54 | E750EE50262C30F600E79C6B /* SearchBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchBar.swift; sourceTree = ""; };
55 | E750EE67262C69A900E79C6B /* UIKitAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIKitAppDelegate.swift; sourceTree = ""; };
56 | E750EE95262D772700E79C6B /* OverlayBackgroundView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverlayBackgroundView.swift; sourceTree = ""; };
57 | E750EE97262D798F00E79C6B /* ActionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionCell.swift; sourceTree = ""; };
58 | E750EE99262D799B00E79C6B /* FavoriteCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FavoriteCell.swift; sourceTree = ""; };
59 | E750EE9B262D7C9000E79C6B /* BackdropView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BackdropView.swift; sourceTree = ""; };
60 | E7691569222EA78A00FDEE7F /* DynamicOverlay_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DynamicOverlay_Example.app; sourceTree = BUILT_PRODUCTS_DIR; };
61 | E7691573222EA78B00FDEE7F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
62 | E7691576222EA78B00FDEE7F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
63 | E7691578222EA78B00FDEE7F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
64 | E797058F292F817F0047839F /* DynamicOverlay_ExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DynamicOverlay_ExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
65 | E7970598292F83100047839F /* OverlayContainerRepresentableAdaptorTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OverlayContainerRepresentableAdaptorTests.swift; path = ../../Tests/DynamicOverlayTests/OverlayContainerRepresentableAdaptorTests.swift; sourceTree = ""; };
66 | E7970599292F83100047839F /* NotchDimensionDynamicOverlayTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NotchDimensionDynamicOverlayTests.swift; path = ../../Tests/DynamicOverlayTests/NotchDimensionDynamicOverlayTests.swift; sourceTree = ""; };
67 | E797059A292F83100047839F /* OverlayNotchIndexMapperTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = OverlayNotchIndexMapperTests.swift; path = ../../Tests/DynamicOverlayTests/OverlayNotchIndexMapperTests.swift; sourceTree = ""; };
68 | E797059B292F83100047839F /* DrivingScrollViewModifierTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DrivingScrollViewModifierTests.swift; path = ../../Tests/DynamicOverlayTests/DrivingScrollViewModifierTests.swift; sourceTree = ""; };
69 | E797059C292F83100047839F /* DragHandleViewModifierTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = DragHandleViewModifierTests.swift; path = ../../Tests/DynamicOverlayTests/DragHandleViewModifierTests.swift; sourceTree = ""; };
70 | E797059D292F83100047839F /* NotchTranslationDynamicOverlayTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NotchTranslationDynamicOverlayTests.swift; path = ../../Tests/DynamicOverlayTests/NotchTranslationDynamicOverlayTests.swift; sourceTree = ""; };
71 | E797059E292F83100047839F /* MagneticNotchOverlayBehaviorValueTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MagneticNotchOverlayBehaviorValueTests.swift; path = ../../Tests/DynamicOverlayTests/MagneticNotchOverlayBehaviorValueTests.swift; sourceTree = ""; };
72 | E797059F292F83100047839F /* NotchBindingDynamicOverlayTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = NotchBindingDynamicOverlayTests.swift; path = ../../Tests/DynamicOverlayTests/NotchBindingDynamicOverlayTests.swift; sourceTree = ""; };
73 | E79705A8292F83190047839F /* ViewInspector.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ViewInspector.swift; path = ../../Tests/DynamicOverlayTests/Utils/ViewInspector.swift; sourceTree = ""; };
74 | E79705A9292F83190047839F /* ValuePublisher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ValuePublisher.swift; path = ../../Tests/DynamicOverlayTests/Utils/ValuePublisher.swift; sourceTree = ""; };
75 | E79705AA292F83190047839F /* View+Measure.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = "View+Measure.swift"; path = "../../Tests/DynamicOverlayTests/Utils/View+Measure.swift"; sourceTree = ""; };
76 | E79705AB292F83190047839F /* ViewRenderer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ViewRenderer.swift; path = ../../Tests/DynamicOverlayTests/Utils/ViewRenderer.swift; sourceTree = ""; };
77 | /* End PBXFileReference section */
78 |
79 | /* Begin PBXFrameworksBuildPhase section */
80 | E7691566222EA78A00FDEE7F /* Frameworks */ = {
81 | isa = PBXFrameworksBuildPhase;
82 | buildActionMask = 2147483647;
83 | files = (
84 | E739AD94291D45F00076B2AC /* DynamicOverlay in Frameworks */,
85 | );
86 | runOnlyForDeploymentPostprocessing = 0;
87 | };
88 | E797058C292F817F0047839F /* Frameworks */ = {
89 | isa = PBXFrameworksBuildPhase;
90 | buildActionMask = 2147483647;
91 | files = (
92 | );
93 | runOnlyForDeploymentPostprocessing = 0;
94 | };
95 | /* End PBXFrameworksBuildPhase section */
96 |
97 | /* Begin PBXGroup section */
98 | E739AD91291D45B10076B2AC /* Packages */ = {
99 | isa = PBXGroup;
100 | children = (
101 | E739AD92291D45B10076B2AC /* DynamicOverlay */,
102 | );
103 | name = Packages;
104 | sourceTree = "";
105 | };
106 | E73A7CEA262B2A8B00959344 /* View */ = {
107 | isa = PBXGroup;
108 | children = (
109 | E73A7CEB262B2AA400959344 /* MapRootView.swift */,
110 | E73A7CE8262B2A8400959344 /* MapView.swift */,
111 | E750EE4D262B2B4800E79C6B /* OverlayView.swift */,
112 | E750EE50262C30F600E79C6B /* SearchBar.swift */,
113 | E750EE95262D772700E79C6B /* OverlayBackgroundView.swift */,
114 | E750EE97262D798F00E79C6B /* ActionCell.swift */,
115 | E750EE99262D799B00E79C6B /* FavoriteCell.swift */,
116 | E750EE9B262D7C9000E79C6B /* BackdropView.swift */,
117 | );
118 | path = View;
119 | sourceTree = "";
120 | };
121 | E741EE712576B10D0073FF6B /* Frameworks */ = {
122 | isa = PBXGroup;
123 | children = (
124 | E741EE722576B10D0073FF6B /* DynamicOverlay.framework */,
125 | );
126 | name = Frameworks;
127 | sourceTree = "";
128 | };
129 | E750EE66262C699C00E79C6B /* UIKit */ = {
130 | isa = PBXGroup;
131 | children = (
132 | E750EE67262C69A900E79C6B /* UIKitAppDelegate.swift */,
133 | );
134 | path = UIKit;
135 | sourceTree = "";
136 | };
137 | E7691560222EA78A00FDEE7F = {
138 | isa = PBXGroup;
139 | children = (
140 | E739AD91291D45B10076B2AC /* Packages */,
141 | E769156B222EA78A00FDEE7F /* DynamicOverlay_Example */,
142 | E7970590292F817F0047839F /* DynamicOverlay_ExampleTests */,
143 | E769156A222EA78A00FDEE7F /* Products */,
144 | E741EE712576B10D0073FF6B /* Frameworks */,
145 | );
146 | sourceTree = "";
147 | };
148 | E769156A222EA78A00FDEE7F /* Products */ = {
149 | isa = PBXGroup;
150 | children = (
151 | E7691569222EA78A00FDEE7F /* DynamicOverlay_Example.app */,
152 | E797058F292F817F0047839F /* DynamicOverlay_ExampleTests.xctest */,
153 | );
154 | name = Products;
155 | sourceTree = "";
156 | };
157 | E769156B222EA78A00FDEE7F /* DynamicOverlay_Example */ = {
158 | isa = PBXGroup;
159 | children = (
160 | E742E3C422302B4B002A2BED /* MapApp.swift */,
161 | E750EE66262C699C00E79C6B /* UIKit */,
162 | E73A7CEA262B2A8B00959344 /* View */,
163 | E7691582222EA7C100FDEE7F /* Resources */,
164 | E7691581222EA7B400FDEE7F /* Configuration */,
165 | );
166 | path = DynamicOverlay_Example;
167 | sourceTree = "";
168 | };
169 | E7691581222EA7B400FDEE7F /* Configuration */ = {
170 | isa = PBXGroup;
171 | children = (
172 | E7691578222EA78B00FDEE7F /* Info.plist */,
173 | );
174 | path = Configuration;
175 | sourceTree = "";
176 | };
177 | E7691582222EA7C100FDEE7F /* Resources */ = {
178 | isa = PBXGroup;
179 | children = (
180 | E7691575222EA78B00FDEE7F /* LaunchScreen.storyboard */,
181 | E7691573222EA78B00FDEE7F /* Assets.xcassets */,
182 | );
183 | path = Resources;
184 | sourceTree = "";
185 | };
186 | E7970590292F817F0047839F /* DynamicOverlay_ExampleTests */ = {
187 | isa = PBXGroup;
188 | children = (
189 | E797059C292F83100047839F /* DragHandleViewModifierTests.swift */,
190 | E797059B292F83100047839F /* DrivingScrollViewModifierTests.swift */,
191 | E797059E292F83100047839F /* MagneticNotchOverlayBehaviorValueTests.swift */,
192 | E797059F292F83100047839F /* NotchBindingDynamicOverlayTests.swift */,
193 | E7970599292F83100047839F /* NotchDimensionDynamicOverlayTests.swift */,
194 | E797059D292F83100047839F /* NotchTranslationDynamicOverlayTests.swift */,
195 | E7970598292F83100047839F /* OverlayContainerRepresentableAdaptorTests.swift */,
196 | E797059A292F83100047839F /* OverlayNotchIndexMapperTests.swift */,
197 | E79705A9292F83190047839F /* ValuePublisher.swift */,
198 | E79705AA292F83190047839F /* View+Measure.swift */,
199 | E79705A8292F83190047839F /* ViewInspector.swift */,
200 | E79705AB292F83190047839F /* ViewRenderer.swift */,
201 | );
202 | path = DynamicOverlay_ExampleTests;
203 | sourceTree = "";
204 | };
205 | /* End PBXGroup section */
206 |
207 | /* Begin PBXNativeTarget section */
208 | E7691568222EA78A00FDEE7F /* DynamicOverlay_Example */ = {
209 | isa = PBXNativeTarget;
210 | buildConfigurationList = E769157B222EA78B00FDEE7F /* Build configuration list for PBXNativeTarget "DynamicOverlay_Example" */;
211 | buildPhases = (
212 | E7691565222EA78A00FDEE7F /* Sources */,
213 | E7691566222EA78A00FDEE7F /* Frameworks */,
214 | E7691567222EA78A00FDEE7F /* Resources */,
215 | );
216 | buildRules = (
217 | );
218 | dependencies = (
219 | );
220 | name = DynamicOverlay_Example;
221 | packageProductDependencies = (
222 | E739AD93291D45F00076B2AC /* DynamicOverlay */,
223 | );
224 | productName = DynamicOverlay_Example;
225 | productReference = E7691569222EA78A00FDEE7F /* DynamicOverlay_Example.app */;
226 | productType = "com.apple.product-type.application";
227 | };
228 | E797058E292F817F0047839F /* DynamicOverlay_ExampleTests */ = {
229 | isa = PBXNativeTarget;
230 | buildConfigurationList = E7970595292F817F0047839F /* Build configuration list for PBXNativeTarget "DynamicOverlay_ExampleTests" */;
231 | buildPhases = (
232 | E797058B292F817F0047839F /* Sources */,
233 | E797058C292F817F0047839F /* Frameworks */,
234 | E797058D292F817F0047839F /* Resources */,
235 | );
236 | buildRules = (
237 | );
238 | dependencies = (
239 | E7970594292F817F0047839F /* PBXTargetDependency */,
240 | );
241 | name = DynamicOverlay_ExampleTests;
242 | productName = DynamicOverlay_ExampleTests;
243 | productReference = E797058F292F817F0047839F /* DynamicOverlay_ExampleTests.xctest */;
244 | productType = "com.apple.product-type.bundle.unit-test";
245 | };
246 | /* End PBXNativeTarget section */
247 |
248 | /* Begin PBXProject section */
249 | E7691561222EA78A00FDEE7F /* Project object */ = {
250 | isa = PBXProject;
251 | attributes = {
252 | LastSwiftUpdateCheck = 1410;
253 | LastUpgradeCheck = 1220;
254 | ORGANIZATIONNAME = Fabernovel;
255 | TargetAttributes = {
256 | E7691568222EA78A00FDEE7F = {
257 | CreatedOnToolsVersion = 10.1;
258 | };
259 | E797058E292F817F0047839F = {
260 | CreatedOnToolsVersion = 14.1;
261 | LastSwiftMigration = 1410;
262 | TestTargetID = E7691568222EA78A00FDEE7F;
263 | };
264 | };
265 | };
266 | buildConfigurationList = E7691564222EA78A00FDEE7F /* Build configuration list for PBXProject "DynamicOverlay_Example" */;
267 | compatibilityVersion = "Xcode 9.3";
268 | developmentRegion = en;
269 | hasScannedForEncodings = 0;
270 | knownRegions = (
271 | en,
272 | Base,
273 | );
274 | mainGroup = E7691560222EA78A00FDEE7F;
275 | productRefGroup = E769156A222EA78A00FDEE7F /* Products */;
276 | projectDirPath = "";
277 | projectRoot = "";
278 | targets = (
279 | E7691568222EA78A00FDEE7F /* DynamicOverlay_Example */,
280 | E797058E292F817F0047839F /* DynamicOverlay_ExampleTests */,
281 | );
282 | };
283 | /* End PBXProject section */
284 |
285 | /* Begin PBXResourcesBuildPhase section */
286 | E7691567222EA78A00FDEE7F /* Resources */ = {
287 | isa = PBXResourcesBuildPhase;
288 | buildActionMask = 2147483647;
289 | files = (
290 | E7691577222EA78B00FDEE7F /* LaunchScreen.storyboard in Resources */,
291 | E7691574222EA78B00FDEE7F /* Assets.xcassets in Resources */,
292 | );
293 | runOnlyForDeploymentPostprocessing = 0;
294 | };
295 | E797058D292F817F0047839F /* Resources */ = {
296 | isa = PBXResourcesBuildPhase;
297 | buildActionMask = 2147483647;
298 | files = (
299 | );
300 | runOnlyForDeploymentPostprocessing = 0;
301 | };
302 | /* End PBXResourcesBuildPhase section */
303 |
304 | /* Begin PBXSourcesBuildPhase section */
305 | E7691565222EA78A00FDEE7F /* Sources */ = {
306 | isa = PBXSourcesBuildPhase;
307 | buildActionMask = 2147483647;
308 | files = (
309 | E750EE68262C69A900E79C6B /* UIKitAppDelegate.swift in Sources */,
310 | E750EE98262D798F00E79C6B /* ActionCell.swift in Sources */,
311 | E73A7CEC262B2AA400959344 /* MapRootView.swift in Sources */,
312 | E73A7CE9262B2A8400959344 /* MapView.swift in Sources */,
313 | E750EE9A262D799B00E79C6B /* FavoriteCell.swift in Sources */,
314 | E750EE4E262B2B4800E79C6B /* OverlayView.swift in Sources */,
315 | E750EE63262C463100E79C6B /* MapApp.swift in Sources */,
316 | E750EE96262D772700E79C6B /* OverlayBackgroundView.swift in Sources */,
317 | E750EE9C262D7C9000E79C6B /* BackdropView.swift in Sources */,
318 | E750EE51262C30F600E79C6B /* SearchBar.swift in Sources */,
319 | );
320 | runOnlyForDeploymentPostprocessing = 0;
321 | };
322 | E797058B292F817F0047839F /* Sources */ = {
323 | isa = PBXSourcesBuildPhase;
324 | buildActionMask = 2147483647;
325 | files = (
326 | E79705A2292F83100047839F /* OverlayNotchIndexMapperTests.swift in Sources */,
327 | E79705A7292F83100047839F /* NotchBindingDynamicOverlayTests.swift in Sources */,
328 | E79705AD292F83190047839F /* ValuePublisher.swift in Sources */,
329 | E79705A1292F83100047839F /* NotchDimensionDynamicOverlayTests.swift in Sources */,
330 | E79705A4292F83100047839F /* DragHandleViewModifierTests.swift in Sources */,
331 | E79705A3292F83100047839F /* DrivingScrollViewModifierTests.swift in Sources */,
332 | E79705A0292F83100047839F /* OverlayContainerRepresentableAdaptorTests.swift in Sources */,
333 | E79705AF292F83190047839F /* ViewRenderer.swift in Sources */,
334 | E79705A5292F83100047839F /* NotchTranslationDynamicOverlayTests.swift in Sources */,
335 | E79705AC292F83190047839F /* ViewInspector.swift in Sources */,
336 | E79705A6292F83100047839F /* MagneticNotchOverlayBehaviorValueTests.swift in Sources */,
337 | E79705AE292F83190047839F /* View+Measure.swift in Sources */,
338 | );
339 | runOnlyForDeploymentPostprocessing = 0;
340 | };
341 | /* End PBXSourcesBuildPhase section */
342 |
343 | /* Begin PBXTargetDependency section */
344 | E7970594292F817F0047839F /* PBXTargetDependency */ = {
345 | isa = PBXTargetDependency;
346 | target = E7691568222EA78A00FDEE7F /* DynamicOverlay_Example */;
347 | targetProxy = E7970593292F817F0047839F /* PBXContainerItemProxy */;
348 | };
349 | /* End PBXTargetDependency section */
350 |
351 | /* Begin PBXVariantGroup section */
352 | E7691575222EA78B00FDEE7F /* LaunchScreen.storyboard */ = {
353 | isa = PBXVariantGroup;
354 | children = (
355 | E7691576222EA78B00FDEE7F /* Base */,
356 | );
357 | name = LaunchScreen.storyboard;
358 | sourceTree = "";
359 | };
360 | /* End PBXVariantGroup section */
361 |
362 | /* Begin XCBuildConfiguration section */
363 | E7691579222EA78B00FDEE7F /* Debug */ = {
364 | isa = XCBuildConfiguration;
365 | buildSettings = {
366 | ALWAYS_SEARCH_USER_PATHS = NO;
367 | CLANG_ANALYZER_NONNULL = YES;
368 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
369 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
370 | CLANG_CXX_LIBRARY = "libc++";
371 | CLANG_ENABLE_MODULES = YES;
372 | CLANG_ENABLE_OBJC_ARC = YES;
373 | CLANG_ENABLE_OBJC_WEAK = YES;
374 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
375 | CLANG_WARN_BOOL_CONVERSION = YES;
376 | CLANG_WARN_COMMA = YES;
377 | CLANG_WARN_CONSTANT_CONVERSION = YES;
378 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
379 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
380 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
381 | CLANG_WARN_EMPTY_BODY = YES;
382 | CLANG_WARN_ENUM_CONVERSION = YES;
383 | CLANG_WARN_INFINITE_RECURSION = YES;
384 | CLANG_WARN_INT_CONVERSION = YES;
385 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
386 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
387 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
388 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
389 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
390 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
391 | CLANG_WARN_STRICT_PROTOTYPES = YES;
392 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
393 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
394 | CLANG_WARN_UNREACHABLE_CODE = YES;
395 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
396 | CODE_SIGN_IDENTITY = "iPhone Developer";
397 | COPY_PHASE_STRIP = NO;
398 | DEBUG_INFORMATION_FORMAT = dwarf;
399 | ENABLE_STRICT_OBJC_MSGSEND = YES;
400 | ENABLE_TESTABILITY = YES;
401 | GCC_C_LANGUAGE_STANDARD = gnu11;
402 | GCC_DYNAMIC_NO_PIC = NO;
403 | GCC_NO_COMMON_BLOCKS = YES;
404 | GCC_OPTIMIZATION_LEVEL = 0;
405 | GCC_PREPROCESSOR_DEFINITIONS = (
406 | "DEBUG=1",
407 | "$(inherited)",
408 | );
409 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
410 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
411 | GCC_WARN_UNDECLARED_SELECTOR = YES;
412 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
413 | GCC_WARN_UNUSED_FUNCTION = YES;
414 | GCC_WARN_UNUSED_VARIABLE = YES;
415 | IPHONEOS_DEPLOYMENT_TARGET = 15.0;
416 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
417 | MTL_FAST_MATH = YES;
418 | ONLY_ACTIVE_ARCH = YES;
419 | SDKROOT = iphoneos;
420 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
421 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
422 | };
423 | name = Debug;
424 | };
425 | E769157A222EA78B00FDEE7F /* Release */ = {
426 | isa = XCBuildConfiguration;
427 | buildSettings = {
428 | ALWAYS_SEARCH_USER_PATHS = NO;
429 | CLANG_ANALYZER_NONNULL = YES;
430 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
431 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
432 | CLANG_CXX_LIBRARY = "libc++";
433 | CLANG_ENABLE_MODULES = YES;
434 | CLANG_ENABLE_OBJC_ARC = YES;
435 | CLANG_ENABLE_OBJC_WEAK = YES;
436 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
437 | CLANG_WARN_BOOL_CONVERSION = YES;
438 | CLANG_WARN_COMMA = YES;
439 | CLANG_WARN_CONSTANT_CONVERSION = YES;
440 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
441 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
442 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
443 | CLANG_WARN_EMPTY_BODY = YES;
444 | CLANG_WARN_ENUM_CONVERSION = YES;
445 | CLANG_WARN_INFINITE_RECURSION = YES;
446 | CLANG_WARN_INT_CONVERSION = YES;
447 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
448 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
449 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
450 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
451 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
452 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
453 | CLANG_WARN_STRICT_PROTOTYPES = YES;
454 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
455 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
456 | CLANG_WARN_UNREACHABLE_CODE = YES;
457 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
458 | CODE_SIGN_IDENTITY = "iPhone Developer";
459 | COPY_PHASE_STRIP = NO;
460 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
461 | ENABLE_NS_ASSERTIONS = NO;
462 | ENABLE_STRICT_OBJC_MSGSEND = YES;
463 | GCC_C_LANGUAGE_STANDARD = gnu11;
464 | GCC_NO_COMMON_BLOCKS = YES;
465 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
466 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
467 | GCC_WARN_UNDECLARED_SELECTOR = YES;
468 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
469 | GCC_WARN_UNUSED_FUNCTION = YES;
470 | GCC_WARN_UNUSED_VARIABLE = YES;
471 | IPHONEOS_DEPLOYMENT_TARGET = 15.0;
472 | MTL_ENABLE_DEBUG_INFO = NO;
473 | MTL_FAST_MATH = YES;
474 | SDKROOT = iphoneos;
475 | SWIFT_COMPILATION_MODE = wholemodule;
476 | SWIFT_OPTIMIZATION_LEVEL = "-O";
477 | VALIDATE_PRODUCT = YES;
478 | };
479 | name = Release;
480 | };
481 | E769157C222EA78B00FDEE7F /* Debug */ = {
482 | isa = XCBuildConfiguration;
483 | buildSettings = {
484 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
485 | CLANG_ENABLE_MODULES = YES;
486 | CODE_SIGN_STYLE = Automatic;
487 | INFOPLIST_FILE = DynamicOverlay_Example/Configuration/Info.plist;
488 | IPHONEOS_DEPLOYMENT_TARGET = 15;
489 | LD_RUNPATH_SEARCH_PATHS = (
490 | "$(inherited)",
491 | "@executable_path/Frameworks",
492 | );
493 | PRODUCT_BUNDLE_IDENTIFIER = "com.fabernovel.DynamicOverlay-Example";
494 | PRODUCT_NAME = "$(TARGET_NAME)";
495 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
496 | SWIFT_VERSION = 4.2;
497 | TARGETED_DEVICE_FAMILY = "1,2";
498 | };
499 | name = Debug;
500 | };
501 | E769157D222EA78B00FDEE7F /* Release */ = {
502 | isa = XCBuildConfiguration;
503 | buildSettings = {
504 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
505 | CLANG_ENABLE_MODULES = YES;
506 | CODE_SIGN_STYLE = Automatic;
507 | INFOPLIST_FILE = DynamicOverlay_Example/Configuration/Info.plist;
508 | IPHONEOS_DEPLOYMENT_TARGET = 15;
509 | LD_RUNPATH_SEARCH_PATHS = (
510 | "$(inherited)",
511 | "@executable_path/Frameworks",
512 | );
513 | PRODUCT_BUNDLE_IDENTIFIER = "com.fabernovel.DynamicOverlay-Example";
514 | PRODUCT_NAME = "$(TARGET_NAME)";
515 | SWIFT_VERSION = 4.2;
516 | TARGETED_DEVICE_FAMILY = "1,2";
517 | };
518 | name = Release;
519 | };
520 | E7970596292F817F0047839F /* Debug */ = {
521 | isa = XCBuildConfiguration;
522 | buildSettings = {
523 | BUNDLE_LOADER = "$(TEST_HOST)";
524 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
525 | CLANG_ENABLE_MODULES = YES;
526 | CODE_SIGN_STYLE = Automatic;
527 | CURRENT_PROJECT_VERSION = 1;
528 | DEVELOPMENT_TEAM = C7G63Q6LZ9;
529 | GENERATE_INFOPLIST_FILE = YES;
530 | IPHONEOS_DEPLOYMENT_TARGET = 16.0;
531 | LD_RUNPATH_SEARCH_PATHS = (
532 | "$(inherited)",
533 | "@executable_path/Frameworks",
534 | "@loader_path/Frameworks",
535 | );
536 | MARKETING_VERSION = 1.0;
537 | PRODUCT_BUNDLE_IDENTIFIER = "com.gaetanzanella.DynamicOverlay-ExampleTests";
538 | PRODUCT_NAME = "$(TARGET_NAME)";
539 | SWIFT_EMIT_LOC_STRINGS = NO;
540 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
541 | SWIFT_VERSION = 5.0;
542 | TARGETED_DEVICE_FAMILY = "1,2";
543 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/DynamicOverlay_Example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/DynamicOverlay_Example";
544 | };
545 | name = Debug;
546 | };
547 | E7970597292F817F0047839F /* Release */ = {
548 | isa = XCBuildConfiguration;
549 | buildSettings = {
550 | BUNDLE_LOADER = "$(TEST_HOST)";
551 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
552 | CLANG_ENABLE_MODULES = YES;
553 | CODE_SIGN_STYLE = Automatic;
554 | CURRENT_PROJECT_VERSION = 1;
555 | DEVELOPMENT_TEAM = C7G63Q6LZ9;
556 | GENERATE_INFOPLIST_FILE = YES;
557 | IPHONEOS_DEPLOYMENT_TARGET = 16.0;
558 | LD_RUNPATH_SEARCH_PATHS = (
559 | "$(inherited)",
560 | "@executable_path/Frameworks",
561 | "@loader_path/Frameworks",
562 | );
563 | MARKETING_VERSION = 1.0;
564 | PRODUCT_BUNDLE_IDENTIFIER = "com.gaetanzanella.DynamicOverlay-ExampleTests";
565 | PRODUCT_NAME = "$(TARGET_NAME)";
566 | SWIFT_EMIT_LOC_STRINGS = NO;
567 | SWIFT_VERSION = 5.0;
568 | TARGETED_DEVICE_FAMILY = "1,2";
569 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/DynamicOverlay_Example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/DynamicOverlay_Example";
570 | };
571 | name = Release;
572 | };
573 | /* End XCBuildConfiguration section */
574 |
575 | /* Begin XCConfigurationList section */
576 | E7691564222EA78A00FDEE7F /* Build configuration list for PBXProject "DynamicOverlay_Example" */ = {
577 | isa = XCConfigurationList;
578 | buildConfigurations = (
579 | E7691579222EA78B00FDEE7F /* Debug */,
580 | E769157A222EA78B00FDEE7F /* Release */,
581 | );
582 | defaultConfigurationIsVisible = 0;
583 | defaultConfigurationName = Release;
584 | };
585 | E769157B222EA78B00FDEE7F /* Build configuration list for PBXNativeTarget "DynamicOverlay_Example" */ = {
586 | isa = XCConfigurationList;
587 | buildConfigurations = (
588 | E769157C222EA78B00FDEE7F /* Debug */,
589 | E769157D222EA78B00FDEE7F /* Release */,
590 | );
591 | defaultConfigurationIsVisible = 0;
592 | defaultConfigurationName = Release;
593 | };
594 | E7970595292F817F0047839F /* Build configuration list for PBXNativeTarget "DynamicOverlay_ExampleTests" */ = {
595 | isa = XCConfigurationList;
596 | buildConfigurations = (
597 | E7970596292F817F0047839F /* Debug */,
598 | E7970597292F817F0047839F /* Release */,
599 | );
600 | defaultConfigurationIsVisible = 0;
601 | defaultConfigurationName = Release;
602 | };
603 | /* End XCConfigurationList section */
604 |
605 | /* Begin XCSwiftPackageProductDependency section */
606 | E739AD93291D45F00076B2AC /* DynamicOverlay */ = {
607 | isa = XCSwiftPackageProductDependency;
608 | productName = DynamicOverlay;
609 | };
610 | /* End XCSwiftPackageProductDependency section */
611 | };
612 | rootObject = E7691561222EA78A00FDEE7F /* Project object */;
613 | }
614 |
--------------------------------------------------------------------------------