(_ which: DockTileLocation = .application, label: String = "", content: ViewContentType?) {
89 | self.content = AnyView(content)
90 | self.location = which
91 | self.label = label
92 | self.animation = nil
93 | self.isAnimating = false
94 | }
95 |
96 | public func makeNSView(context: Context) -> NSView {
97 | let c = NSView()
98 | c.translatesAutoresizingMaskIntoConstraints = false
99 | c.widthAnchor.constraint(equalToConstant: 0).isActive = true
100 | c.heightAnchor.constraint(equalToConstant: 0).isActive = true
101 | return c
102 | }
103 |
104 | public func updateNSView(_ nsView: NSView, context: Context) {
105 | let which = (location == .window) ? nsView.window?.dockTile : NSApp?.dockTile
106 |
107 | if let which = which {
108 | if let animation = animation {
109 | animation.dockTile = which
110 | if self.isAnimating {
111 | if animation.isAnimating == false {
112 | animation.startAnimating()
113 | }
114 | }
115 | else {
116 | animation.stopAnimating(stopAtEndOfCurrentLoop: true)
117 | }
118 | }
119 | else if let content = content {
120 | let dockViewController = NSHostingController(rootView: content)
121 | let dt = DSFDockTile.View(dockViewController, dockTile: which)
122 | dt.display()
123 | }
124 | else {
125 | which.contentView = nil
126 | }
127 | }
128 |
129 | which?.badgeLabel = self.label
130 | }
131 |
132 | public typealias NSViewType = NSView
133 | }
134 |
135 | // MARK: - Animation handling
136 |
137 | @available(macOS 10.15, *)
138 | extension DockTile {
139 | public init(
140 | _ location: DockTileLocation = .application,
141 | label: String = "",
142 | animation: DSFDockTile.Animated,
143 | isAnimating: Bool
144 | ) {
145 | self.animation = animation
146 | self.label = label
147 | self.content = nil
148 | self.location = location
149 | self.isAnimating = isAnimating
150 | }
151 | }
152 |
153 | #endif
154 |
--------------------------------------------------------------------------------
/Demos/DSFDockTile Demo/ImageViewController.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | The docktile is being generated from the content in DockViewController.
Drag the slider and change the color to see the DockTile dynamically update as the value changes
Drag an image file onto the image on the right to update the dock image
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/Demos/DSFDockTile Demo/XIBViewController.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | The docktile is being generated from the content in DockViewController.
Drag the slider and change the color to see the DockTile dynamically update as the value changes
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
--------------------------------------------------------------------------------
/Demos/DSFDockTile Demo/AttentionViewController.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | You can 'bounce' an application icon in the dock. The 'bounce' only occurs IF the application is not the frontmost application on the system.
28 |
29 | To demonstrate this, clicking either of the two buttons below will open the 'System Preferences' application in order to de-focus this demo application.
30 |
31 | Informational: The dock icon will bounce for one second.
32 | Critical: The dock icon will bounce until either the app becomes active or the request is canceled.
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
54 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
--------------------------------------------------------------------------------
/Demos/DSFDockTile Demo/window-based/WindowedDockTileViewController.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | This window demonstrates how to set the dock image for a minimised window.
27 |
28 | By clicking 'Start Animating' the window will automatically minimise and toggle between the 'standard' window docktile image and a custom image
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
55 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # DSFDockTile
2 |
3 | Easily display images, animations, badges and alerts to your macOS application's dock icon.
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | 
16 |
17 | ## Why?
18 |
19 | I was inspired by [Neil Sardesai](https://twitter.com/neilsardesai) after he posted [this on Twitter](https://twitter.com/neilsardesai/status/1362179114204073984?s=20). And this marvellous follow-up tweet by [Norbert M. Doerner](https://twitter.com/cdfinder/status/1365201157854015488?s=20).
20 |
21 | While the NSDockTile API isn't overly complex, I wanted something that made it easy to change the dock image, and even add basic animations from GIF images etc.
22 |
23 | ## Features
24 |
25 | * Set the badge label
26 | * Display an image
27 | * Display an animated image
28 | * Display the content of an NSView
29 | * Bounce the docktile
30 |
31 | By default a `DSFDockTile` instance operates on the Application's docktile. You can provide your own `NSDockTile` for any window (by calling `window.dockTile`) via the `init` functions on the badge generators.
32 |
33 | ## DockTile plugins
34 |
35 | Did you know that your application can show a custom DockTile image even when it's not running? Apple provides an `NSDockTilePlugin` prodocol that allows you to do exactly that. Want to provide different application icons for dark and light modes? `NSDockTilePlugin` allows you to! Want to tweak the dock icon when your application isn't running, but needs attention? `NSDockTilePlugin`!
36 |
37 | There is a demo application in the `Demos` folder called **'DSFDockTile Plugin Demo'** (macOS 11+) that demonstrates using `NSDockTilePlugin` and `DSFDockIcon` in SwiftUI.
38 |
39 | ## Integration
40 |
41 | ### Swift package manager
42 |
43 | Add `https://github.com/dagronf/DSFDockTile` to your project.
44 |
45 | If you don't want to include the `DSFImageFlipbook` package, copy all the files in the `Sources/` folder **EXCEPT** for `DSFDockTile+Animation.swift`.
46 |
47 | ### Demo
48 |
49 | There is a demo macOS application available in the `Demos` subfolder.
50 |
51 | ## Badge Label
52 |
53 | It's very easy to add a badge label to a docktile.
54 |
55 | ```swift
56 | // Set the label on the docktile to 1234
57 | DSFDockTile.badgeLabel = "1234"
58 |
59 | // Remove the badge label from the docktile
60 | DSFDockTile.badgeLabel = nil
61 | ```
62 |
63 | ## DockTile Generators
64 |
65 | ### AppIcon
66 |
67 | Set the docktile to the application's icon.
68 |
69 | ```swift
70 | // Set the dock icon to the application icon
71 | DSFDockTile.AppIcon.display()
72 | ```
73 |
74 | ### Constant Image
75 |
76 | This is a `DSFDockTile` object that displays a single image. Useful for if you have a set of images to display in the docktile that do not change and you want to the constantness.
77 |
78 | ```swift
79 | static let LockedImage = NSImage(named: NSImage.Name("padlock-locked"))!
80 | static let UnlockedImage = NSImage(named: NSImage.Name("padlock-unlocked"))!
81 |
82 | let LockedDockTileImage = DSFDockTile.ConstantImage(LockedImage)
83 | let UnlockedDockTileImage = DSFDockTile.ConstantImage(UnlockedImage)
84 | ...
85 |
86 | if application.isEditable {
87 | UnlockedDockTileImage.display()
88 | }
89 | else {
90 | LockedDockTileImage.display()
91 | }
92 | ```
93 |
94 | ### Image
95 |
96 | This is a `DSFDockTile` object that can display images.
97 |
98 | ```swift
99 | static let LockedImage = NSImage(named: NSImage.Name("padlock-locked"))!
100 | static let UnlockedImage = NSImage(named: NSImage.Name("padlock-unlocked"))!
101 |
102 | let stateDockTile = DSFDockTile.Image()
103 |
104 | ...
105 |
106 | func viewDidLoad() {
107 | let image = application.isEditable ? UnlockedImage : LockedImage
108 | stateDockTile.display(image)
109 | }
110 | ```
111 |
112 | ### View
113 |
114 | This is a `DSFDockTile` object that can display the content of a view managed by a view controller
115 |
116 | Due to NSDockTile restrictions, the view is not drawn live into the dock as the view is updated. You must call `display()` to update the dock tile with the view's current content whenever a change occurs in the view.
117 |
118 | ```swift
119 | /// The view controller to display on the docktile
120 | let dockViewController = DockViewController()
121 |
122 | /// The docktile instance handling the docktile
123 | lazy var updateDockTile: DSFDockTile.View = {
124 | dockViewController.loadView()
125 | return DSFDockTile.View(dockViewController)
126 | }()
127 | ...
128 | func doUpdate() {
129 | // Change the color of the item in the
130 | self.dockViewController.foregroundColor = .systemYellow
131 |
132 | // NSDockTile does not update automatically so need to tell it when changes are made
133 | self.updateDockTile.display()
134 | }
135 | ```
136 |
137 | ### Animation
138 |
139 | This is a docktile that can display an animation. It uses `DSFImageFlipbook` under the seams to handle the animation itself.
140 |
141 | ```swift
142 | let animatedDockTile: DSFDockTile.Animated = {
143 | let fb = DSFImageFlipbook()
144 | let da = NSDataAsset(name: NSDataAsset.Name("animated-gif"))!
145 | _ = fb.loadFrames(from: da.data)
146 | return DSFDockTile.Animated(fb)
147 | }()
148 |
149 | ...
150 |
151 | @IBAction func startAnimating(_ sender: Any) {
152 | animatedDockTile.startAnimating()
153 | }
154 |
155 | @IBAction func stopAnimating(_ sender: Any) {
156 | animatedDockTile.stopAnimating()
157 | }
158 | ```
159 |
160 | ## SwiftUI
161 |
162 | The `DockTile` view is used to manipulate the docktile for
163 |
164 | * The application (`.application`)
165 | * The window containing the `DockTile` View (`.window`)
166 |
167 | You can set which docktile you want to update in the initializer of the `DockTile` View
168 |
169 | ### Updating the badge
170 |
171 | To set a badge using SwiftUI, use the `DockTile` view and provide a label for the badge
172 |
173 | ```swift
174 | @State var badgeLabel: String = ""
175 | var body: some Scene {
176 | WindowGroup {
177 | ZStack {
178 | ContentView()
179 | DockTile(label: badgeLabel)
180 | }
181 | }
182 | }
183 | ```
184 |
185 | ### Updating the content
186 |
187 | To set the content of a dock tile, provide a view to the initializer. Set to `nil` to return the docktile to its default.
188 |
189 | ```swift
190 | @State var dockText: String = ""
191 | var body: some Scene {
192 | WindowGroup {
193 | ZStack {
194 | ContentView()
195 | DockTile(
196 | .window,
197 | label: "3",
198 | content: ZStack {
199 | Color.white
200 | Text(dockText)
201 | }
202 | )
203 | }
204 | }
205 | }
206 | ```
207 |
208 | Remember that the DockTile API does not provide live docktile updating, and will require you to update the view for each
209 | visual change you want to make
210 |
211 | ## Attention Concepts
212 |
213 | You can request user information via the DockTile of an application if your application is not the front-most application.
214 |
215 | See [Apple's Documentation](https://developer.apple.com/documentation/appkit/nsapplication/1428358-requestuserattention) for more details.
216 |
217 | ### requestInformationalAttention()
218 |
219 | Request that the docktile 'bounce' to inform the user of something informational. The function returns an object which you can use to cancel the attention request.
220 |
221 | ```swift
222 | let cancellable = DSFDockTile.requestInformationalAttention()
223 | ```
224 |
225 | The `cancellable` can be used to cancel the information request.
226 |
227 | See [Apple's Documentation](https://developer.apple.com/documentation/appkit/nsapplication/requestuserattentiontype/criticalrequest)
228 |
229 | ### requestCriticalAttention()
230 |
231 | Request that the docktile 'bounce' to inform the user of something informational. The function returns an object which you can use to cancel the attention request.
232 |
233 | ```swift
234 | let cancellable = DSFDockTile.requestCriticalAttention()
235 | ```
236 |
237 | The `cancellable` can be used to cancel the critical request.
238 |
239 | See [Apple's Documentation](https://developer.apple.com/documentation/appkit/nsapplication/requestuserattentiontype/informationalrequest)
240 |
241 | ### Cancellation protocol (DSFDockTileUserAttentionCancellation)
242 |
243 | The user attention methods return an object that conforms to `DSFDockTileUserAttentionCancellation` that can be used to cancel an attention request.
244 |
245 | See [Apple's Documentation](https://developer.apple.com/documentation/appkit/nsapplication/1428683-canceluserattentionrequest)
246 |
247 | ## Thanks
248 |
249 | * [Neil Sardesai](https://twitter.com/neilsardesai)
250 | * [Norbert M. Doerner](https://twitter.com/cdfinder)
251 | * The images (light/dark) in the demo application are thanks to [brgfx on freepix](https://www.freepik.com/free-vector/opposite-adjectives-light-dark_1172843.htm)
252 | * Attribution - Background vector created by brgfx - www.freepik.com
253 |
254 | * Here is the project I used to understand how to use `NSDockTilePlugin` for my own project. [https://github.com/rrroyal/AutomaticDockTile](https://github.com/rrroyal/AutomaticDockTile)
255 |
256 | ## License
257 |
258 | MIT. Use it and abuse it for anything you want, just attribute my work. Let me know if you do use it somewhere, I'd love to hear about it!
259 |
260 | ```
261 | MIT License
262 |
263 | Copyright (c) 2022 Darren Ford
264 |
265 | Permission is hereby granted, free of charge, to any person obtaining a copy
266 | of this software and associated documentation files (the "Software"), to deal
267 | in the Software without restriction, including without limitation the rights
268 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
269 | copies of the Software, and to permit persons to whom the Software is
270 | furnished to do so, subject to the following conditions:
271 |
272 | The above copyright notice and this permission notice shall be included in all
273 | copies or substantial portions of the Software.
274 |
275 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
276 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
277 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
278 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
279 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
280 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
281 | SOFTWARE.
282 | ```
283 |
--------------------------------------------------------------------------------
/Demos/DSFDockTile Plugin Demo/DSFDockTile Plugin Demo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 54;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 23447D3926A52BDB0074ABF2 /* LightDarkImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23447D3826A52BDB0074ABF2 /* LightDarkImage.swift */; };
11 | 2356DBCA26A50AB100A39A25 /* DSFDockTile_Plugin_DemoApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2356DBC926A50AB100A39A25 /* DSFDockTile_Plugin_DemoApp.swift */; };
12 | 2356DBCC26A50AB100A39A25 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2356DBCB26A50AB100A39A25 /* ContentView.swift */; };
13 | 2356DBCE26A50AB200A39A25 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2356DBCD26A50AB200A39A25 /* Assets.xcassets */; };
14 | 2356DBD126A50AB200A39A25 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2356DBD026A50AB200A39A25 /* Preview Assets.xcassets */; };
15 | 2356DBE126A50B5D00A39A25 /* DSFDockTilePlugin.plugin in Embed PlugIns */ = {isa = PBXBuildFile; fileRef = 2356DBDB26A50B0100A39A25 /* DSFDockTilePlugin.plugin */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
16 | 2356DBF126A50C1300A39A25 /* DSFDockTile in Frameworks */ = {isa = PBXBuildFile; productRef = 2356DBF026A50C1300A39A25 /* DSFDockTile */; };
17 | 2356DBF426A50D3800A39A25 /* DockTilePlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2356DBE626A50BB100A39A25 /* DockTilePlugin.swift */; };
18 | 2356DC0726A51DAC00A39A25 /* dark.png in Resources */ = {isa = PBXBuildFile; fileRef = 2356DC0626A51DAC00A39A25 /* dark.png */; };
19 | 2356DC0926A51EB400A39A25 /* light.png in Resources */ = {isa = PBXBuildFile; fileRef = 2356DC0826A51EB400A39A25 /* light.png */; };
20 | /* End PBXBuildFile section */
21 |
22 | /* Begin PBXContainerItemProxy section */
23 | 2356DBE226A50B5D00A39A25 /* PBXContainerItemProxy */ = {
24 | isa = PBXContainerItemProxy;
25 | containerPortal = 2356DBBE26A50AB100A39A25 /* Project object */;
26 | proxyType = 1;
27 | remoteGlobalIDString = 2356DBDA26A50B0100A39A25;
28 | remoteInfo = DSFDockTilePlugin;
29 | };
30 | /* End PBXContainerItemProxy section */
31 |
32 | /* Begin PBXCopyFilesBuildPhase section */
33 | 2356DBE426A50B5D00A39A25 /* Embed PlugIns */ = {
34 | isa = PBXCopyFilesBuildPhase;
35 | buildActionMask = 2147483647;
36 | dstPath = "";
37 | dstSubfolderSpec = 13;
38 | files = (
39 | 2356DBE126A50B5D00A39A25 /* DSFDockTilePlugin.plugin in Embed PlugIns */,
40 | );
41 | name = "Embed PlugIns";
42 | runOnlyForDeploymentPostprocessing = 0;
43 | };
44 | /* End PBXCopyFilesBuildPhase section */
45 |
46 | /* Begin PBXFileReference section */
47 | 23447D3826A52BDB0074ABF2 /* LightDarkImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LightDarkImage.swift; sourceTree = ""; };
48 | 2356DBC626A50AB100A39A25 /* DSFDockTile Plugin Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DSFDockTile Plugin Demo.app"; sourceTree = BUILT_PRODUCTS_DIR; };
49 | 2356DBC926A50AB100A39A25 /* DSFDockTile_Plugin_DemoApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DSFDockTile_Plugin_DemoApp.swift; sourceTree = ""; };
50 | 2356DBCB26A50AB100A39A25 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
51 | 2356DBCD26A50AB200A39A25 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
52 | 2356DBD026A50AB200A39A25 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
53 | 2356DBDB26A50B0100A39A25 /* DSFDockTilePlugin.plugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DSFDockTilePlugin.plugin; sourceTree = BUILT_PRODUCTS_DIR; };
54 | 2356DBE526A50B6800A39A25 /* DSFDockTile-Plugin-Demo-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DSFDockTile-Plugin-Demo-Info.plist"; sourceTree = SOURCE_ROOT; };
55 | 2356DBE626A50BB100A39A25 /* DockTilePlugin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DockTilePlugin.swift; sourceTree = ""; };
56 | 2356DBFD26A5144C00A39A25 /* DSFDockTilePlugin-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DSFDockTilePlugin-Info.plist"; sourceTree = ""; };
57 | 2356DC0626A51DAC00A39A25 /* dark.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = dark.png; sourceTree = ""; };
58 | 2356DC0826A51EB400A39A25 /* light.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = light.png; sourceTree = ""; };
59 | /* End PBXFileReference section */
60 |
61 | /* Begin PBXFrameworksBuildPhase section */
62 | 2356DBC326A50AB100A39A25 /* Frameworks */ = {
63 | isa = PBXFrameworksBuildPhase;
64 | buildActionMask = 2147483647;
65 | files = (
66 | );
67 | runOnlyForDeploymentPostprocessing = 0;
68 | };
69 | 2356DBD826A50B0100A39A25 /* Frameworks */ = {
70 | isa = PBXFrameworksBuildPhase;
71 | buildActionMask = 2147483647;
72 | files = (
73 | 2356DBF126A50C1300A39A25 /* DSFDockTile in Frameworks */,
74 | );
75 | runOnlyForDeploymentPostprocessing = 0;
76 | };
77 | /* End PBXFrameworksBuildPhase section */
78 |
79 | /* Begin PBXGroup section */
80 | 2356DBBD26A50AB100A39A25 = {
81 | isa = PBXGroup;
82 | children = (
83 | 2356DBFD26A5144C00A39A25 /* DSFDockTilePlugin-Info.plist */,
84 | 2356DBC826A50AB100A39A25 /* DSFDockTile Plugin Demo */,
85 | 2356DBDF26A50B2B00A39A25 /* DSFDockTile Plugin */,
86 | 2356DBC726A50AB100A39A25 /* Products */,
87 | 2356DBE026A50B5D00A39A25 /* Frameworks */,
88 | );
89 | sourceTree = "";
90 | };
91 | 2356DBC726A50AB100A39A25 /* Products */ = {
92 | isa = PBXGroup;
93 | children = (
94 | 2356DBC626A50AB100A39A25 /* DSFDockTile Plugin Demo.app */,
95 | 2356DBDB26A50B0100A39A25 /* DSFDockTilePlugin.plugin */,
96 | );
97 | name = Products;
98 | sourceTree = "";
99 | };
100 | 2356DBC826A50AB100A39A25 /* DSFDockTile Plugin Demo */ = {
101 | isa = PBXGroup;
102 | children = (
103 | 2356DBE526A50B6800A39A25 /* DSFDockTile-Plugin-Demo-Info.plist */,
104 | 2356DBC926A50AB100A39A25 /* DSFDockTile_Plugin_DemoApp.swift */,
105 | 2356DBCB26A50AB100A39A25 /* ContentView.swift */,
106 | 23447D3826A52BDB0074ABF2 /* LightDarkImage.swift */,
107 | 2356DBCD26A50AB200A39A25 /* Assets.xcassets */,
108 | 2356DBCF26A50AB200A39A25 /* Preview Content */,
109 | );
110 | path = "DSFDockTile Plugin Demo";
111 | sourceTree = "";
112 | };
113 | 2356DBCF26A50AB200A39A25 /* Preview Content */ = {
114 | isa = PBXGroup;
115 | children = (
116 | 2356DBD026A50AB200A39A25 /* Preview Assets.xcassets */,
117 | );
118 | path = "Preview Content";
119 | sourceTree = "";
120 | };
121 | 2356DBDF26A50B2B00A39A25 /* DSFDockTile Plugin */ = {
122 | isa = PBXGroup;
123 | children = (
124 | 2356DC0326A51D5100A39A25 /* resources */,
125 | 2356DBE626A50BB100A39A25 /* DockTilePlugin.swift */,
126 | );
127 | path = "DSFDockTile Plugin";
128 | sourceTree = "";
129 | };
130 | 2356DBE026A50B5D00A39A25 /* Frameworks */ = {
131 | isa = PBXGroup;
132 | children = (
133 | );
134 | name = Frameworks;
135 | sourceTree = "";
136 | };
137 | 2356DC0326A51D5100A39A25 /* resources */ = {
138 | isa = PBXGroup;
139 | children = (
140 | 2356DC0826A51EB400A39A25 /* light.png */,
141 | 2356DC0626A51DAC00A39A25 /* dark.png */,
142 | );
143 | path = resources;
144 | sourceTree = "";
145 | };
146 | /* End PBXGroup section */
147 |
148 | /* Begin PBXNativeTarget section */
149 | 2356DBC526A50AB100A39A25 /* DSFDockTile Plugin Demo */ = {
150 | isa = PBXNativeTarget;
151 | buildConfigurationList = 2356DBD426A50AB200A39A25 /* Build configuration list for PBXNativeTarget "DSFDockTile Plugin Demo" */;
152 | buildPhases = (
153 | 2356DBC226A50AB100A39A25 /* Sources */,
154 | 2356DBC326A50AB100A39A25 /* Frameworks */,
155 | 2356DBC426A50AB100A39A25 /* Resources */,
156 | 2356DBE426A50B5D00A39A25 /* Embed PlugIns */,
157 | );
158 | buildRules = (
159 | );
160 | dependencies = (
161 | 2356DBE326A50B5D00A39A25 /* PBXTargetDependency */,
162 | );
163 | name = "DSFDockTile Plugin Demo";
164 | packageProductDependencies = (
165 | );
166 | productName = "DSFDockTile Plugin Demo";
167 | productReference = 2356DBC626A50AB100A39A25 /* DSFDockTile Plugin Demo.app */;
168 | productType = "com.apple.product-type.application";
169 | };
170 | 2356DBDA26A50B0100A39A25 /* DSFDockTilePlugin */ = {
171 | isa = PBXNativeTarget;
172 | buildConfigurationList = 2356DBDC26A50B0100A39A25 /* Build configuration list for PBXNativeTarget "DSFDockTilePlugin" */;
173 | buildPhases = (
174 | 2356DBD726A50B0100A39A25 /* Sources */,
175 | 2356DBD826A50B0100A39A25 /* Frameworks */,
176 | 2356DBD926A50B0100A39A25 /* Resources */,
177 | );
178 | buildRules = (
179 | );
180 | dependencies = (
181 | );
182 | name = DSFDockTilePlugin;
183 | packageProductDependencies = (
184 | 2356DBF026A50C1300A39A25 /* DSFDockTile */,
185 | );
186 | productName = DSFDockTilePlugin;
187 | productReference = 2356DBDB26A50B0100A39A25 /* DSFDockTilePlugin.plugin */;
188 | productType = "com.apple.product-type.bundle";
189 | };
190 | /* End PBXNativeTarget section */
191 |
192 | /* Begin PBXProject section */
193 | 2356DBBE26A50AB100A39A25 /* Project object */ = {
194 | isa = PBXProject;
195 | attributes = {
196 | BuildIndependentTargetsInParallel = 1;
197 | LastSwiftUpdateCheck = 1300;
198 | LastUpgradeCheck = 1300;
199 | TargetAttributes = {
200 | 2356DBC526A50AB100A39A25 = {
201 | CreatedOnToolsVersion = 13.0;
202 | };
203 | 2356DBDA26A50B0100A39A25 = {
204 | CreatedOnToolsVersion = 13.0;
205 | };
206 | };
207 | };
208 | buildConfigurationList = 2356DBC126A50AB100A39A25 /* Build configuration list for PBXProject "DSFDockTile Plugin Demo" */;
209 | compatibilityVersion = "Xcode 13.0";
210 | developmentRegion = en;
211 | hasScannedForEncodings = 0;
212 | knownRegions = (
213 | en,
214 | Base,
215 | );
216 | mainGroup = 2356DBBD26A50AB100A39A25;
217 | packageReferences = (
218 | 2356DBEF26A50C1300A39A25 /* XCRemoteSwiftPackageReference "DSFDockTile" */,
219 | );
220 | productRefGroup = 2356DBC726A50AB100A39A25 /* Products */;
221 | projectDirPath = "";
222 | projectRoot = "";
223 | targets = (
224 | 2356DBC526A50AB100A39A25 /* DSFDockTile Plugin Demo */,
225 | 2356DBDA26A50B0100A39A25 /* DSFDockTilePlugin */,
226 | );
227 | };
228 | /* End PBXProject section */
229 |
230 | /* Begin PBXResourcesBuildPhase section */
231 | 2356DBC426A50AB100A39A25 /* Resources */ = {
232 | isa = PBXResourcesBuildPhase;
233 | buildActionMask = 2147483647;
234 | files = (
235 | 2356DBD126A50AB200A39A25 /* Preview Assets.xcassets in Resources */,
236 | 2356DBCE26A50AB200A39A25 /* Assets.xcassets in Resources */,
237 | );
238 | runOnlyForDeploymentPostprocessing = 0;
239 | };
240 | 2356DBD926A50B0100A39A25 /* Resources */ = {
241 | isa = PBXResourcesBuildPhase;
242 | buildActionMask = 2147483647;
243 | files = (
244 | 2356DC0926A51EB400A39A25 /* light.png in Resources */,
245 | 2356DC0726A51DAC00A39A25 /* dark.png in Resources */,
246 | );
247 | runOnlyForDeploymentPostprocessing = 0;
248 | };
249 | /* End PBXResourcesBuildPhase section */
250 |
251 | /* Begin PBXSourcesBuildPhase section */
252 | 2356DBC226A50AB100A39A25 /* Sources */ = {
253 | isa = PBXSourcesBuildPhase;
254 | buildActionMask = 2147483647;
255 | files = (
256 | 2356DBCC26A50AB100A39A25 /* ContentView.swift in Sources */,
257 | 23447D3926A52BDB0074ABF2 /* LightDarkImage.swift in Sources */,
258 | 2356DBCA26A50AB100A39A25 /* DSFDockTile_Plugin_DemoApp.swift in Sources */,
259 | );
260 | runOnlyForDeploymentPostprocessing = 0;
261 | };
262 | 2356DBD726A50B0100A39A25 /* Sources */ = {
263 | isa = PBXSourcesBuildPhase;
264 | buildActionMask = 2147483647;
265 | files = (
266 | 2356DBF426A50D3800A39A25 /* DockTilePlugin.swift in Sources */,
267 | );
268 | runOnlyForDeploymentPostprocessing = 0;
269 | };
270 | /* End PBXSourcesBuildPhase section */
271 |
272 | /* Begin PBXTargetDependency section */
273 | 2356DBE326A50B5D00A39A25 /* PBXTargetDependency */ = {
274 | isa = PBXTargetDependency;
275 | target = 2356DBDA26A50B0100A39A25 /* DSFDockTilePlugin */;
276 | targetProxy = 2356DBE226A50B5D00A39A25 /* PBXContainerItemProxy */;
277 | };
278 | /* End PBXTargetDependency section */
279 |
280 | /* Begin XCBuildConfiguration section */
281 | 2356DBD226A50AB200A39A25 /* Debug */ = {
282 | isa = XCBuildConfiguration;
283 | buildSettings = {
284 | ALWAYS_SEARCH_USER_PATHS = NO;
285 | CLANG_ANALYZER_NONNULL = YES;
286 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
287 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
288 | CLANG_CXX_LIBRARY = "libc++";
289 | CLANG_ENABLE_MODULES = YES;
290 | CLANG_ENABLE_OBJC_ARC = YES;
291 | CLANG_ENABLE_OBJC_WEAK = YES;
292 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
293 | CLANG_WARN_BOOL_CONVERSION = YES;
294 | CLANG_WARN_COMMA = YES;
295 | CLANG_WARN_CONSTANT_CONVERSION = YES;
296 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
297 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
298 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
299 | CLANG_WARN_EMPTY_BODY = YES;
300 | CLANG_WARN_ENUM_CONVERSION = YES;
301 | CLANG_WARN_INFINITE_RECURSION = YES;
302 | CLANG_WARN_INT_CONVERSION = YES;
303 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
304 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
305 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
306 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
307 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
308 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
309 | CLANG_WARN_STRICT_PROTOTYPES = YES;
310 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
311 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
312 | CLANG_WARN_UNREACHABLE_CODE = YES;
313 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
314 | COPY_PHASE_STRIP = NO;
315 | DEBUG_INFORMATION_FORMAT = dwarf;
316 | ENABLE_STRICT_OBJC_MSGSEND = YES;
317 | ENABLE_TESTABILITY = YES;
318 | GCC_C_LANGUAGE_STANDARD = gnu11;
319 | GCC_DYNAMIC_NO_PIC = NO;
320 | GCC_NO_COMMON_BLOCKS = YES;
321 | GCC_OPTIMIZATION_LEVEL = 0;
322 | GCC_PREPROCESSOR_DEFINITIONS = (
323 | "DEBUG=1",
324 | "$(inherited)",
325 | );
326 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
327 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
328 | GCC_WARN_UNDECLARED_SELECTOR = YES;
329 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
330 | GCC_WARN_UNUSED_FUNCTION = YES;
331 | GCC_WARN_UNUSED_VARIABLE = YES;
332 | MACOSX_DEPLOYMENT_TARGET = 11.4;
333 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
334 | MTL_FAST_MATH = YES;
335 | ONLY_ACTIVE_ARCH = YES;
336 | SDKROOT = macosx;
337 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
338 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
339 | };
340 | name = Debug;
341 | };
342 | 2356DBD326A50AB200A39A25 /* Release */ = {
343 | isa = XCBuildConfiguration;
344 | buildSettings = {
345 | ALWAYS_SEARCH_USER_PATHS = NO;
346 | CLANG_ANALYZER_NONNULL = YES;
347 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
348 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
349 | CLANG_CXX_LIBRARY = "libc++";
350 | CLANG_ENABLE_MODULES = YES;
351 | CLANG_ENABLE_OBJC_ARC = YES;
352 | CLANG_ENABLE_OBJC_WEAK = YES;
353 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
354 | CLANG_WARN_BOOL_CONVERSION = YES;
355 | CLANG_WARN_COMMA = YES;
356 | CLANG_WARN_CONSTANT_CONVERSION = YES;
357 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
358 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
359 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
360 | CLANG_WARN_EMPTY_BODY = YES;
361 | CLANG_WARN_ENUM_CONVERSION = YES;
362 | CLANG_WARN_INFINITE_RECURSION = YES;
363 | CLANG_WARN_INT_CONVERSION = YES;
364 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
365 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
366 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
367 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
368 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
369 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
370 | CLANG_WARN_STRICT_PROTOTYPES = YES;
371 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
372 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
373 | CLANG_WARN_UNREACHABLE_CODE = YES;
374 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
375 | COPY_PHASE_STRIP = NO;
376 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
377 | ENABLE_NS_ASSERTIONS = NO;
378 | ENABLE_STRICT_OBJC_MSGSEND = YES;
379 | GCC_C_LANGUAGE_STANDARD = gnu11;
380 | GCC_NO_COMMON_BLOCKS = YES;
381 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
382 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
383 | GCC_WARN_UNDECLARED_SELECTOR = YES;
384 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
385 | GCC_WARN_UNUSED_FUNCTION = YES;
386 | GCC_WARN_UNUSED_VARIABLE = YES;
387 | MACOSX_DEPLOYMENT_TARGET = 11.4;
388 | MTL_ENABLE_DEBUG_INFO = NO;
389 | MTL_FAST_MATH = YES;
390 | SDKROOT = macosx;
391 | SWIFT_COMPILATION_MODE = wholemodule;
392 | SWIFT_OPTIMIZATION_LEVEL = "-O";
393 | };
394 | name = Release;
395 | };
396 | 2356DBD526A50AB200A39A25 /* Debug */ = {
397 | isa = XCBuildConfiguration;
398 | buildSettings = {
399 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
400 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
401 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
402 | CODE_SIGN_STYLE = Automatic;
403 | COMBINE_HIDPI_IMAGES = YES;
404 | CURRENT_PROJECT_VERSION = 1;
405 | DEVELOPMENT_ASSET_PATHS = "\"DSFDockTile Plugin Demo/Preview Content\"";
406 | ENABLE_APP_SANDBOX = YES;
407 | ENABLE_PREVIEWS = YES;
408 | ENABLE_USER_SELECTED_FILES = readonly;
409 | GENERATE_INFOPLIST_FILE = YES;
410 | INFOPLIST_FILE = "DSFDockTile-Plugin-Demo-Info.plist";
411 | INFOPLIST_KEY_CFBundleExecutable = "DSFDockTile Plugin Demo";
412 | INFOPLIST_KEY_CFBundleName = "DSFDockTile Plugin Demo";
413 | INFOPLIST_KEY_CFBundleVersion = 1;
414 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
415 | LD_RUNPATH_SEARCH_PATHS = (
416 | "$(inherited)",
417 | "@executable_path/../Frameworks",
418 | );
419 | MACOSX_DEPLOYMENT_TARGET = 11.0;
420 | MARKETING_VERSION = 1.0;
421 | PRODUCT_BUNDLE_IDENTIFIER = "com.dagronf.dsfdocktile.plugin-demo.app";
422 | PRODUCT_NAME = "$(TARGET_NAME)";
423 | SWIFT_EMIT_LOC_STRINGS = YES;
424 | SWIFT_VERSION = 5.0;
425 | };
426 | name = Debug;
427 | };
428 | 2356DBD626A50AB200A39A25 /* Release */ = {
429 | isa = XCBuildConfiguration;
430 | buildSettings = {
431 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
432 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
433 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
434 | CODE_SIGN_STYLE = Automatic;
435 | COMBINE_HIDPI_IMAGES = YES;
436 | CURRENT_PROJECT_VERSION = 1;
437 | DEVELOPMENT_ASSET_PATHS = "\"DSFDockTile Plugin Demo/Preview Content\"";
438 | ENABLE_APP_SANDBOX = YES;
439 | ENABLE_PREVIEWS = YES;
440 | ENABLE_USER_SELECTED_FILES = readonly;
441 | GENERATE_INFOPLIST_FILE = YES;
442 | INFOPLIST_FILE = "DSFDockTile-Plugin-Demo-Info.plist";
443 | INFOPLIST_KEY_CFBundleExecutable = "DSFDockTile Plugin Demo";
444 | INFOPLIST_KEY_CFBundleName = "DSFDockTile Plugin Demo";
445 | INFOPLIST_KEY_CFBundleVersion = 1;
446 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
447 | LD_RUNPATH_SEARCH_PATHS = (
448 | "$(inherited)",
449 | "@executable_path/../Frameworks",
450 | );
451 | MACOSX_DEPLOYMENT_TARGET = 11.0;
452 | MARKETING_VERSION = 1.0;
453 | PRODUCT_BUNDLE_IDENTIFIER = "com.dagronf.dsfdocktile.plugin-demo.app";
454 | PRODUCT_NAME = "$(TARGET_NAME)";
455 | SWIFT_EMIT_LOC_STRINGS = YES;
456 | SWIFT_VERSION = 5.0;
457 | };
458 | name = Release;
459 | };
460 | 2356DBDD26A50B0100A39A25 /* Debug */ = {
461 | isa = XCBuildConfiguration;
462 | buildSettings = {
463 | CODE_SIGN_STYLE = Automatic;
464 | COMBINE_HIDPI_IMAGES = YES;
465 | CURRENT_PROJECT_VERSION = 1;
466 | EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO;
467 | GENERATE_INFOPLIST_FILE = YES;
468 | INFOPLIST_FILE = "DSFDockTilePlugin-Info.plist";
469 | INFOPLIST_KEY_CFBundleExecutable = DSFDockTilePlugin;
470 | INFOPLIST_KEY_CFBundleName = DSFDockTilePlugin;
471 | INFOPLIST_KEY_CFBundleVersion = 1;
472 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
473 | INFOPLIST_KEY_NSPrincipalClass = "";
474 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles";
475 | MACOSX_DEPLOYMENT_TARGET = 11.0;
476 | MARKETING_VERSION = 1.0;
477 | PRODUCT_BUNDLE_IDENTIFIER = "com.dagronf.dsfdocktile.plugin-demo.plugin.DSFDockTilePlugin";
478 | PRODUCT_NAME = "$(TARGET_NAME)";
479 | SKIP_INSTALL = YES;
480 | SWIFT_EMIT_LOC_STRINGS = YES;
481 | SWIFT_VERSION = 5.0;
482 | WRAPPER_EXTENSION = plugin;
483 | };
484 | name = Debug;
485 | };
486 | 2356DBDE26A50B0100A39A25 /* Release */ = {
487 | isa = XCBuildConfiguration;
488 | buildSettings = {
489 | CODE_SIGN_STYLE = Automatic;
490 | COMBINE_HIDPI_IMAGES = YES;
491 | CURRENT_PROJECT_VERSION = 1;
492 | EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO;
493 | GENERATE_INFOPLIST_FILE = YES;
494 | INFOPLIST_FILE = "DSFDockTilePlugin-Info.plist";
495 | INFOPLIST_KEY_CFBundleExecutable = DSFDockTilePlugin;
496 | INFOPLIST_KEY_CFBundleName = DSFDockTilePlugin;
497 | INFOPLIST_KEY_CFBundleVersion = 1;
498 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
499 | INFOPLIST_KEY_NSPrincipalClass = "";
500 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles";
501 | MACOSX_DEPLOYMENT_TARGET = 11.0;
502 | MARKETING_VERSION = 1.0;
503 | PRODUCT_BUNDLE_IDENTIFIER = "com.dagronf.dsfdocktile.plugin-demo.plugin.DSFDockTilePlugin";
504 | PRODUCT_NAME = "$(TARGET_NAME)";
505 | SKIP_INSTALL = YES;
506 | SWIFT_EMIT_LOC_STRINGS = YES;
507 | SWIFT_VERSION = 5.0;
508 | WRAPPER_EXTENSION = plugin;
509 | };
510 | name = Release;
511 | };
512 | /* End XCBuildConfiguration section */
513 |
514 | /* Begin XCConfigurationList section */
515 | 2356DBC126A50AB100A39A25 /* Build configuration list for PBXProject "DSFDockTile Plugin Demo" */ = {
516 | isa = XCConfigurationList;
517 | buildConfigurations = (
518 | 2356DBD226A50AB200A39A25 /* Debug */,
519 | 2356DBD326A50AB200A39A25 /* Release */,
520 | );
521 | defaultConfigurationIsVisible = 0;
522 | defaultConfigurationName = Release;
523 | };
524 | 2356DBD426A50AB200A39A25 /* Build configuration list for PBXNativeTarget "DSFDockTile Plugin Demo" */ = {
525 | isa = XCConfigurationList;
526 | buildConfigurations = (
527 | 2356DBD526A50AB200A39A25 /* Debug */,
528 | 2356DBD626A50AB200A39A25 /* Release */,
529 | );
530 | defaultConfigurationIsVisible = 0;
531 | defaultConfigurationName = Release;
532 | };
533 | 2356DBDC26A50B0100A39A25 /* Build configuration list for PBXNativeTarget "DSFDockTilePlugin" */ = {
534 | isa = XCConfigurationList;
535 | buildConfigurations = (
536 | 2356DBDD26A50B0100A39A25 /* Debug */,
537 | 2356DBDE26A50B0100A39A25 /* Release */,
538 | );
539 | defaultConfigurationIsVisible = 0;
540 | defaultConfigurationName = Release;
541 | };
542 | /* End XCConfigurationList section */
543 |
544 | /* Begin XCRemoteSwiftPackageReference section */
545 | 2356DBEF26A50C1300A39A25 /* XCRemoteSwiftPackageReference "DSFDockTile" */ = {
546 | isa = XCRemoteSwiftPackageReference;
547 | repositoryURL = "https://github.com/dagronf/DSFDockTile";
548 | requirement = {
549 | kind = upToNextMajorVersion;
550 | minimumVersion = 0.5.2;
551 | };
552 | };
553 | /* End XCRemoteSwiftPackageReference section */
554 |
555 | /* Begin XCSwiftPackageProductDependency section */
556 | 2356DBF026A50C1300A39A25 /* DSFDockTile */ = {
557 | isa = XCSwiftPackageProductDependency;
558 | package = 2356DBEF26A50C1300A39A25 /* XCRemoteSwiftPackageReference "DSFDockTile" */;
559 | productName = DSFDockTile;
560 | };
561 | /* End XCSwiftPackageProductDependency section */
562 | };
563 | rootObject = 2356DBBE26A50AB100A39A25 /* Project object */;
564 | }
565 |
--------------------------------------------------------------------------------
/Demos/DSFDockTile Demo/AnimatedViewController.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | The docktile is being generated as an animation using the DSFImageFlipbook package, loading the frames directly from a GIF file.
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | NSNegateBoolean
49 |
50 |
51 |
52 |
53 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 | NSNegateBoolean
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
--------------------------------------------------------------------------------
/Demos/DSFDockTile Demo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 54;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 2321A55126A13BF5003C94F8 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2321A55026A13BF5003C94F8 /* AppDelegate.swift */; };
11 | 2321A55326A13BF6003C94F8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2321A55226A13BF6003C94F8 /* Assets.xcassets */; };
12 | 2321A55626A13BF6003C94F8 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2321A55426A13BF6003C94F8 /* MainMenu.xib */; };
13 | 2321A55E26A13E07003C94F8 /* ImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2321A55C26A13E07003C94F8 /* ImageViewController.swift */; };
14 | 2321A55F26A13E07003C94F8 /* ImageViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2321A55D26A13E07003C94F8 /* ImageViewController.xib */; };
15 | 2321A56226A13E15003C94F8 /* AnimatedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2321A56026A13E15003C94F8 /* AnimatedViewController.swift */; };
16 | 2321A56326A13E15003C94F8 /* AnimatedViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2321A56126A13E15003C94F8 /* AnimatedViewController.xib */; };
17 | 2321A56626A13E26003C94F8 /* XIBViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2321A56426A13E26003C94F8 /* XIBViewController.swift */; };
18 | 2321A56726A13E26003C94F8 /* XIBViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2321A56526A13E26003C94F8 /* XIBViewController.xib */; };
19 | 2321A56F26A15194003C94F8 /* NSInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2321A56D26A15194003C94F8 /* NSInfoViewController.swift */; };
20 | 2321A57026A15194003C94F8 /* NSInfoViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2321A56E26A15194003C94F8 /* NSInfoViewController.xib */; };
21 | 2321A57326A15299003C94F8 /* DockViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2321A57126A15299003C94F8 /* DockViewController.xib */; };
22 | 2321A57426A15299003C94F8 /* DockViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2321A57226A15299003C94F8 /* DockViewController.swift */; };
23 | 2321A57B26A16928003C94F8 /* DSFDockTile in Frameworks */ = {isa = PBXBuildFile; productRef = 2321A57A26A16928003C94F8 /* DSFDockTile */; };
24 | 232B361A27E94C6E001679EB /* SwiftUI_docktile_demoApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 232B361927E94C6E001679EB /* SwiftUI_docktile_demoApp.swift */; };
25 | 232B361C27E94C6E001679EB /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 232B361B27E94C6E001679EB /* ContentView.swift */; };
26 | 232B361E27E94C6F001679EB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 232B361D27E94C6F001679EB /* Assets.xcassets */; };
27 | 232B362127E94C6F001679EB /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 232B362027E94C6F001679EB /* Preview Assets.xcassets */; };
28 | 232B362727E94D33001679EB /* DockTileContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 232B362627E94D33001679EB /* DockTileContentView.swift */; };
29 | 232B362927E94E92001679EB /* DSFDockTile in Frameworks */ = {isa = PBXBuildFile; productRef = 232B362827E94E92001679EB /* DSFDockTile */; };
30 | 235933D626A28D58002258AB /* AttentionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 235933D426A28D58002258AB /* AttentionViewController.swift */; };
31 | 235933D726A28D58002258AB /* AttentionViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 235933D526A28D58002258AB /* AttentionViewController.xib */; };
32 | 235933DD26A2AEF9002258AB /* DockTile+SecondaryWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 235933DC26A2AEF9002258AB /* DockTile+SecondaryWindow.swift */; };
33 | 235933E026A2B092002258AB /* WindowedDockTileViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 235933DE26A2B092002258AB /* WindowedDockTileViewController.swift */; };
34 | 235933E126A2B092002258AB /* WindowedDockTileViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 235933DF26A2B092002258AB /* WindowedDockTileViewController.xib */; };
35 | /* End PBXBuildFile section */
36 |
37 | /* Begin PBXCopyFilesBuildPhase section */
38 | 2356DB9926A4FA8700A39A25 /* Embed PlugIns */ = {
39 | isa = PBXCopyFilesBuildPhase;
40 | buildActionMask = 2147483647;
41 | dstPath = "";
42 | dstSubfolderSpec = 13;
43 | files = (
44 | );
45 | name = "Embed PlugIns";
46 | runOnlyForDeploymentPostprocessing = 0;
47 | };
48 | /* End PBXCopyFilesBuildPhase section */
49 |
50 | /* Begin PBXFileReference section */
51 | 2321A54D26A13BF5003C94F8 /* DSFDockTile Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DSFDockTile Demo.app"; sourceTree = BUILT_PRODUCTS_DIR; };
52 | 2321A55026A13BF5003C94F8 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
53 | 2321A55226A13BF6003C94F8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
54 | 2321A55526A13BF6003C94F8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; };
55 | 2321A55C26A13E07003C94F8 /* ImageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageViewController.swift; sourceTree = ""; };
56 | 2321A55D26A13E07003C94F8 /* ImageViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ImageViewController.xib; sourceTree = ""; };
57 | 2321A56026A13E15003C94F8 /* AnimatedViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnimatedViewController.swift; sourceTree = ""; };
58 | 2321A56126A13E15003C94F8 /* AnimatedViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AnimatedViewController.xib; sourceTree = ""; };
59 | 2321A56426A13E26003C94F8 /* XIBViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XIBViewController.swift; sourceTree = ""; };
60 | 2321A56526A13E26003C94F8 /* XIBViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = XIBViewController.xib; sourceTree = ""; };
61 | 2321A56D26A15194003C94F8 /* NSInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSInfoViewController.swift; sourceTree = ""; };
62 | 2321A56E26A15194003C94F8 /* NSInfoViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NSInfoViewController.xib; sourceTree = ""; };
63 | 2321A57126A15299003C94F8 /* DockViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DockViewController.xib; sourceTree = ""; };
64 | 2321A57226A15299003C94F8 /* DockViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DockViewController.swift; sourceTree = ""; };
65 | 2321A57826A1691C003C94F8 /* DSFDockTile */ = {isa = PBXFileReference; lastKnownFileType = folder; name = DSFDockTile; path = ..; sourceTree = ""; };
66 | 232B361727E94C6E001679EB /* SwiftUI docktile demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "SwiftUI docktile demo.app"; sourceTree = BUILT_PRODUCTS_DIR; };
67 | 232B361927E94C6E001679EB /* SwiftUI_docktile_demoApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUI_docktile_demoApp.swift; sourceTree = ""; };
68 | 232B361B27E94C6E001679EB /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
69 | 232B361D27E94C6F001679EB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
70 | 232B362027E94C6F001679EB /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
71 | 232B362227E94C6F001679EB /* SwiftUI_docktile_demo.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SwiftUI_docktile_demo.entitlements; sourceTree = ""; };
72 | 232B362627E94D33001679EB /* DockTileContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DockTileContentView.swift; sourceTree = ""; };
73 | 235933D426A28D58002258AB /* AttentionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttentionViewController.swift; sourceTree = ""; };
74 | 235933D526A28D58002258AB /* AttentionViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AttentionViewController.xib; sourceTree = ""; };
75 | 235933D826A29757002258AB /* DSFDockTile Demo.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "DSFDockTile Demo.entitlements"; sourceTree = ""; };
76 | 235933DC26A2AEF9002258AB /* DockTile+SecondaryWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DockTile+SecondaryWindow.swift"; sourceTree = ""; };
77 | 235933DE26A2B092002258AB /* WindowedDockTileViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowedDockTileViewController.swift; sourceTree = ""; };
78 | 235933DF26A2B092002258AB /* WindowedDockTileViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WindowedDockTileViewController.xib; sourceTree = ""; };
79 | /* End PBXFileReference section */
80 |
81 | /* Begin PBXFrameworksBuildPhase section */
82 | 2321A54A26A13BF5003C94F8 /* Frameworks */ = {
83 | isa = PBXFrameworksBuildPhase;
84 | buildActionMask = 2147483647;
85 | files = (
86 | 2321A57B26A16928003C94F8 /* DSFDockTile in Frameworks */,
87 | );
88 | runOnlyForDeploymentPostprocessing = 0;
89 | };
90 | 232B361427E94C6E001679EB /* Frameworks */ = {
91 | isa = PBXFrameworksBuildPhase;
92 | buildActionMask = 2147483647;
93 | files = (
94 | 232B362927E94E92001679EB /* DSFDockTile in Frameworks */,
95 | );
96 | runOnlyForDeploymentPostprocessing = 0;
97 | };
98 | /* End PBXFrameworksBuildPhase section */
99 |
100 | /* Begin PBXGroup section */
101 | 2321A54426A13BF5003C94F8 = {
102 | isa = PBXGroup;
103 | children = (
104 | 2321A57826A1691C003C94F8 /* DSFDockTile */,
105 | 2321A54F26A13BF5003C94F8 /* DSFDockTile Demo */,
106 | 232B361827E94C6E001679EB /* SwiftUI docktile demo */,
107 | 2321A54E26A13BF5003C94F8 /* Products */,
108 | 2321A57926A16928003C94F8 /* Frameworks */,
109 | );
110 | sourceTree = "";
111 | };
112 | 2321A54E26A13BF5003C94F8 /* Products */ = {
113 | isa = PBXGroup;
114 | children = (
115 | 2321A54D26A13BF5003C94F8 /* DSFDockTile Demo.app */,
116 | 232B361727E94C6E001679EB /* SwiftUI docktile demo.app */,
117 | );
118 | name = Products;
119 | sourceTree = "";
120 | };
121 | 2321A54F26A13BF5003C94F8 /* DSFDockTile Demo */ = {
122 | isa = PBXGroup;
123 | children = (
124 | 235933D926A2AE68002258AB /* window-based */,
125 | 235933D826A29757002258AB /* DSFDockTile Demo.entitlements */,
126 | 2321A55026A13BF5003C94F8 /* AppDelegate.swift */,
127 | 2321A55226A13BF6003C94F8 /* Assets.xcassets */,
128 | 2321A55426A13BF6003C94F8 /* MainMenu.xib */,
129 | 2321A55C26A13E07003C94F8 /* ImageViewController.swift */,
130 | 2321A55D26A13E07003C94F8 /* ImageViewController.xib */,
131 | 2321A56026A13E15003C94F8 /* AnimatedViewController.swift */,
132 | 2321A56126A13E15003C94F8 /* AnimatedViewController.xib */,
133 | 2321A56426A13E26003C94F8 /* XIBViewController.swift */,
134 | 2321A56526A13E26003C94F8 /* XIBViewController.xib */,
135 | 2321A57226A15299003C94F8 /* DockViewController.swift */,
136 | 2321A57126A15299003C94F8 /* DockViewController.xib */,
137 | 2321A56D26A15194003C94F8 /* NSInfoViewController.swift */,
138 | 2321A56E26A15194003C94F8 /* NSInfoViewController.xib */,
139 | 235933D426A28D58002258AB /* AttentionViewController.swift */,
140 | 235933D526A28D58002258AB /* AttentionViewController.xib */,
141 | );
142 | path = "DSFDockTile Demo";
143 | sourceTree = "";
144 | };
145 | 2321A57926A16928003C94F8 /* Frameworks */ = {
146 | isa = PBXGroup;
147 | children = (
148 | );
149 | name = Frameworks;
150 | sourceTree = "";
151 | };
152 | 232B361827E94C6E001679EB /* SwiftUI docktile demo */ = {
153 | isa = PBXGroup;
154 | children = (
155 | 232B361927E94C6E001679EB /* SwiftUI_docktile_demoApp.swift */,
156 | 232B361B27E94C6E001679EB /* ContentView.swift */,
157 | 232B362627E94D33001679EB /* DockTileContentView.swift */,
158 | 232B361D27E94C6F001679EB /* Assets.xcassets */,
159 | 232B362227E94C6F001679EB /* SwiftUI_docktile_demo.entitlements */,
160 | 232B361F27E94C6F001679EB /* Preview Content */,
161 | );
162 | path = "SwiftUI docktile demo";
163 | sourceTree = "";
164 | };
165 | 232B361F27E94C6F001679EB /* Preview Content */ = {
166 | isa = PBXGroup;
167 | children = (
168 | 232B362027E94C6F001679EB /* Preview Assets.xcassets */,
169 | );
170 | path = "Preview Content";
171 | sourceTree = "";
172 | };
173 | 235933D926A2AE68002258AB /* window-based */ = {
174 | isa = PBXGroup;
175 | children = (
176 | 235933DC26A2AEF9002258AB /* DockTile+SecondaryWindow.swift */,
177 | 235933DE26A2B092002258AB /* WindowedDockTileViewController.swift */,
178 | 235933DF26A2B092002258AB /* WindowedDockTileViewController.xib */,
179 | );
180 | path = "window-based";
181 | sourceTree = "";
182 | };
183 | /* End PBXGroup section */
184 |
185 | /* Begin PBXNativeTarget section */
186 | 2321A54C26A13BF5003C94F8 /* DSFDockTile Demo */ = {
187 | isa = PBXNativeTarget;
188 | buildConfigurationList = 2321A55926A13BF6003C94F8 /* Build configuration list for PBXNativeTarget "DSFDockTile Demo" */;
189 | buildPhases = (
190 | 2321A54926A13BF5003C94F8 /* Sources */,
191 | 2321A54A26A13BF5003C94F8 /* Frameworks */,
192 | 2321A54B26A13BF5003C94F8 /* Resources */,
193 | 2356DB9926A4FA8700A39A25 /* Embed PlugIns */,
194 | );
195 | buildRules = (
196 | );
197 | dependencies = (
198 | );
199 | name = "DSFDockTile Demo";
200 | packageProductDependencies = (
201 | 2321A57A26A16928003C94F8 /* DSFDockTile */,
202 | );
203 | productName = "DSFDockTile Demo";
204 | productReference = 2321A54D26A13BF5003C94F8 /* DSFDockTile Demo.app */;
205 | productType = "com.apple.product-type.application";
206 | };
207 | 232B361627E94C6E001679EB /* SwiftUI docktile demo */ = {
208 | isa = PBXNativeTarget;
209 | buildConfigurationList = 232B362527E94C6F001679EB /* Build configuration list for PBXNativeTarget "SwiftUI docktile demo" */;
210 | buildPhases = (
211 | 232B361327E94C6E001679EB /* Sources */,
212 | 232B361427E94C6E001679EB /* Frameworks */,
213 | 232B361527E94C6E001679EB /* Resources */,
214 | );
215 | buildRules = (
216 | );
217 | dependencies = (
218 | );
219 | name = "SwiftUI docktile demo";
220 | packageProductDependencies = (
221 | 232B362827E94E92001679EB /* DSFDockTile */,
222 | );
223 | productName = "SwiftUI docktile demo";
224 | productReference = 232B361727E94C6E001679EB /* SwiftUI docktile demo.app */;
225 | productType = "com.apple.product-type.application";
226 | };
227 | /* End PBXNativeTarget section */
228 |
229 | /* Begin PBXProject section */
230 | 2321A54526A13BF5003C94F8 /* Project object */ = {
231 | isa = PBXProject;
232 | attributes = {
233 | BuildIndependentTargetsInParallel = 1;
234 | LastSwiftUpdateCheck = 1330;
235 | LastUpgradeCheck = 1300;
236 | TargetAttributes = {
237 | 2321A54C26A13BF5003C94F8 = {
238 | CreatedOnToolsVersion = 13.0;
239 | };
240 | 232B361627E94C6E001679EB = {
241 | CreatedOnToolsVersion = 13.3;
242 | };
243 | };
244 | };
245 | buildConfigurationList = 2321A54826A13BF5003C94F8 /* Build configuration list for PBXProject "DSFDockTile Demo" */;
246 | compatibilityVersion = "Xcode 12.0";
247 | developmentRegion = en;
248 | hasScannedForEncodings = 0;
249 | knownRegions = (
250 | en,
251 | Base,
252 | );
253 | mainGroup = 2321A54426A13BF5003C94F8;
254 | packageReferences = (
255 | );
256 | productRefGroup = 2321A54E26A13BF5003C94F8 /* Products */;
257 | projectDirPath = "";
258 | projectRoot = "";
259 | targets = (
260 | 2321A54C26A13BF5003C94F8 /* DSFDockTile Demo */,
261 | 232B361627E94C6E001679EB /* SwiftUI docktile demo */,
262 | );
263 | };
264 | /* End PBXProject section */
265 |
266 | /* Begin PBXResourcesBuildPhase section */
267 | 2321A54B26A13BF5003C94F8 /* Resources */ = {
268 | isa = PBXResourcesBuildPhase;
269 | buildActionMask = 2147483647;
270 | files = (
271 | 2321A56726A13E26003C94F8 /* XIBViewController.xib in Resources */,
272 | 235933D726A28D58002258AB /* AttentionViewController.xib in Resources */,
273 | 2321A57026A15194003C94F8 /* NSInfoViewController.xib in Resources */,
274 | 2321A57326A15299003C94F8 /* DockViewController.xib in Resources */,
275 | 2321A55326A13BF6003C94F8 /* Assets.xcassets in Resources */,
276 | 235933E126A2B092002258AB /* WindowedDockTileViewController.xib in Resources */,
277 | 2321A56326A13E15003C94F8 /* AnimatedViewController.xib in Resources */,
278 | 2321A55F26A13E07003C94F8 /* ImageViewController.xib in Resources */,
279 | 2321A55626A13BF6003C94F8 /* MainMenu.xib in Resources */,
280 | );
281 | runOnlyForDeploymentPostprocessing = 0;
282 | };
283 | 232B361527E94C6E001679EB /* Resources */ = {
284 | isa = PBXResourcesBuildPhase;
285 | buildActionMask = 2147483647;
286 | files = (
287 | 232B362127E94C6F001679EB /* Preview Assets.xcassets in Resources */,
288 | 232B361E27E94C6F001679EB /* Assets.xcassets in Resources */,
289 | );
290 | runOnlyForDeploymentPostprocessing = 0;
291 | };
292 | /* End PBXResourcesBuildPhase section */
293 |
294 | /* Begin PBXSourcesBuildPhase section */
295 | 2321A54926A13BF5003C94F8 /* Sources */ = {
296 | isa = PBXSourcesBuildPhase;
297 | buildActionMask = 2147483647;
298 | files = (
299 | 2321A56626A13E26003C94F8 /* XIBViewController.swift in Sources */,
300 | 2321A56F26A15194003C94F8 /* NSInfoViewController.swift in Sources */,
301 | 2321A55E26A13E07003C94F8 /* ImageViewController.swift in Sources */,
302 | 235933E026A2B092002258AB /* WindowedDockTileViewController.swift in Sources */,
303 | 235933DD26A2AEF9002258AB /* DockTile+SecondaryWindow.swift in Sources */,
304 | 2321A55126A13BF5003C94F8 /* AppDelegate.swift in Sources */,
305 | 235933D626A28D58002258AB /* AttentionViewController.swift in Sources */,
306 | 2321A57426A15299003C94F8 /* DockViewController.swift in Sources */,
307 | 2321A56226A13E15003C94F8 /* AnimatedViewController.swift in Sources */,
308 | );
309 | runOnlyForDeploymentPostprocessing = 0;
310 | };
311 | 232B361327E94C6E001679EB /* Sources */ = {
312 | isa = PBXSourcesBuildPhase;
313 | buildActionMask = 2147483647;
314 | files = (
315 | 232B362727E94D33001679EB /* DockTileContentView.swift in Sources */,
316 | 232B361C27E94C6E001679EB /* ContentView.swift in Sources */,
317 | 232B361A27E94C6E001679EB /* SwiftUI_docktile_demoApp.swift in Sources */,
318 | );
319 | runOnlyForDeploymentPostprocessing = 0;
320 | };
321 | /* End PBXSourcesBuildPhase section */
322 |
323 | /* Begin PBXVariantGroup section */
324 | 2321A55426A13BF6003C94F8 /* MainMenu.xib */ = {
325 | isa = PBXVariantGroup;
326 | children = (
327 | 2321A55526A13BF6003C94F8 /* Base */,
328 | );
329 | name = MainMenu.xib;
330 | sourceTree = "";
331 | };
332 | /* End PBXVariantGroup section */
333 |
334 | /* Begin XCBuildConfiguration section */
335 | 2321A55726A13BF6003C94F8 /* Debug */ = {
336 | isa = XCBuildConfiguration;
337 | buildSettings = {
338 | ALWAYS_SEARCH_USER_PATHS = NO;
339 | CLANG_ANALYZER_NONNULL = YES;
340 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
341 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
342 | CLANG_CXX_LIBRARY = "libc++";
343 | CLANG_ENABLE_MODULES = YES;
344 | CLANG_ENABLE_OBJC_ARC = YES;
345 | CLANG_ENABLE_OBJC_WEAK = YES;
346 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
347 | CLANG_WARN_BOOL_CONVERSION = YES;
348 | CLANG_WARN_COMMA = YES;
349 | CLANG_WARN_CONSTANT_CONVERSION = YES;
350 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
351 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
352 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
353 | CLANG_WARN_EMPTY_BODY = YES;
354 | CLANG_WARN_ENUM_CONVERSION = YES;
355 | CLANG_WARN_INFINITE_RECURSION = YES;
356 | CLANG_WARN_INT_CONVERSION = YES;
357 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
358 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
359 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
360 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
361 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
362 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
363 | CLANG_WARN_STRICT_PROTOTYPES = YES;
364 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
365 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
366 | CLANG_WARN_UNREACHABLE_CODE = YES;
367 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
368 | COPY_PHASE_STRIP = NO;
369 | DEBUG_INFORMATION_FORMAT = dwarf;
370 | ENABLE_STRICT_OBJC_MSGSEND = YES;
371 | ENABLE_TESTABILITY = YES;
372 | GCC_C_LANGUAGE_STANDARD = gnu11;
373 | GCC_DYNAMIC_NO_PIC = NO;
374 | GCC_NO_COMMON_BLOCKS = YES;
375 | GCC_OPTIMIZATION_LEVEL = 0;
376 | GCC_PREPROCESSOR_DEFINITIONS = (
377 | "DEBUG=1",
378 | "$(inherited)",
379 | );
380 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
381 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
382 | GCC_WARN_UNDECLARED_SELECTOR = YES;
383 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
384 | GCC_WARN_UNUSED_FUNCTION = YES;
385 | GCC_WARN_UNUSED_VARIABLE = YES;
386 | MACOSX_DEPLOYMENT_TARGET = 10.14;
387 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
388 | MTL_FAST_MATH = YES;
389 | ONLY_ACTIVE_ARCH = YES;
390 | SDKROOT = macosx;
391 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
392 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
393 | };
394 | name = Debug;
395 | };
396 | 2321A55826A13BF6003C94F8 /* Release */ = {
397 | isa = XCBuildConfiguration;
398 | buildSettings = {
399 | ALWAYS_SEARCH_USER_PATHS = NO;
400 | CLANG_ANALYZER_NONNULL = YES;
401 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
402 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
403 | CLANG_CXX_LIBRARY = "libc++";
404 | CLANG_ENABLE_MODULES = YES;
405 | CLANG_ENABLE_OBJC_ARC = YES;
406 | CLANG_ENABLE_OBJC_WEAK = YES;
407 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
408 | CLANG_WARN_BOOL_CONVERSION = YES;
409 | CLANG_WARN_COMMA = YES;
410 | CLANG_WARN_CONSTANT_CONVERSION = YES;
411 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
412 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
413 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
414 | CLANG_WARN_EMPTY_BODY = YES;
415 | CLANG_WARN_ENUM_CONVERSION = YES;
416 | CLANG_WARN_INFINITE_RECURSION = YES;
417 | CLANG_WARN_INT_CONVERSION = YES;
418 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
419 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
420 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
421 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
422 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
423 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
424 | CLANG_WARN_STRICT_PROTOTYPES = YES;
425 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
426 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
427 | CLANG_WARN_UNREACHABLE_CODE = YES;
428 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
429 | COPY_PHASE_STRIP = NO;
430 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
431 | ENABLE_NS_ASSERTIONS = NO;
432 | ENABLE_STRICT_OBJC_MSGSEND = YES;
433 | GCC_C_LANGUAGE_STANDARD = gnu11;
434 | GCC_NO_COMMON_BLOCKS = YES;
435 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
436 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
437 | GCC_WARN_UNDECLARED_SELECTOR = YES;
438 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
439 | GCC_WARN_UNUSED_FUNCTION = YES;
440 | GCC_WARN_UNUSED_VARIABLE = YES;
441 | MACOSX_DEPLOYMENT_TARGET = 10.14;
442 | MTL_ENABLE_DEBUG_INFO = NO;
443 | MTL_FAST_MATH = YES;
444 | SDKROOT = macosx;
445 | SWIFT_COMPILATION_MODE = wholemodule;
446 | SWIFT_OPTIMIZATION_LEVEL = "-O";
447 | };
448 | name = Release;
449 | };
450 | 2321A55A26A13BF6003C94F8 /* Debug */ = {
451 | isa = XCBuildConfiguration;
452 | buildSettings = {
453 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
454 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
455 | CODE_SIGN_ENTITLEMENTS = "DSFDockTile Demo/DSFDockTile Demo.entitlements";
456 | CODE_SIGN_STYLE = Automatic;
457 | COMBINE_HIDPI_IMAGES = YES;
458 | CURRENT_PROJECT_VERSION = 1;
459 | DEVELOPMENT_TEAM = 3L6RK3LGGW;
460 | ENABLE_APP_SANDBOX = YES;
461 | ENABLE_HARDENED_RUNTIME = NO;
462 | ENABLE_USER_SELECTED_FILES = readonly;
463 | GENERATE_INFOPLIST_FILE = YES;
464 | INFOPLIST_FILE = "DSFDockTile Demo/Info.plist";
465 | INFOPLIST_KEY_CFBundleExecutable = "DSFDockTile Demo";
466 | INFOPLIST_KEY_CFBundleName = "DSFDockTile Demo";
467 | INFOPLIST_KEY_CFBundleVersion = 1;
468 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
469 | INFOPLIST_KEY_NSMainNibFile = MainMenu;
470 | INFOPLIST_KEY_NSPrincipalClass = NSApplication;
471 | LD_RUNPATH_SEARCH_PATHS = (
472 | "$(inherited)",
473 | "@executable_path/../Frameworks",
474 | );
475 | MARKETING_VERSION = 1.0;
476 | PRODUCT_BUNDLE_IDENTIFIER = com.dagronf.dsfdocktile.demo;
477 | PRODUCT_NAME = "$(TARGET_NAME)";
478 | SWIFT_EMIT_LOC_STRINGS = YES;
479 | SWIFT_VERSION = 5.0;
480 | };
481 | name = Debug;
482 | };
483 | 2321A55B26A13BF6003C94F8 /* Release */ = {
484 | isa = XCBuildConfiguration;
485 | buildSettings = {
486 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
487 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
488 | CODE_SIGN_ENTITLEMENTS = "DSFDockTile Demo/DSFDockTile Demo.entitlements";
489 | CODE_SIGN_STYLE = Automatic;
490 | COMBINE_HIDPI_IMAGES = YES;
491 | CURRENT_PROJECT_VERSION = 1;
492 | DEVELOPMENT_TEAM = 3L6RK3LGGW;
493 | ENABLE_APP_SANDBOX = YES;
494 | ENABLE_HARDENED_RUNTIME = NO;
495 | ENABLE_USER_SELECTED_FILES = readonly;
496 | GENERATE_INFOPLIST_FILE = YES;
497 | INFOPLIST_FILE = "DSFDockTile Demo/Info.plist";
498 | INFOPLIST_KEY_CFBundleExecutable = "DSFDockTile Demo";
499 | INFOPLIST_KEY_CFBundleName = "DSFDockTile Demo";
500 | INFOPLIST_KEY_CFBundleVersion = 1;
501 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
502 | INFOPLIST_KEY_NSMainNibFile = MainMenu;
503 | INFOPLIST_KEY_NSPrincipalClass = NSApplication;
504 | LD_RUNPATH_SEARCH_PATHS = (
505 | "$(inherited)",
506 | "@executable_path/../Frameworks",
507 | );
508 | MARKETING_VERSION = 1.0;
509 | PRODUCT_BUNDLE_IDENTIFIER = com.dagronf.dsfdocktile.demo;
510 | PRODUCT_NAME = "$(TARGET_NAME)";
511 | SWIFT_EMIT_LOC_STRINGS = YES;
512 | SWIFT_VERSION = 5.0;
513 | };
514 | name = Release;
515 | };
516 | 232B362327E94C6F001679EB /* Debug */ = {
517 | isa = XCBuildConfiguration;
518 | buildSettings = {
519 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
520 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
521 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
522 | CODE_SIGN_ENTITLEMENTS = "SwiftUI docktile demo/SwiftUI_docktile_demo.entitlements";
523 | CODE_SIGN_STYLE = Automatic;
524 | COMBINE_HIDPI_IMAGES = YES;
525 | CURRENT_PROJECT_VERSION = 1;
526 | DEVELOPMENT_ASSET_PATHS = "\"SwiftUI docktile demo/Preview Content\"";
527 | DEVELOPMENT_TEAM = 3L6RK3LGGW;
528 | ENABLE_HARDENED_RUNTIME = YES;
529 | ENABLE_PREVIEWS = YES;
530 | GENERATE_INFOPLIST_FILE = YES;
531 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
532 | LD_RUNPATH_SEARCH_PATHS = (
533 | "$(inherited)",
534 | "@executable_path/../Frameworks",
535 | );
536 | MACOSX_DEPLOYMENT_TARGET = 12.3;
537 | MARKETING_VERSION = 1.0;
538 | PRODUCT_BUNDLE_IDENTIFIER = "com.dagronf.valuebinderdemos.pagedview.SwiftUI-docktile-demo";
539 | PRODUCT_NAME = "$(TARGET_NAME)";
540 | SWIFT_EMIT_LOC_STRINGS = YES;
541 | SWIFT_VERSION = 5.0;
542 | };
543 | name = Debug;
544 | };
545 | 232B362427E94C6F001679EB /* Release */ = {
546 | isa = XCBuildConfiguration;
547 | buildSettings = {
548 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
549 | ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
550 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
551 | CODE_SIGN_ENTITLEMENTS = "SwiftUI docktile demo/SwiftUI_docktile_demo.entitlements";
552 | CODE_SIGN_STYLE = Automatic;
553 | COMBINE_HIDPI_IMAGES = YES;
554 | CURRENT_PROJECT_VERSION = 1;
555 | DEVELOPMENT_ASSET_PATHS = "\"SwiftUI docktile demo/Preview Content\"";
556 | DEVELOPMENT_TEAM = 3L6RK3LGGW;
557 | ENABLE_HARDENED_RUNTIME = YES;
558 | ENABLE_PREVIEWS = YES;
559 | GENERATE_INFOPLIST_FILE = YES;
560 | INFOPLIST_KEY_NSHumanReadableCopyright = "";
561 | LD_RUNPATH_SEARCH_PATHS = (
562 | "$(inherited)",
563 | "@executable_path/../Frameworks",
564 | );
565 | MACOSX_DEPLOYMENT_TARGET = 12.3;
566 | MARKETING_VERSION = 1.0;
567 | PRODUCT_BUNDLE_IDENTIFIER = "com.dagronf.valuebinderdemos.pagedview.SwiftUI-docktile-demo";
568 | PRODUCT_NAME = "$(TARGET_NAME)";
569 | SWIFT_EMIT_LOC_STRINGS = YES;
570 | SWIFT_VERSION = 5.0;
571 | };
572 | name = Release;
573 | };
574 | /* End XCBuildConfiguration section */
575 |
576 | /* Begin XCConfigurationList section */
577 | 2321A54826A13BF5003C94F8 /* Build configuration list for PBXProject "DSFDockTile Demo" */ = {
578 | isa = XCConfigurationList;
579 | buildConfigurations = (
580 | 2321A55726A13BF6003C94F8 /* Debug */,
581 | 2321A55826A13BF6003C94F8 /* Release */,
582 | );
583 | defaultConfigurationIsVisible = 0;
584 | defaultConfigurationName = Release;
585 | };
586 | 2321A55926A13BF6003C94F8 /* Build configuration list for PBXNativeTarget "DSFDockTile Demo" */ = {
587 | isa = XCConfigurationList;
588 | buildConfigurations = (
589 | 2321A55A26A13BF6003C94F8 /* Debug */,
590 | 2321A55B26A13BF6003C94F8 /* Release */,
591 | );
592 | defaultConfigurationIsVisible = 0;
593 | defaultConfigurationName = Release;
594 | };
595 | 232B362527E94C6F001679EB /* Build configuration list for PBXNativeTarget "SwiftUI docktile demo" */ = {
596 | isa = XCConfigurationList;
597 | buildConfigurations = (
598 | 232B362327E94C6F001679EB /* Debug */,
599 | 232B362427E94C6F001679EB /* Release */,
600 | );
601 | defaultConfigurationIsVisible = 0;
602 | defaultConfigurationName = Release;
603 | };
604 | /* End XCConfigurationList section */
605 |
606 | /* Begin XCSwiftPackageProductDependency section */
607 | 2321A57A26A16928003C94F8 /* DSFDockTile */ = {
608 | isa = XCSwiftPackageProductDependency;
609 | productName = DSFDockTile;
610 | };
611 | 232B362827E94E92001679EB /* DSFDockTile */ = {
612 | isa = XCSwiftPackageProductDependency;
613 | productName = DSFDockTile;
614 | };
615 | /* End XCSwiftPackageProductDependency section */
616 | };
617 | rootObject = 2321A54526A13BF5003C94F8 /* Project object */;
618 | }
619 |
--------------------------------------------------------------------------------