The Swift Package Index logo.Swift Package Index

Has it really been five years since Swift Package Index launched? Read our anniversary blog post!

Build Information

Successful build of StreamDeck, reference main (3ef001), with Swift 6.1 for macOS (SPM) on 5 Jun 2025 17:45:17 UTC.

Swift 6 data race errors: 358

Build Command

env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete -Xswiftc -enable-upcoming-feature -Xswiftc StrictConcurrency -Xswiftc -enable-upcoming-feature -Xswiftc DisableOutwardActorInference -Xswiftc -enable-upcoming-feature -Xswiftc GlobalActorIsolatedTypesUsability -Xswiftc -enable-upcoming-feature -Xswiftc InferSendableFromCaptures

Build Log

115 | 			var payload: [String: Any] = [:]
116 |
117 | 			payload["title"] = title
118 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
119 | 			payload["state"] = state
120 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:141:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
139 | 		let encodedImage = image?.base64String
140 |
141 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
142 | 			var payload: [String: Any] = [:]
143 |
144 | 			payload["image"] = encodedImage
145 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
146 | 			payload["state"] = state
147 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:190:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
188 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the title is set to all states.
189 | 	func setImage(in context: String, toSVG svg: String?, target: Target? = nil, state: Int? = nil) {
190 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
191 | 			var payload: [String: Any] = [:]
192 |
    :
195 | 			}
196 |
197 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
198 | 			payload["state"] = state
199 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:261:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
259 | 	///   - payload: A json object that will be received by the Property Inspector.
260 | 	func sendToPropertyInspector(in context: String, action: String, payload: [String: Any]) {
261 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
262 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
263 | 													   action: action,
264 | 													   context: context,
265 | 													   payload: payload)
    |                          `- note: closure captures 'payload' which is accessible to code in the current task
266 | 		}
267 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:262:37: warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
260 | 	func sendToPropertyInspector(in context: String, action: String, payload: [String: Any]) {
261 | 		Task {
262 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
    |                                     |- warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'payload.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
263 | 													   action: action,
264 | 													   context: context,
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:25:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 23 | 	@available(*, deprecated, message: "Use the Settings API.")
 24 | 	func setSettings(to settings: [String: Any]) {
 25 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 26 | 			await PluginCommunication.shared.sendEvent(.setSettings,
 27 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
 28 | 													   payload: settings)
    |                          `- note: closure captures non-Sendable 'settings'
 29 | 		}
 30 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:26:37: warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
 24 | 	func setSettings(to settings: [String: Any]) {
 25 | 		Task {
 26 | 			await PluginCommunication.shared.sendEvent(.setSettings,
    |                                     |- warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'settings.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
 27 | 													   context: context,
 28 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:37:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 35 | 	///   - settings: A json object which is persistently saved for the action's instance.
 36 | 	func setSettings(to settings: Settings) {
 37 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 38 | 			await PluginCommunication.shared.sendEvent(.setSettings,
 39 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
 40 | 													   payload: settings)
    |                          `- note: closure captures non-Sendable 'settings'
 41 | 		}
 42 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:38:37: warning: sending value of non-Sendable type 'Self.Settings' risks causing data races; this is an error in the Swift 6 language mode
 36 | 	func setSettings(to settings: Settings) {
 37 | 		Task {
 38 | 			await PluginCommunication.shared.sendEvent(.setSettings,
    |                                     |- warning: sending value of non-Sendable type 'Self.Settings' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated value of non-Sendable type 'Self.Settings' to actor-isolated callee risks causing races in between task-isolated and actor-isolated uses
 39 | 													   context: context,
 40 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:47:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 45 | 	///   - context: An opaque value identifying the instance's action or Property Inspector.
 46 | 	func getSettings() {
 47 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 48 | 			await PluginCommunication.shared.sendEvent(.getSettings,
 49 | 													   context: context,
    |                          `- note: closure captures 'self' which is accessible to code in the current task
 50 | 													   payload: nil)
 51 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:92:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 90 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the title is set to all states.
 91 | 	func setTitle(to title: String?, target: Target? = nil, state: Int? = nil) {
 92 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 93 | 			var payload: [String: Any] = [:]
 94 |
 95 | 			payload["title"] = title
 96 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures non-Sendable 'target'
 97 | 			payload["state"] = state
 98 |
 99 | 			await PluginCommunication.shared.sendEvent(.setTitle,
100 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
101 | 													   payload: payload)
102 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:115:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
113 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the image is set to all states.
114 | 	func setImage(to image: NSImage?, target: Target? = nil, state: Int? = nil) {
115 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
116 | 			var payload: [String: Any] = [:]
117 |
118 | 			payload["image"] = image?.base64String
    |                       `- note: closure captures non-Sendable 'image'
119 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures non-Sendable 'target'
120 | 			payload["state"] = state
121 |
122 |
123 | 			await PluginCommunication.shared.sendEvent(.setImage,
124 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
125 | 													   payload: payload)
126 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:165:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
163 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the image is set to all states.
164 | 	func setImage(toSVG svg: String?, target: Target? = nil, state: Int? = nil) {
165 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
166 | 			var payload: [String: Any] = [:]
167 |
    :
170 | 			}
171 |
172 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures non-Sendable 'target'
173 | 			payload["state"] = state
174 |
175 |
176 | 			await PluginCommunication.shared.sendEvent(.setImage,
177 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
178 | 													   payload: payload)
179 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:185:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
183 | 	/// - Parameter context: An opaque value identifying the instance's action or Property Inspector.
184 | 	func showAlert() {
185 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
186 | 			await PluginCommunication.shared.sendEvent(.showAlert, context: context, payload: nil)
    |                                                                    `- note: closure captures 'self' which is accessible to code in the current task
187 | 		}
188 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:193:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
191 | 	/// - Parameter context: An opaque value identifying the instance's action or Property Inspector.
192 | 	func showOk() {
193 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
194 | 			await PluginCommunication.shared.sendEvent(.showOK, context: context, payload: nil)
    |                                                                 `- note: closure captures 'self' which is accessible to code in the current task
195 | 		}
196 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:205:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
203 | 		let payload: [String: Any] = ["state": state]
204 |
205 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
206 | 			await PluginCommunication.shared.sendEvent(.setState,
207 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
208 | 													   payload: payload)
    |                          `- note: closure captures non-Sendable 'payload'
209 | 		}
210 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:206:37: warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
204 |
205 | 		Task {
206 | 			await PluginCommunication.shared.sendEvent(.setState,
    |                                     |- warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'payload.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
207 | 													   context: context,
208 | 													   payload: payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:216:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
214 | 	///   - payload: A json object that will be received by the Property Inspector.
215 | 	func sendToPropertyInspector(payload: [String: Any]) {
216 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
217 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
218 | 													   action: uuid,
    |                         `- note: closure captures non-Sendable 'self'
219 | 													   context: context,
220 | 													   payload: payload)
    |                          `- note: closure captures non-Sendable 'payload'
221 | 		}
222 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:217:37: warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
215 | 	func sendToPropertyInspector(payload: [String: Any]) {
216 | 		Task {
217 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
    |                                     |- warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'payload.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
218 | 													   action: uuid,
219 | 													   context: context,
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:231:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
229 | 	///   - payload: The datasource information used to update items in the Property Inspector.
230 | 	func sendToPropertyInspector(_ payload: DataSourcePayload) {
231 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
232 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
233 | 													   action: uuid,
    |                         `- note: closure captures non-Sendable 'self'
234 | 													   context: context,
235 | 													   payload: payload)
    |                          `- note: closure captures non-Sendable 'payload'
236 | 		}
237 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:232:37: warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
230 | 	func sendToPropertyInspector(_ payload: DataSourcePayload) {
231 | 		Task {
232 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
    |                                     |- warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'payload.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
233 | 													   action: uuid,
234 | 													   context: context,
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:242:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
240 | 	/// The plugin can send a `setFeedback` event to the Stream Deck application to dynamically change properties of items on the Stream Deck + touch display layout.
241 | 	func setFeedback(_ payload: [String: Any]) {
242 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
243 | 			await PluginCommunication.shared.sendEvent(.setFeedback,
244 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
245 | 													   payload: payload)
    |                          `- note: closure captures non-Sendable 'payload'
246 | 		}
247 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:243:37: warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
241 | 	func setFeedback(_ payload: [String: Any]) {
242 | 		Task {
243 | 			await PluginCommunication.shared.sendEvent(.setFeedback,
    |                                     |- warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'payload.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
244 | 													   context: context,
245 | 													   payload: payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:251:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
249 | 	/// The plugin can send a `setFeedback` event to the Stream Deck application to dynamically change properties of items on the Stream Deck + touch display layout.
250 | 	func setFeedback(_ payload: LayoutSettings) {
251 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
252 | 			await PluginCommunication.shared.sendEvent(.setFeedback,
253 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
254 | 													   payload: payload)
    |                          `- note: closure captures non-Sendable 'payload'
255 | 		}
256 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:252:37: warning: sending value of non-Sendable type 'any LayoutSettings' risks causing data races; this is an error in the Swift 6 language mode
250 | 	func setFeedback(_ payload: LayoutSettings) {
251 | 		Task {
252 | 			await PluginCommunication.shared.sendEvent(.setFeedback,
    |                                     |- warning: sending value of non-Sendable type 'any LayoutSettings' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated value of non-Sendable type 'any LayoutSettings' to actor-isolated callee risks causing races in between task-isolated and actor-isolated uses
253 | 													   context: context,
254 | 													   payload: payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:265:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
263 | 		let payload: [String: Any] = ["layout": layout.path]
264 |
265 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
266 | 			await PluginCommunication.shared.sendEvent(.setFeedbackLayout,
267 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
268 | 													   payload: payload)
    |                          `- note: closure captures non-Sendable 'payload'
269 | 		}
270 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:266:37: warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
264 |
265 | 		Task {
266 | 			await PluginCommunication.shared.sendEvent(.setFeedbackLayout,
    |                                     |- warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'payload.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
267 | 													   context: context,
268 | 													   payload: payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:280:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
278 | 	/// - Parameter triggerDescription: The new `TriggerDescription` or `nil` to reset.
279 | 	func setTriggerDescription(_ triggerDescription: TriggerDescription?) {
280 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
281 | 			await PluginCommunication.shared.sendEvent(.setTriggerDescription,
282 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
283 | 													   payload: triggerDescription)
    |                          `- note: closure captures non-Sendable 'triggerDescription'
284 | 		}
285 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:281:37: warning: sending 'triggerDescription' risks causing data races; this is an error in the Swift 6 language mode
279 | 	func setTriggerDescription(_ triggerDescription: TriggerDescription?) {
280 | 		Task {
281 | 			await PluginCommunication.shared.sendEvent(.setTriggerDescription,
    |                                     |- warning: sending 'triggerDescription' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'triggerDescription' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
282 | 													   context: context,
283 | 													   payload: triggerDescription)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:17:13: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'TimerKeeper' may have shared mutable state; this is an error in the Swift 6 language mode
12 |
13 | /// A class that stores long press timers for actions.
14 | class TimerKeeper {
   |       `- note: class 'TimerKeeper' does not conform to the 'Sendable' protocol
15 |
16 | 	/// The shared `TimerKeeper` instance.
17 | 	static let shared = TimerKeeper()
   |             |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'TimerKeeper' may have shared mutable state; this is an error in the Swift 6 language mode
   |             |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
   |             `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
18 |
19 | 	/// Times that have been set for a specific action instance.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:52:50: warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
44 | 	///   - action: The `Action`.
45 | 	///   - event: The `KeyEvent` which is passed to handler.
46 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<KeyEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
47 |
48 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
50 | 		// Begin the long-press timer
51 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
   |                                                  `- warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
53 | 			self.lastState[action.context] = true
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:53:4: warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
12 |
13 | /// A class that stores long press timers for actions.
14 | class TimerKeeper {
   |       `- note: class 'TimerKeeper' does not conform to the 'Sendable' protocol
15 |
16 | 	/// The shared `TimerKeeper` instance.
   :
51 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
53 | 			self.lastState[action.context] = true
   |    `- warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
55 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:54:32: warning: capture of 'event' with non-sendable type 'ActionEvent<KeyEvent<A.Settings>>' in a '@Sendable' closure
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
53 | 			self.lastState[action.context] = true
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
   |                                `- warning: capture of 'event' with non-sendable type 'ActionEvent<KeyEvent<A.Settings>>' in a '@Sendable' closure
55 | 		}
56 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Events/Events.swift:86:15: note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 84 |
 85 | /// Events sent by the server in response to actions.
 86 | public struct ActionEvent<Payload: Decodable>: Decodable {
    |               `- note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 87 |
 88 | 	/// The action's unique identifier. If your plugin supports multiple actions, you should use this value to see which action was triggered.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:52:50: warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
44 | 	///   - action: The `Action`.
45 | 	///   - event: The `KeyEvent` which is passed to handler.
46 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<KeyEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
47 |
48 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
50 | 		// Begin the long-press timer
51 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
   |                                                  `- warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
53 | 			self.lastState[action.context] = true
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:70:51: warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
62 | 	///   - action: The `Action`.
63 | 	///   - event: The `KeyEvent` which is passed to handler.
64 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<EncoderPressEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
65 |
66 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
68 | 		// Begin the long-press timer
69 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
   |                                                   `- warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
71 | 			self.lastState[action.context] = true
72 | 			action.longDialPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:71:4: warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
12 |
13 | /// A class that stores long press timers for actions.
14 | class TimerKeeper {
   |       `- note: class 'TimerKeeper' does not conform to the 'Sendable' protocol
15 |
16 | 	/// The shared `TimerKeeper` instance.
   :
69 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
71 | 			self.lastState[action.context] = true
   |    `- warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
72 | 			action.longDialPress(device: event.device, payload: event.payload)
73 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:72:33: warning: capture of 'event' with non-sendable type 'ActionEvent<EncoderPressEvent<A.Settings>>' in a '@Sendable' closure
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
71 | 			self.lastState[action.context] = true
72 | 			action.longDialPress(device: event.device, payload: event.payload)
   |                                 `- warning: capture of 'event' with non-sendable type 'ActionEvent<EncoderPressEvent<A.Settings>>' in a '@Sendable' closure
73 | 		}
74 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Events/Events.swift:86:15: note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 84 |
 85 | /// Events sent by the server in response to actions.
 86 | public struct ActionEvent<Payload: Decodable>: Decodable {
    |               `- note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 87 |
 88 | 	/// The action's unique identifier. If your plugin supports multiple actions, you should use this value to see which action was triggered.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:70:51: warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
62 | 	///   - action: The `Action`.
63 | 	///   - event: The `KeyEvent` which is passed to handler.
64 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<EncoderPressEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
65 |
66 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
68 | 		// Begin the long-press timer
69 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
   |                                                   `- warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
71 | 			self.lastState[action.context] = true
72 | 			action.longDialPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckError.swift:14:7: warning: associated value 'invalidJSON' of 'Sendable'-conforming enum 'StreamDeckError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
12 |
13 | 	/// The JSON for an event is invalid.
14 | 	case invalidJSON(String, [String: Any])
   |       `- warning: associated value 'invalidJSON' of 'Sendable'-conforming enum 'StreamDeckError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
15 |
16 | 	/// The UUID has been used more than once.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:25:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 23 | 	@available(*, deprecated, message: "Use the Settings API.")
 24 | 	func setSettings(in context: String, to settings: [String: Any]) {
 25 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 26 | 			await PluginCommunication.shared.sendEvent(.setSettings,
 27 | 													   context: context,
 28 | 													   payload: settings)
    |                          `- note: closure captures 'settings' which is accessible to code in the current task
 29 | 		}
 30 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:26:37: warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
 24 | 	func setSettings(in context: String, to settings: [String: Any]) {
 25 | 		Task {
 26 | 			await PluginCommunication.shared.sendEvent(.setSettings,
    |                                     |- warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'settings.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
 27 | 													   context: context,
 28 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:37:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 35 | 	///   - settings: A json object which is persistently saved for the action's instance.
 36 | 	func setSettings<P: Encodable>(in context: String, to settings: P) {
 37 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 38 | 			await PluginCommunication.shared.sendEvent(.setSettings,
 39 | 													   context: context,
 40 | 													   payload: settings)
    |                          `- note: closure captures 'settings' which is accessible to code in the current task
 41 | 		}
 42 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:38:37: warning: sending value of non-Sendable type 'P' risks causing data races; this is an error in the Swift 6 language mode
 36 | 	func setSettings<P: Encodable>(in context: String, to settings: P) {
 37 | 		Task {
 38 | 			await PluginCommunication.shared.sendEvent(.setSettings,
    |                                     |- warning: sending value of non-Sendable type 'P' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated value of non-Sendable type 'P' to actor-isolated callee risks causing races in between task-isolated and actor-isolated uses
 39 | 													   context: context,
 40 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:59:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 57 | 	///   - settings: A json object which is persistently saved globally.
 58 | 	func setGlobalSettings(_ settings: [String: Any]) {
 59 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 60 | 			await PluginCommunication.shared.sendEvent(.setGlobalSettings,
 61 | 													   context: PluginCommunication.shared.uuid,
 62 | 													   payload: settings)
    |                          `- note: closure captures 'settings' which is accessible to code in the current task
 63 | 		}
 64 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:60:37: warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
 58 | 	func setGlobalSettings(_ settings: [String: Any]) {
 59 | 		Task {
 60 | 			await PluginCommunication.shared.sendEvent(.setGlobalSettings,
    |                                     |- warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'settings.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
 61 | 													   context: PluginCommunication.shared.uuid,
 62 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:114:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
112 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the title is set to all states.
113 | 	func setTitle(in context: String, to title: String?, target: Target? = nil, state: Int? = nil) {
114 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
115 | 			var payload: [String: Any] = [:]
116 |
117 | 			payload["title"] = title
118 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
119 | 			payload["state"] = state
120 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:141:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
139 | 		let encodedImage = image?.base64String
140 |
141 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
142 | 			var payload: [String: Any] = [:]
143 |
144 | 			payload["image"] = encodedImage
145 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
146 | 			payload["state"] = state
147 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:190:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
188 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the title is set to all states.
189 | 	func setImage(in context: String, toSVG svg: String?, target: Target? = nil, state: Int? = nil) {
190 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
191 | 			var payload: [String: Any] = [:]
192 |
    :
195 | 			}
196 |
197 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
198 | 			payload["state"] = state
199 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:261:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
259 | 	///   - payload: A json object that will be received by the Property Inspector.
260 | 	func sendToPropertyInspector(in context: String, action: String, payload: [String: Any]) {
261 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
262 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
263 | 													   action: action,
264 | 													   context: context,
265 | 													   payload: payload)
    |                          `- note: closure captures 'payload' which is accessible to code in the current task
266 | 		}
267 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:262:37: warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
260 | 	func sendToPropertyInspector(in context: String, action: String, payload: [String: Any]) {
261 | 		Task {
262 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
    |                                     |- warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'payload.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
263 | 													   action: action,
264 | 													   context: context,
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:25:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 23 | 	@available(*, deprecated, message: "Use the Settings API.")
 24 | 	func setSettings(to settings: [String: Any]) {
 25 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 26 | 			await PluginCommunication.shared.sendEvent(.setSettings,
 27 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
 28 | 													   payload: settings)
    |                          `- note: closure captures non-Sendable 'settings'
 29 | 		}
 30 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:26:37: warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
 24 | 	func setSettings(to settings: [String: Any]) {
 25 | 		Task {
 26 | 			await PluginCommunication.shared.sendEvent(.setSettings,
    |                                     |- warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'settings.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
 27 | 													   context: context,
 28 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:37:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 35 | 	///   - settings: A json object which is persistently saved for the action's instance.
 36 | 	func setSettings(to settings: Settings) {
 37 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 38 | 			await PluginCommunication.shared.sendEvent(.setSettings,
 39 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
 40 | 													   payload: settings)
    |                          `- note: closure captures non-Sendable 'settings'
 41 | 		}
 42 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:38:37: warning: sending value of non-Sendable type 'Self.Settings' risks causing data races; this is an error in the Swift 6 language mode
 36 | 	func setSettings(to settings: Settings) {
 37 | 		Task {
 38 | 			await PluginCommunication.shared.sendEvent(.setSettings,
    |                                     |- warning: sending value of non-Sendable type 'Self.Settings' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated value of non-Sendable type 'Self.Settings' to actor-isolated callee risks causing races in between task-isolated and actor-isolated uses
 39 | 													   context: context,
 40 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:47:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 45 | 	///   - context: An opaque value identifying the instance's action or Property Inspector.
 46 | 	func getSettings() {
 47 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 48 | 			await PluginCommunication.shared.sendEvent(.getSettings,
 49 | 													   context: context,
    |                          `- note: closure captures 'self' which is accessible to code in the current task
 50 | 													   payload: nil)
 51 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:92:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 90 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the title is set to all states.
 91 | 	func setTitle(to title: String?, target: Target? = nil, state: Int? = nil) {
 92 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 93 | 			var payload: [String: Any] = [:]
 94 |
 95 | 			payload["title"] = title
 96 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures non-Sendable 'target'
 97 | 			payload["state"] = state
 98 |
 99 | 			await PluginCommunication.shared.sendEvent(.setTitle,
100 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
101 | 													   payload: payload)
102 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:115:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
113 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the image is set to all states.
114 | 	func setImage(to image: NSImage?, target: Target? = nil, state: Int? = nil) {
115 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
116 | 			var payload: [String: Any] = [:]
117 |
118 | 			payload["image"] = image?.base64String
    |                       `- note: closure captures non-Sendable 'image'
119 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures non-Sendable 'target'
120 | 			payload["state"] = state
121 |
122 |
123 | 			await PluginCommunication.shared.sendEvent(.setImage,
124 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
125 | 													   payload: payload)
126 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:165:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
163 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the image is set to all states.
164 | 	func setImage(toSVG svg: String?, target: Target? = nil, state: Int? = nil) {
165 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
166 | 			var payload: [String: Any] = [:]
167 |
    :
170 | 			}
171 |
172 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures non-Sendable 'target'
173 | 			payload["state"] = state
174 |
175 |
176 | 			await PluginCommunication.shared.sendEvent(.setImage,
177 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
178 | 													   payload: payload)
179 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:185:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
183 | 	/// - Parameter context: An opaque value identifying the instance's action or Property Inspector.
184 | 	func showAlert() {
185 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
186 | 			await PluginCommunication.shared.sendEvent(.showAlert, context: context, payload: nil)
    |                                                                    `- note: closure captures 'self' which is accessible to code in the current task
187 | 		}
188 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:193:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
191 | 	/// - Parameter context: An opaque value identifying the instance's action or Property Inspector.
192 | 	func showOk() {
193 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
194 | 			await PluginCommunication.shared.sendEvent(.showOK, context: context, payload: nil)
    |                                                                 `- note: closure captures 'self' which is accessible to code in the current task
195 | 		}
196 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:205:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
203 | 		let payload: [String: Any] = ["state": state]
204 |
205 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
206 | 			await PluginCommunication.shared.sendEvent(.setState,
207 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
208 | 													   payload: payload)
    |                          `- note: closure captures non-Sendable 'payload'
209 | 		}
210 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:206:37: warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
204 |
205 | 		Task {
206 | 			await PluginCommunication.shared.sendEvent(.setState,
    |                                     |- warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'payload.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
207 | 													   context: context,
208 | 													   payload: payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:216:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
214 | 	///   - payload: A json object that will be received by the Property Inspector.
215 | 	func sendToPropertyInspector(payload: [String: Any]) {
216 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
217 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
218 | 													   action: uuid,
    |                         `- note: closure captures non-Sendable 'self'
219 | 													   context: context,
220 | 													   payload: payload)
    |                          `- note: closure captures non-Sendable 'payload'
221 | 		}
222 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:217:37: warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
215 | 	func sendToPropertyInspector(payload: [String: Any]) {
216 | 		Task {
217 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
    |                                     |- warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'payload.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
218 | 													   action: uuid,
219 | 													   context: context,
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:231:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
229 | 	///   - payload: The datasource information used to update items in the Property Inspector.
230 | 	func sendToPropertyInspector(_ payload: DataSourcePayload) {
231 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
232 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
233 | 													   action: uuid,
    |                         `- note: closure captures non-Sendable 'self'
234 | 													   context: context,
235 | 													   payload: payload)
    |                          `- note: closure captures non-Sendable 'payload'
236 | 		}
237 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:232:37: warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
230 | 	func sendToPropertyInspector(_ payload: DataSourcePayload) {
231 | 		Task {
232 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
    |                                     |- warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'payload.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
233 | 													   action: uuid,
234 | 													   context: context,
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:242:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
240 | 	/// The plugin can send a `setFeedback` event to the Stream Deck application to dynamically change properties of items on the Stream Deck + touch display layout.
241 | 	func setFeedback(_ payload: [String: Any]) {
242 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
243 | 			await PluginCommunication.shared.sendEvent(.setFeedback,
244 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
245 | 													   payload: payload)
    |                          `- note: closure captures non-Sendable 'payload'
246 | 		}
247 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:243:37: warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
241 | 	func setFeedback(_ payload: [String: Any]) {
242 | 		Task {
243 | 			await PluginCommunication.shared.sendEvent(.setFeedback,
    |                                     |- warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'payload.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
244 | 													   context: context,
245 | 													   payload: payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:251:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
249 | 	/// The plugin can send a `setFeedback` event to the Stream Deck application to dynamically change properties of items on the Stream Deck + touch display layout.
250 | 	func setFeedback(_ payload: LayoutSettings) {
251 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
252 | 			await PluginCommunication.shared.sendEvent(.setFeedback,
253 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
254 | 													   payload: payload)
    |                          `- note: closure captures non-Sendable 'payload'
255 | 		}
256 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:252:37: warning: sending value of non-Sendable type 'any LayoutSettings' risks causing data races; this is an error in the Swift 6 language mode
250 | 	func setFeedback(_ payload: LayoutSettings) {
251 | 		Task {
252 | 			await PluginCommunication.shared.sendEvent(.setFeedback,
    |                                     |- warning: sending value of non-Sendable type 'any LayoutSettings' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated value of non-Sendable type 'any LayoutSettings' to actor-isolated callee risks causing races in between task-isolated and actor-isolated uses
253 | 													   context: context,
254 | 													   payload: payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:265:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
263 | 		let payload: [String: Any] = ["layout": layout.path]
264 |
265 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
266 | 			await PluginCommunication.shared.sendEvent(.setFeedbackLayout,
267 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
268 | 													   payload: payload)
    |                          `- note: closure captures non-Sendable 'payload'
269 | 		}
270 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:266:37: warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
264 |
265 | 		Task {
266 | 			await PluginCommunication.shared.sendEvent(.setFeedbackLayout,
    |                                     |- warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'payload.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
267 | 													   context: context,
268 | 													   payload: payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:280:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
278 | 	/// - Parameter triggerDescription: The new `TriggerDescription` or `nil` to reset.
279 | 	func setTriggerDescription(_ triggerDescription: TriggerDescription?) {
280 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
281 | 			await PluginCommunication.shared.sendEvent(.setTriggerDescription,
282 | 													   context: context,
    |                          `- note: closure captures non-Sendable 'self'
283 | 													   payload: triggerDescription)
    |                          `- note: closure captures non-Sendable 'triggerDescription'
284 | 		}
285 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/Action+Sent.swift:281:37: warning: sending 'triggerDescription' risks causing data races; this is an error in the Swift 6 language mode
279 | 	func setTriggerDescription(_ triggerDescription: TriggerDescription?) {
280 | 		Task {
281 | 			await PluginCommunication.shared.sendEvent(.setTriggerDescription,
    |                                     |- warning: sending 'triggerDescription' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'triggerDescription' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
282 | 													   context: context,
283 | 													   payload: triggerDescription)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Support Models/PluginManifest/PluginOS.swift:68:20: warning: static property 'v11' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
54 | }
55 |
56 | public struct PlatformMinimumVersion: ExpressibleByStringLiteral, Codable {
   |               `- note: consider making struct 'PlatformMinimumVersion' conform to the 'Sendable' protocol
57 | 	let version: String
58 |
   :
66 | 	}
67 |
68 | 	public static let v11: PlatformMinimumVersion = "10.11"
   |                    |- warning: static property 'v11' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
   |                    |- note: add '@MainActor' to make static property 'v11' part of global actor 'MainActor'
   |                    `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
69 | 	public static let v12: PlatformMinimumVersion = "10.12"
70 | 	public static let v13: PlatformMinimumVersion = "10.13"
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Support Models/PluginManifest/PluginOS.swift:69:20: warning: static property 'v12' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
54 | }
55 |
56 | public struct PlatformMinimumVersion: ExpressibleByStringLiteral, Codable {
   |               `- note: consider making struct 'PlatformMinimumVersion' conform to the 'Sendable' protocol
57 | 	let version: String
58 |
   :
67 |
68 | 	public static let v11: PlatformMinimumVersion = "10.11"
69 | 	public static let v12: PlatformMinimumVersion = "10.12"
   |                    |- warning: static property 'v12' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
   |                    |- note: add '@MainActor' to make static property 'v12' part of global actor 'MainActor'
   |                    `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
70 | 	public static let v13: PlatformMinimumVersion = "10.13"
71 | 	public static let v14: PlatformMinimumVersion = "10.14"
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Support Models/PluginManifest/PluginOS.swift:70:20: warning: static property 'v13' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
54 | }
55 |
56 | public struct PlatformMinimumVersion: ExpressibleByStringLiteral, Codable {
   |               `- note: consider making struct 'PlatformMinimumVersion' conform to the 'Sendable' protocol
57 | 	let version: String
58 |
   :
68 | 	public static let v11: PlatformMinimumVersion = "10.11"
69 | 	public static let v12: PlatformMinimumVersion = "10.12"
70 | 	public static let v13: PlatformMinimumVersion = "10.13"
   |                    |- warning: static property 'v13' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
   |                    |- note: add '@MainActor' to make static property 'v13' part of global actor 'MainActor'
   |                    `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
71 | 	public static let v14: PlatformMinimumVersion = "10.14"
72 | }
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Support Models/PluginManifest/PluginOS.swift:71:20: warning: static property 'v14' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
54 | }
55 |
56 | public struct PlatformMinimumVersion: ExpressibleByStringLiteral, Codable {
   |               `- note: consider making struct 'PlatformMinimumVersion' conform to the 'Sendable' protocol
57 | 	let version: String
58 |
   :
69 | 	public static let v12: PlatformMinimumVersion = "10.12"
70 | 	public static let v13: PlatformMinimumVersion = "10.13"
71 | 	public static let v14: PlatformMinimumVersion = "10.14"
   |                    |- warning: static property 'v14' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
   |                    |- note: add '@MainActor' to make static property 'v14' part of global actor 'MainActor'
   |                    `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
72 | }
73 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Support Models/PluginManifest/PluginOS.swift:68:20: warning: static property 'v11' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
54 | }
55 |
56 | public struct PlatformMinimumVersion: ExpressibleByStringLiteral, Codable {
   |               `- note: consider making struct 'PlatformMinimumVersion' conform to the 'Sendable' protocol
57 | 	let version: String
58 |
   :
66 | 	}
67 |
68 | 	public static let v11: PlatformMinimumVersion = "10.11"
   |                    |- warning: static property 'v11' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
   |                    |- note: add '@MainActor' to make static property 'v11' part of global actor 'MainActor'
   |                    `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
69 | 	public static let v12: PlatformMinimumVersion = "10.12"
70 | 	public static let v13: PlatformMinimumVersion = "10.13"
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Support Models/PluginManifest/PluginOS.swift:69:20: warning: static property 'v12' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
54 | }
55 |
56 | public struct PlatformMinimumVersion: ExpressibleByStringLiteral, Codable {
   |               `- note: consider making struct 'PlatformMinimumVersion' conform to the 'Sendable' protocol
57 | 	let version: String
58 |
   :
67 |
68 | 	public static let v11: PlatformMinimumVersion = "10.11"
69 | 	public static let v12: PlatformMinimumVersion = "10.12"
   |                    |- warning: static property 'v12' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
   |                    |- note: add '@MainActor' to make static property 'v12' part of global actor 'MainActor'
   |                    `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
70 | 	public static let v13: PlatformMinimumVersion = "10.13"
71 | 	public static let v14: PlatformMinimumVersion = "10.14"
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Support Models/PluginManifest/PluginOS.swift:70:20: warning: static property 'v13' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
54 | }
55 |
56 | public struct PlatformMinimumVersion: ExpressibleByStringLiteral, Codable {
   |               `- note: consider making struct 'PlatformMinimumVersion' conform to the 'Sendable' protocol
57 | 	let version: String
58 |
   :
68 | 	public static let v11: PlatformMinimumVersion = "10.11"
69 | 	public static let v12: PlatformMinimumVersion = "10.12"
70 | 	public static let v13: PlatformMinimumVersion = "10.13"
   |                    |- warning: static property 'v13' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
   |                    |- note: add '@MainActor' to make static property 'v13' part of global actor 'MainActor'
   |                    `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
71 | 	public static let v14: PlatformMinimumVersion = "10.14"
72 | }
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Support Models/PluginManifest/PluginOS.swift:71:20: warning: static property 'v14' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
54 | }
55 |
56 | public struct PlatformMinimumVersion: ExpressibleByStringLiteral, Codable {
   |               `- note: consider making struct 'PlatformMinimumVersion' conform to the 'Sendable' protocol
57 | 	let version: String
58 |
   :
69 | 	public static let v12: PlatformMinimumVersion = "10.12"
70 | 	public static let v13: PlatformMinimumVersion = "10.13"
71 | 	public static let v14: PlatformMinimumVersion = "10.14"
   |                    |- warning: static property 'v14' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
   |                    |- note: add '@MainActor' to make static property 'v14' part of global actor 'MainActor'
   |                    `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
72 | }
73 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Support Models/PluginManifest/PluginOS.swift:68:20: warning: static property 'v11' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
54 | }
55 |
56 | public struct PlatformMinimumVersion: ExpressibleByStringLiteral, Codable {
   |               `- note: consider making struct 'PlatformMinimumVersion' conform to the 'Sendable' protocol
57 | 	let version: String
58 |
   :
66 | 	}
67 |
68 | 	public static let v11: PlatformMinimumVersion = "10.11"
   |                    |- warning: static property 'v11' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
   |                    |- note: add '@MainActor' to make static property 'v11' part of global actor 'MainActor'
   |                    `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
69 | 	public static let v12: PlatformMinimumVersion = "10.12"
70 | 	public static let v13: PlatformMinimumVersion = "10.13"
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Support Models/PluginManifest/PluginOS.swift:69:20: warning: static property 'v12' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
54 | }
55 |
56 | public struct PlatformMinimumVersion: ExpressibleByStringLiteral, Codable {
   |               `- note: consider making struct 'PlatformMinimumVersion' conform to the 'Sendable' protocol
57 | 	let version: String
58 |
   :
67 |
68 | 	public static let v11: PlatformMinimumVersion = "10.11"
69 | 	public static let v12: PlatformMinimumVersion = "10.12"
   |                    |- warning: static property 'v12' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
   |                    |- note: add '@MainActor' to make static property 'v12' part of global actor 'MainActor'
   |                    `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
70 | 	public static let v13: PlatformMinimumVersion = "10.13"
71 | 	public static let v14: PlatformMinimumVersion = "10.14"
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Support Models/PluginManifest/PluginOS.swift:70:20: warning: static property 'v13' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
54 | }
55 |
56 | public struct PlatformMinimumVersion: ExpressibleByStringLiteral, Codable {
   |               `- note: consider making struct 'PlatformMinimumVersion' conform to the 'Sendable' protocol
57 | 	let version: String
58 |
   :
68 | 	public static let v11: PlatformMinimumVersion = "10.11"
69 | 	public static let v12: PlatformMinimumVersion = "10.12"
70 | 	public static let v13: PlatformMinimumVersion = "10.13"
   |                    |- warning: static property 'v13' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
   |                    |- note: add '@MainActor' to make static property 'v13' part of global actor 'MainActor'
   |                    `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
71 | 	public static let v14: PlatformMinimumVersion = "10.14"
72 | }
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Support Models/PluginManifest/PluginOS.swift:71:20: warning: static property 'v14' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
54 | }
55 |
56 | public struct PlatformMinimumVersion: ExpressibleByStringLiteral, Codable {
   |               `- note: consider making struct 'PlatformMinimumVersion' conform to the 'Sendable' protocol
57 | 	let version: String
58 |
   :
69 | 	public static let v12: PlatformMinimumVersion = "10.12"
70 | 	public static let v13: PlatformMinimumVersion = "10.13"
71 | 	public static let v14: PlatformMinimumVersion = "10.14"
   |                    |- warning: static property 'v14' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
   |                    |- note: add '@MainActor' to make static property 'v14' part of global actor 'MainActor'
   |                    `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
72 | }
73 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Support Models/PluginManifest/PluginOS.swift:68:20: warning: static property 'v11' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
54 | }
55 |
56 | public struct PlatformMinimumVersion: ExpressibleByStringLiteral, Codable {
   |               `- note: consider making struct 'PlatformMinimumVersion' conform to the 'Sendable' protocol
57 | 	let version: String
58 |
   :
66 | 	}
67 |
68 | 	public static let v11: PlatformMinimumVersion = "10.11"
   |                    |- warning: static property 'v11' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
   |                    |- note: add '@MainActor' to make static property 'v11' part of global actor 'MainActor'
   |                    `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
69 | 	public static let v12: PlatformMinimumVersion = "10.12"
70 | 	public static let v13: PlatformMinimumVersion = "10.13"
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Support Models/PluginManifest/PluginOS.swift:69:20: warning: static property 'v12' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
54 | }
55 |
56 | public struct PlatformMinimumVersion: ExpressibleByStringLiteral, Codable {
   |               `- note: consider making struct 'PlatformMinimumVersion' conform to the 'Sendable' protocol
57 | 	let version: String
58 |
   :
67 |
68 | 	public static let v11: PlatformMinimumVersion = "10.11"
69 | 	public static let v12: PlatformMinimumVersion = "10.12"
   |                    |- warning: static property 'v12' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
   |                    |- note: add '@MainActor' to make static property 'v12' part of global actor 'MainActor'
   |                    `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
70 | 	public static let v13: PlatformMinimumVersion = "10.13"
71 | 	public static let v14: PlatformMinimumVersion = "10.14"
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Support Models/PluginManifest/PluginOS.swift:70:20: warning: static property 'v13' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
54 | }
55 |
56 | public struct PlatformMinimumVersion: ExpressibleByStringLiteral, Codable {
   |               `- note: consider making struct 'PlatformMinimumVersion' conform to the 'Sendable' protocol
57 | 	let version: String
58 |
   :
68 | 	public static let v11: PlatformMinimumVersion = "10.11"
69 | 	public static let v12: PlatformMinimumVersion = "10.12"
70 | 	public static let v13: PlatformMinimumVersion = "10.13"
   |                    |- warning: static property 'v13' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
   |                    |- note: add '@MainActor' to make static property 'v13' part of global actor 'MainActor'
   |                    `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
71 | 	public static let v14: PlatformMinimumVersion = "10.14"
72 | }
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Support Models/PluginManifest/PluginOS.swift:71:20: warning: static property 'v14' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
54 | }
55 |
56 | public struct PlatformMinimumVersion: ExpressibleByStringLiteral, Codable {
   |               `- note: consider making struct 'PlatformMinimumVersion' conform to the 'Sendable' protocol
57 | 	let version: String
58 |
   :
69 | 	public static let v12: PlatformMinimumVersion = "10.12"
70 | 	public static let v13: PlatformMinimumVersion = "10.13"
71 | 	public static let v14: PlatformMinimumVersion = "10.14"
   |                    |- warning: static property 'v14' is not concurrency-safe because non-'Sendable' type 'PlatformMinimumVersion' may have shared mutable state; this is an error in the Swift 6 language mode
   |                    |- note: add '@MainActor' to make static property 'v14' part of global actor 'MainActor'
   |                    `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
72 | }
73 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:17:13: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'TimerKeeper' may have shared mutable state; this is an error in the Swift 6 language mode
12 |
13 | /// A class that stores long press timers for actions.
14 | class TimerKeeper {
   |       `- note: class 'TimerKeeper' does not conform to the 'Sendable' protocol
15 |
16 | 	/// The shared `TimerKeeper` instance.
17 | 	static let shared = TimerKeeper()
   |             |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'TimerKeeper' may have shared mutable state; this is an error in the Swift 6 language mode
   |             |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
   |             `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
18 |
19 | 	/// Times that have been set for a specific action instance.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:52:50: warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
44 | 	///   - action: The `Action`.
45 | 	///   - event: The `KeyEvent` which is passed to handler.
46 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<KeyEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
47 |
48 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
50 | 		// Begin the long-press timer
51 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
   |                                                  `- warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
53 | 			self.lastState[action.context] = true
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:53:4: warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
12 |
13 | /// A class that stores long press timers for actions.
14 | class TimerKeeper {
   |       `- note: class 'TimerKeeper' does not conform to the 'Sendable' protocol
15 |
16 | 	/// The shared `TimerKeeper` instance.
   :
51 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
53 | 			self.lastState[action.context] = true
   |    `- warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
55 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:54:32: warning: capture of 'event' with non-sendable type 'ActionEvent<KeyEvent<A.Settings>>' in a '@Sendable' closure
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
53 | 			self.lastState[action.context] = true
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
   |                                `- warning: capture of 'event' with non-sendable type 'ActionEvent<KeyEvent<A.Settings>>' in a '@Sendable' closure
55 | 		}
56 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Events/Events.swift:86:15: note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 84 |
 85 | /// Events sent by the server in response to actions.
 86 | public struct ActionEvent<Payload: Decodable>: Decodable {
    |               `- note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 87 |
 88 | 	/// The action's unique identifier. If your plugin supports multiple actions, you should use this value to see which action was triggered.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:52:50: warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
44 | 	///   - action: The `Action`.
45 | 	///   - event: The `KeyEvent` which is passed to handler.
46 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<KeyEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
47 |
48 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
50 | 		// Begin the long-press timer
51 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
   |                                                  `- warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
53 | 			self.lastState[action.context] = true
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:70:51: warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
62 | 	///   - action: The `Action`.
63 | 	///   - event: The `KeyEvent` which is passed to handler.
64 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<EncoderPressEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
65 |
66 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
68 | 		// Begin the long-press timer
69 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
   |                                                   `- warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
71 | 			self.lastState[action.context] = true
72 | 			action.longDialPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:71:4: warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
12 |
13 | /// A class that stores long press timers for actions.
14 | class TimerKeeper {
   |       `- note: class 'TimerKeeper' does not conform to the 'Sendable' protocol
15 |
16 | 	/// The shared `TimerKeeper` instance.
   :
69 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
71 | 			self.lastState[action.context] = true
   |    `- warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
72 | 			action.longDialPress(device: event.device, payload: event.payload)
73 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:72:33: warning: capture of 'event' with non-sendable type 'ActionEvent<EncoderPressEvent<A.Settings>>' in a '@Sendable' closure
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
71 | 			self.lastState[action.context] = true
72 | 			action.longDialPress(device: event.device, payload: event.payload)
   |                                 `- warning: capture of 'event' with non-sendable type 'ActionEvent<EncoderPressEvent<A.Settings>>' in a '@Sendable' closure
73 | 		}
74 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Events/Events.swift:86:15: note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 84 |
 85 | /// Events sent by the server in response to actions.
 86 | public struct ActionEvent<Payload: Decodable>: Decodable {
    |               `- note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 87 |
 88 | 	/// The action's unique identifier. If your plugin supports multiple actions, you should use this value to see which action was triggered.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:70:51: warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
62 | 	///   - action: The `Action`.
63 | 	///   - event: The `KeyEvent` which is passed to handler.
64 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<EncoderPressEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
65 |
66 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
68 | 		// Begin the long-press timer
69 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
   |                                                   `- warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
71 | 			self.lastState[action.context] = true
72 | 			action.longDialPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckError.swift:14:7: warning: associated value 'invalidJSON' of 'Sendable'-conforming enum 'StreamDeckError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
12 |
13 | 	/// The JSON for an event is invalid.
14 | 	case invalidJSON(String, [String: Any])
   |       `- warning: associated value 'invalidJSON' of 'Sendable'-conforming enum 'StreamDeckError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
15 |
16 | 	/// The UUID has been used more than once.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:25:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 23 | 	@available(*, deprecated, message: "Use the Settings API.")
 24 | 	func setSettings(in context: String, to settings: [String: Any]) {
 25 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 26 | 			await PluginCommunication.shared.sendEvent(.setSettings,
 27 | 													   context: context,
 28 | 													   payload: settings)
    |                          `- note: closure captures 'settings' which is accessible to code in the current task
 29 | 		}
 30 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:26:37: warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
 24 | 	func setSettings(in context: String, to settings: [String: Any]) {
 25 | 		Task {
 26 | 			await PluginCommunication.shared.sendEvent(.setSettings,
    |                                     |- warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'settings.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
 27 | 													   context: context,
 28 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:37:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 35 | 	///   - settings: A json object which is persistently saved for the action's instance.
 36 | 	func setSettings<P: Encodable>(in context: String, to settings: P) {
 37 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 38 | 			await PluginCommunication.shared.sendEvent(.setSettings,
 39 | 													   context: context,
 40 | 													   payload: settings)
    |                          `- note: closure captures 'settings' which is accessible to code in the current task
 41 | 		}
 42 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:38:37: warning: sending value of non-Sendable type 'P' risks causing data races; this is an error in the Swift 6 language mode
 36 | 	func setSettings<P: Encodable>(in context: String, to settings: P) {
 37 | 		Task {
 38 | 			await PluginCommunication.shared.sendEvent(.setSettings,
    |                                     |- warning: sending value of non-Sendable type 'P' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated value of non-Sendable type 'P' to actor-isolated callee risks causing races in between task-isolated and actor-isolated uses
 39 | 													   context: context,
 40 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:59:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 57 | 	///   - settings: A json object which is persistently saved globally.
 58 | 	func setGlobalSettings(_ settings: [String: Any]) {
 59 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 60 | 			await PluginCommunication.shared.sendEvent(.setGlobalSettings,
 61 | 													   context: PluginCommunication.shared.uuid,
 62 | 													   payload: settings)
    |                          `- note: closure captures 'settings' which is accessible to code in the current task
 63 | 		}
 64 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:60:37: warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
 58 | 	func setGlobalSettings(_ settings: [String: Any]) {
 59 | 		Task {
 60 | 			await PluginCommunication.shared.sendEvent(.setGlobalSettings,
    |                                     |- warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'settings.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
 61 | 													   context: PluginCommunication.shared.uuid,
 62 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:114:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
112 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the title is set to all states.
113 | 	func setTitle(in context: String, to title: String?, target: Target? = nil, state: Int? = nil) {
114 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
115 | 			var payload: [String: Any] = [:]
116 |
117 | 			payload["title"] = title
118 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
119 | 			payload["state"] = state
120 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:141:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
139 | 		let encodedImage = image?.base64String
140 |
141 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
142 | 			var payload: [String: Any] = [:]
143 |
144 | 			payload["image"] = encodedImage
145 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
146 | 			payload["state"] = state
147 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:190:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
188 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the title is set to all states.
189 | 	func setImage(in context: String, toSVG svg: String?, target: Target? = nil, state: Int? = nil) {
190 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
191 | 			var payload: [String: Any] = [:]
192 |
    :
195 | 			}
196 |
197 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
198 | 			payload["state"] = state
199 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:261:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
259 | 	///   - payload: A json object that will be received by the Property Inspector.
260 | 	func sendToPropertyInspector(in context: String, action: String, payload: [String: Any]) {
261 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
262 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
263 | 													   action: action,
264 | 													   context: context,
265 | 													   payload: payload)
    |                          `- note: closure captures 'payload' which is accessible to code in the current task
266 | 		}
267 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:262:37: warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
260 | 	func sendToPropertyInspector(in context: String, action: String, payload: [String: Any]) {
261 | 		Task {
262 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
    |                                     |- warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'payload.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
263 | 													   action: action,
264 | 													   context: context,
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:17:13: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'TimerKeeper' may have shared mutable state; this is an error in the Swift 6 language mode
12 |
13 | /// A class that stores long press timers for actions.
14 | class TimerKeeper {
   |       `- note: class 'TimerKeeper' does not conform to the 'Sendable' protocol
15 |
16 | 	/// The shared `TimerKeeper` instance.
17 | 	static let shared = TimerKeeper()
   |             |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'TimerKeeper' may have shared mutable state; this is an error in the Swift 6 language mode
   |             |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
   |             `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
18 |
19 | 	/// Times that have been set for a specific action instance.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:52:50: warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
44 | 	///   - action: The `Action`.
45 | 	///   - event: The `KeyEvent` which is passed to handler.
46 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<KeyEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
47 |
48 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
50 | 		// Begin the long-press timer
51 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
   |                                                  `- warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
53 | 			self.lastState[action.context] = true
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:53:4: warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
12 |
13 | /// A class that stores long press timers for actions.
14 | class TimerKeeper {
   |       `- note: class 'TimerKeeper' does not conform to the 'Sendable' protocol
15 |
16 | 	/// The shared `TimerKeeper` instance.
   :
51 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
53 | 			self.lastState[action.context] = true
   |    `- warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
55 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:54:32: warning: capture of 'event' with non-sendable type 'ActionEvent<KeyEvent<A.Settings>>' in a '@Sendable' closure
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
53 | 			self.lastState[action.context] = true
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
   |                                `- warning: capture of 'event' with non-sendable type 'ActionEvent<KeyEvent<A.Settings>>' in a '@Sendable' closure
55 | 		}
56 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Events/Events.swift:86:15: note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 84 |
 85 | /// Events sent by the server in response to actions.
 86 | public struct ActionEvent<Payload: Decodable>: Decodable {
    |               `- note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 87 |
 88 | 	/// The action's unique identifier. If your plugin supports multiple actions, you should use this value to see which action was triggered.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:52:50: warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
44 | 	///   - action: The `Action`.
45 | 	///   - event: The `KeyEvent` which is passed to handler.
46 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<KeyEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
47 |
48 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
50 | 		// Begin the long-press timer
51 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
   |                                                  `- warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
53 | 			self.lastState[action.context] = true
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:70:51: warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
62 | 	///   - action: The `Action`.
63 | 	///   - event: The `KeyEvent` which is passed to handler.
64 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<EncoderPressEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
65 |
66 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
68 | 		// Begin the long-press timer
69 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
   |                                                   `- warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
71 | 			self.lastState[action.context] = true
72 | 			action.longDialPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:71:4: warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
12 |
13 | /// A class that stores long press timers for actions.
14 | class TimerKeeper {
   |       `- note: class 'TimerKeeper' does not conform to the 'Sendable' protocol
15 |
16 | 	/// The shared `TimerKeeper` instance.
   :
69 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
71 | 			self.lastState[action.context] = true
   |    `- warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
72 | 			action.longDialPress(device: event.device, payload: event.payload)
73 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:72:33: warning: capture of 'event' with non-sendable type 'ActionEvent<EncoderPressEvent<A.Settings>>' in a '@Sendable' closure
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
71 | 			self.lastState[action.context] = true
72 | 			action.longDialPress(device: event.device, payload: event.payload)
   |                                 `- warning: capture of 'event' with non-sendable type 'ActionEvent<EncoderPressEvent<A.Settings>>' in a '@Sendable' closure
73 | 		}
74 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Events/Events.swift:86:15: note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 84 |
 85 | /// Events sent by the server in response to actions.
 86 | public struct ActionEvent<Payload: Decodable>: Decodable {
    |               `- note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 87 |
 88 | 	/// The action's unique identifier. If your plugin supports multiple actions, you should use this value to see which action was triggered.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:70:51: warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
62 | 	///   - action: The `Action`.
63 | 	///   - event: The `KeyEvent` which is passed to handler.
64 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<EncoderPressEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
65 |
66 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
68 | 		// Begin the long-press timer
69 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
   |                                                   `- warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
71 | 			self.lastState[action.context] = true
72 | 			action.longDialPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckError.swift:14:7: warning: associated value 'invalidJSON' of 'Sendable'-conforming enum 'StreamDeckError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
12 |
13 | 	/// The JSON for an event is invalid.
14 | 	case invalidJSON(String, [String: Any])
   |       `- warning: associated value 'invalidJSON' of 'Sendable'-conforming enum 'StreamDeckError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
15 |
16 | 	/// The UUID has been used more than once.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:25:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 23 | 	@available(*, deprecated, message: "Use the Settings API.")
 24 | 	func setSettings(in context: String, to settings: [String: Any]) {
 25 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 26 | 			await PluginCommunication.shared.sendEvent(.setSettings,
 27 | 													   context: context,
 28 | 													   payload: settings)
    |                          `- note: closure captures 'settings' which is accessible to code in the current task
 29 | 		}
 30 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:26:37: warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
 24 | 	func setSettings(in context: String, to settings: [String: Any]) {
 25 | 		Task {
 26 | 			await PluginCommunication.shared.sendEvent(.setSettings,
    |                                     |- warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'settings.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
 27 | 													   context: context,
 28 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:37:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 35 | 	///   - settings: A json object which is persistently saved for the action's instance.
 36 | 	func setSettings<P: Encodable>(in context: String, to settings: P) {
 37 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 38 | 			await PluginCommunication.shared.sendEvent(.setSettings,
 39 | 													   context: context,
 40 | 													   payload: settings)
    |                          `- note: closure captures 'settings' which is accessible to code in the current task
 41 | 		}
 42 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:38:37: warning: sending value of non-Sendable type 'P' risks causing data races; this is an error in the Swift 6 language mode
 36 | 	func setSettings<P: Encodable>(in context: String, to settings: P) {
 37 | 		Task {
 38 | 			await PluginCommunication.shared.sendEvent(.setSettings,
    |                                     |- warning: sending value of non-Sendable type 'P' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated value of non-Sendable type 'P' to actor-isolated callee risks causing races in between task-isolated and actor-isolated uses
 39 | 													   context: context,
 40 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:59:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 57 | 	///   - settings: A json object which is persistently saved globally.
 58 | 	func setGlobalSettings(_ settings: [String: Any]) {
 59 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 60 | 			await PluginCommunication.shared.sendEvent(.setGlobalSettings,
 61 | 													   context: PluginCommunication.shared.uuid,
 62 | 													   payload: settings)
    |                          `- note: closure captures 'settings' which is accessible to code in the current task
 63 | 		}
 64 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:60:37: warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
 58 | 	func setGlobalSettings(_ settings: [String: Any]) {
 59 | 		Task {
 60 | 			await PluginCommunication.shared.sendEvent(.setGlobalSettings,
    |                                     |- warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'settings.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
 61 | 													   context: PluginCommunication.shared.uuid,
 62 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:114:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
112 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the title is set to all states.
113 | 	func setTitle(in context: String, to title: String?, target: Target? = nil, state: Int? = nil) {
114 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
115 | 			var payload: [String: Any] = [:]
116 |
117 | 			payload["title"] = title
118 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
119 | 			payload["state"] = state
120 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:141:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
139 | 		let encodedImage = image?.base64String
140 |
141 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
142 | 			var payload: [String: Any] = [:]
143 |
144 | 			payload["image"] = encodedImage
145 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
146 | 			payload["state"] = state
147 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:190:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
188 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the title is set to all states.
189 | 	func setImage(in context: String, toSVG svg: String?, target: Target? = nil, state: Int? = nil) {
190 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
191 | 			var payload: [String: Any] = [:]
192 |
    :
195 | 			}
196 |
197 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
198 | 			payload["state"] = state
199 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:261:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
259 | 	///   - payload: A json object that will be received by the Property Inspector.
260 | 	func sendToPropertyInspector(in context: String, action: String, payload: [String: Any]) {
261 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
262 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
263 | 													   action: action,
264 | 													   context: context,
265 | 													   payload: payload)
    |                          `- note: closure captures 'payload' which is accessible to code in the current task
266 | 		}
267 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:262:37: warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
260 | 	func sendToPropertyInspector(in context: String, action: String, payload: [String: Any]) {
261 | 		Task {
262 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
    |                                     |- warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'payload.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
263 | 													   action: action,
264 | 													   context: context,
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:17:13: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'TimerKeeper' may have shared mutable state; this is an error in the Swift 6 language mode
12 |
13 | /// A class that stores long press timers for actions.
14 | class TimerKeeper {
   |       `- note: class 'TimerKeeper' does not conform to the 'Sendable' protocol
15 |
16 | 	/// The shared `TimerKeeper` instance.
17 | 	static let shared = TimerKeeper()
   |             |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'TimerKeeper' may have shared mutable state; this is an error in the Swift 6 language mode
   |             |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
   |             `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
18 |
19 | 	/// Times that have been set for a specific action instance.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:52:50: warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
44 | 	///   - action: The `Action`.
45 | 	///   - event: The `KeyEvent` which is passed to handler.
46 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<KeyEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
47 |
48 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
50 | 		// Begin the long-press timer
51 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
   |                                                  `- warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
53 | 			self.lastState[action.context] = true
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:53:4: warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
12 |
13 | /// A class that stores long press timers for actions.
14 | class TimerKeeper {
   |       `- note: class 'TimerKeeper' does not conform to the 'Sendable' protocol
15 |
16 | 	/// The shared `TimerKeeper` instance.
   :
51 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
53 | 			self.lastState[action.context] = true
   |    `- warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
55 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:54:32: warning: capture of 'event' with non-sendable type 'ActionEvent<KeyEvent<A.Settings>>' in a '@Sendable' closure
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
53 | 			self.lastState[action.context] = true
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
   |                                `- warning: capture of 'event' with non-sendable type 'ActionEvent<KeyEvent<A.Settings>>' in a '@Sendable' closure
55 | 		}
56 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Events/Events.swift:86:15: note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 84 |
 85 | /// Events sent by the server in response to actions.
 86 | public struct ActionEvent<Payload: Decodable>: Decodable {
    |               `- note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 87 |
 88 | 	/// The action's unique identifier. If your plugin supports multiple actions, you should use this value to see which action was triggered.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:52:50: warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
44 | 	///   - action: The `Action`.
45 | 	///   - event: The `KeyEvent` which is passed to handler.
46 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<KeyEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
47 |
48 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
50 | 		// Begin the long-press timer
51 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
   |                                                  `- warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
53 | 			self.lastState[action.context] = true
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:70:51: warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
62 | 	///   - action: The `Action`.
63 | 	///   - event: The `KeyEvent` which is passed to handler.
64 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<EncoderPressEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
65 |
66 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
68 | 		// Begin the long-press timer
69 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
   |                                                   `- warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
71 | 			self.lastState[action.context] = true
72 | 			action.longDialPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:71:4: warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
12 |
13 | /// A class that stores long press timers for actions.
14 | class TimerKeeper {
   |       `- note: class 'TimerKeeper' does not conform to the 'Sendable' protocol
15 |
16 | 	/// The shared `TimerKeeper` instance.
   :
69 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
71 | 			self.lastState[action.context] = true
   |    `- warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
72 | 			action.longDialPress(device: event.device, payload: event.payload)
73 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:72:33: warning: capture of 'event' with non-sendable type 'ActionEvent<EncoderPressEvent<A.Settings>>' in a '@Sendable' closure
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
71 | 			self.lastState[action.context] = true
72 | 			action.longDialPress(device: event.device, payload: event.payload)
   |                                 `- warning: capture of 'event' with non-sendable type 'ActionEvent<EncoderPressEvent<A.Settings>>' in a '@Sendable' closure
73 | 		}
74 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Events/Events.swift:86:15: note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 84 |
 85 | /// Events sent by the server in response to actions.
 86 | public struct ActionEvent<Payload: Decodable>: Decodable {
    |               `- note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 87 |
 88 | 	/// The action's unique identifier. If your plugin supports multiple actions, you should use this value to see which action was triggered.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:70:51: warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
62 | 	///   - action: The `Action`.
63 | 	///   - event: The `KeyEvent` which is passed to handler.
64 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<EncoderPressEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
65 |
66 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
68 | 		// Begin the long-press timer
69 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
   |                                                   `- warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
71 | 			self.lastState[action.context] = true
72 | 			action.longDialPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckError.swift:14:7: warning: associated value 'invalidJSON' of 'Sendable'-conforming enum 'StreamDeckError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
12 |
13 | 	/// The JSON for an event is invalid.
14 | 	case invalidJSON(String, [String: Any])
   |       `- warning: associated value 'invalidJSON' of 'Sendable'-conforming enum 'StreamDeckError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
15 |
16 | 	/// The UUID has been used more than once.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:25:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 23 | 	@available(*, deprecated, message: "Use the Settings API.")
 24 | 	func setSettings(in context: String, to settings: [String: Any]) {
 25 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 26 | 			await PluginCommunication.shared.sendEvent(.setSettings,
 27 | 													   context: context,
 28 | 													   payload: settings)
    |                          `- note: closure captures 'settings' which is accessible to code in the current task
 29 | 		}
 30 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:26:37: warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
 24 | 	func setSettings(in context: String, to settings: [String: Any]) {
 25 | 		Task {
 26 | 			await PluginCommunication.shared.sendEvent(.setSettings,
    |                                     |- warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'settings.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
 27 | 													   context: context,
 28 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:37:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 35 | 	///   - settings: A json object which is persistently saved for the action's instance.
 36 | 	func setSettings<P: Encodable>(in context: String, to settings: P) {
 37 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 38 | 			await PluginCommunication.shared.sendEvent(.setSettings,
 39 | 													   context: context,
 40 | 													   payload: settings)
    |                          `- note: closure captures 'settings' which is accessible to code in the current task
 41 | 		}
 42 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:38:37: warning: sending value of non-Sendable type 'P' risks causing data races; this is an error in the Swift 6 language mode
 36 | 	func setSettings<P: Encodable>(in context: String, to settings: P) {
 37 | 		Task {
 38 | 			await PluginCommunication.shared.sendEvent(.setSettings,
    |                                     |- warning: sending value of non-Sendable type 'P' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated value of non-Sendable type 'P' to actor-isolated callee risks causing races in between task-isolated and actor-isolated uses
 39 | 													   context: context,
 40 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:59:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 57 | 	///   - settings: A json object which is persistently saved globally.
 58 | 	func setGlobalSettings(_ settings: [String: Any]) {
 59 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 60 | 			await PluginCommunication.shared.sendEvent(.setGlobalSettings,
 61 | 													   context: PluginCommunication.shared.uuid,
 62 | 													   payload: settings)
    |                          `- note: closure captures 'settings' which is accessible to code in the current task
 63 | 		}
 64 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:60:37: warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
 58 | 	func setGlobalSettings(_ settings: [String: Any]) {
 59 | 		Task {
 60 | 			await PluginCommunication.shared.sendEvent(.setGlobalSettings,
    |                                     |- warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'settings.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
 61 | 													   context: PluginCommunication.shared.uuid,
 62 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:114:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
112 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the title is set to all states.
113 | 	func setTitle(in context: String, to title: String?, target: Target? = nil, state: Int? = nil) {
114 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
115 | 			var payload: [String: Any] = [:]
116 |
117 | 			payload["title"] = title
118 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
119 | 			payload["state"] = state
120 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:141:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
139 | 		let encodedImage = image?.base64String
140 |
141 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
142 | 			var payload: [String: Any] = [:]
143 |
144 | 			payload["image"] = encodedImage
145 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
146 | 			payload["state"] = state
147 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:190:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
188 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the title is set to all states.
189 | 	func setImage(in context: String, toSVG svg: String?, target: Target? = nil, state: Int? = nil) {
190 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
191 | 			var payload: [String: Any] = [:]
192 |
    :
195 | 			}
196 |
197 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
198 | 			payload["state"] = state
199 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:261:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
259 | 	///   - payload: A json object that will be received by the Property Inspector.
260 | 	func sendToPropertyInspector(in context: String, action: String, payload: [String: Any]) {
261 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
262 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
263 | 													   action: action,
264 | 													   context: context,
265 | 													   payload: payload)
    |                          `- note: closure captures 'payload' which is accessible to code in the current task
266 | 		}
267 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:262:37: warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
260 | 	func sendToPropertyInspector(in context: String, action: String, payload: [String: Any]) {
261 | 		Task {
262 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
    |                                     |- warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'payload.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
263 | 													   action: action,
264 | 													   context: context,
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:17:13: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'TimerKeeper' may have shared mutable state; this is an error in the Swift 6 language mode
12 |
13 | /// A class that stores long press timers for actions.
14 | class TimerKeeper {
   |       `- note: class 'TimerKeeper' does not conform to the 'Sendable' protocol
15 |
16 | 	/// The shared `TimerKeeper` instance.
17 | 	static let shared = TimerKeeper()
   |             |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'TimerKeeper' may have shared mutable state; this is an error in the Swift 6 language mode
   |             |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
   |             `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
18 |
19 | 	/// Times that have been set for a specific action instance.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:52:50: warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
44 | 	///   - action: The `Action`.
45 | 	///   - event: The `KeyEvent` which is passed to handler.
46 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<KeyEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
47 |
48 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
50 | 		// Begin the long-press timer
51 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
   |                                                  `- warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
53 | 			self.lastState[action.context] = true
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:53:4: warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
12 |
13 | /// A class that stores long press timers for actions.
14 | class TimerKeeper {
   |       `- note: class 'TimerKeeper' does not conform to the 'Sendable' protocol
15 |
16 | 	/// The shared `TimerKeeper` instance.
   :
51 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
53 | 			self.lastState[action.context] = true
   |    `- warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
55 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:54:32: warning: capture of 'event' with non-sendable type 'ActionEvent<KeyEvent<A.Settings>>' in a '@Sendable' closure
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
53 | 			self.lastState[action.context] = true
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
   |                                `- warning: capture of 'event' with non-sendable type 'ActionEvent<KeyEvent<A.Settings>>' in a '@Sendable' closure
55 | 		}
56 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Events/Events.swift:86:15: note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 84 |
 85 | /// Events sent by the server in response to actions.
 86 | public struct ActionEvent<Payload: Decodable>: Decodable {
    |               `- note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 87 |
 88 | 	/// The action's unique identifier. If your plugin supports multiple actions, you should use this value to see which action was triggered.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:52:50: warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
44 | 	///   - action: The `Action`.
45 | 	///   - event: The `KeyEvent` which is passed to handler.
46 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<KeyEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
47 |
48 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
50 | 		// Begin the long-press timer
51 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
   |                                                  `- warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
53 | 			self.lastState[action.context] = true
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:70:51: warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
62 | 	///   - action: The `Action`.
63 | 	///   - event: The `KeyEvent` which is passed to handler.
64 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<EncoderPressEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
65 |
66 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
68 | 		// Begin the long-press timer
69 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
   |                                                   `- warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
71 | 			self.lastState[action.context] = true
72 | 			action.longDialPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:71:4: warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
12 |
13 | /// A class that stores long press timers for actions.
14 | class TimerKeeper {
   |       `- note: class 'TimerKeeper' does not conform to the 'Sendable' protocol
15 |
16 | 	/// The shared `TimerKeeper` instance.
   :
69 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
71 | 			self.lastState[action.context] = true
   |    `- warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
72 | 			action.longDialPress(device: event.device, payload: event.payload)
73 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:72:33: warning: capture of 'event' with non-sendable type 'ActionEvent<EncoderPressEvent<A.Settings>>' in a '@Sendable' closure
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
71 | 			self.lastState[action.context] = true
72 | 			action.longDialPress(device: event.device, payload: event.payload)
   |                                 `- warning: capture of 'event' with non-sendable type 'ActionEvent<EncoderPressEvent<A.Settings>>' in a '@Sendable' closure
73 | 		}
74 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Events/Events.swift:86:15: note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 84 |
 85 | /// Events sent by the server in response to actions.
 86 | public struct ActionEvent<Payload: Decodable>: Decodable {
    |               `- note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 87 |
 88 | 	/// The action's unique identifier. If your plugin supports multiple actions, you should use this value to see which action was triggered.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:70:51: warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
62 | 	///   - action: The `Action`.
63 | 	///   - event: The `KeyEvent` which is passed to handler.
64 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<EncoderPressEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
65 |
66 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
68 | 		// Begin the long-press timer
69 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
   |                                                   `- warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
71 | 			self.lastState[action.context] = true
72 | 			action.longDialPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckError.swift:14:7: warning: associated value 'invalidJSON' of 'Sendable'-conforming enum 'StreamDeckError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
12 |
13 | 	/// The JSON for an event is invalid.
14 | 	case invalidJSON(String, [String: Any])
   |       `- warning: associated value 'invalidJSON' of 'Sendable'-conforming enum 'StreamDeckError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
15 |
16 | 	/// The UUID has been used more than once.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:25:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 23 | 	@available(*, deprecated, message: "Use the Settings API.")
 24 | 	func setSettings(in context: String, to settings: [String: Any]) {
 25 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 26 | 			await PluginCommunication.shared.sendEvent(.setSettings,
 27 | 													   context: context,
 28 | 													   payload: settings)
    |                          `- note: closure captures 'settings' which is accessible to code in the current task
 29 | 		}
 30 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:26:37: warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
 24 | 	func setSettings(in context: String, to settings: [String: Any]) {
 25 | 		Task {
 26 | 			await PluginCommunication.shared.sendEvent(.setSettings,
    |                                     |- warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'settings.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
 27 | 													   context: context,
 28 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:37:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 35 | 	///   - settings: A json object which is persistently saved for the action's instance.
 36 | 	func setSettings<P: Encodable>(in context: String, to settings: P) {
 37 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 38 | 			await PluginCommunication.shared.sendEvent(.setSettings,
 39 | 													   context: context,
 40 | 													   payload: settings)
    |                          `- note: closure captures 'settings' which is accessible to code in the current task
 41 | 		}
 42 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:38:37: warning: sending value of non-Sendable type 'P' risks causing data races; this is an error in the Swift 6 language mode
 36 | 	func setSettings<P: Encodable>(in context: String, to settings: P) {
 37 | 		Task {
 38 | 			await PluginCommunication.shared.sendEvent(.setSettings,
    |                                     |- warning: sending value of non-Sendable type 'P' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated value of non-Sendable type 'P' to actor-isolated callee risks causing races in between task-isolated and actor-isolated uses
 39 | 													   context: context,
 40 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:59:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 57 | 	///   - settings: A json object which is persistently saved globally.
 58 | 	func setGlobalSettings(_ settings: [String: Any]) {
 59 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 60 | 			await PluginCommunication.shared.sendEvent(.setGlobalSettings,
 61 | 													   context: PluginCommunication.shared.uuid,
 62 | 													   payload: settings)
    |                          `- note: closure captures 'settings' which is accessible to code in the current task
 63 | 		}
 64 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:60:37: warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
 58 | 	func setGlobalSettings(_ settings: [String: Any]) {
 59 | 		Task {
 60 | 			await PluginCommunication.shared.sendEvent(.setGlobalSettings,
    |                                     |- warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'settings.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
 61 | 													   context: PluginCommunication.shared.uuid,
 62 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:114:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
112 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the title is set to all states.
113 | 	func setTitle(in context: String, to title: String?, target: Target? = nil, state: Int? = nil) {
114 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
115 | 			var payload: [String: Any] = [:]
116 |
117 | 			payload["title"] = title
118 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
119 | 			payload["state"] = state
120 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:141:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
139 | 		let encodedImage = image?.base64String
140 |
141 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
142 | 			var payload: [String: Any] = [:]
143 |
144 | 			payload["image"] = encodedImage
145 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
146 | 			payload["state"] = state
147 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:190:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
188 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the title is set to all states.
189 | 	func setImage(in context: String, toSVG svg: String?, target: Target? = nil, state: Int? = nil) {
190 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
191 | 			var payload: [String: Any] = [:]
192 |
    :
195 | 			}
196 |
197 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
198 | 			payload["state"] = state
199 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:261:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
259 | 	///   - payload: A json object that will be received by the Property Inspector.
260 | 	func sendToPropertyInspector(in context: String, action: String, payload: [String: Any]) {
261 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
262 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
263 | 													   action: action,
264 | 													   context: context,
265 | 													   payload: payload)
    |                          `- note: closure captures 'payload' which is accessible to code in the current task
266 | 		}
267 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:262:37: warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
260 | 	func sendToPropertyInspector(in context: String, action: String, payload: [String: Any]) {
261 | 		Task {
262 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
    |                                     |- warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'payload.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
263 | 													   action: action,
264 | 													   context: context,
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:17:13: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'TimerKeeper' may have shared mutable state; this is an error in the Swift 6 language mode
12 |
13 | /// A class that stores long press timers for actions.
14 | class TimerKeeper {
   |       `- note: class 'TimerKeeper' does not conform to the 'Sendable' protocol
15 |
16 | 	/// The shared `TimerKeeper` instance.
17 | 	static let shared = TimerKeeper()
   |             |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'TimerKeeper' may have shared mutable state; this is an error in the Swift 6 language mode
   |             |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
   |             `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
18 |
19 | 	/// Times that have been set for a specific action instance.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:52:50: warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
44 | 	///   - action: The `Action`.
45 | 	///   - event: The `KeyEvent` which is passed to handler.
46 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<KeyEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
47 |
48 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
50 | 		// Begin the long-press timer
51 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
   |                                                  `- warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
53 | 			self.lastState[action.context] = true
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:53:4: warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
12 |
13 | /// A class that stores long press timers for actions.
14 | class TimerKeeper {
   |       `- note: class 'TimerKeeper' does not conform to the 'Sendable' protocol
15 |
16 | 	/// The shared `TimerKeeper` instance.
   :
51 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
53 | 			self.lastState[action.context] = true
   |    `- warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
55 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:54:32: warning: capture of 'event' with non-sendable type 'ActionEvent<KeyEvent<A.Settings>>' in a '@Sendable' closure
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
53 | 			self.lastState[action.context] = true
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
   |                                `- warning: capture of 'event' with non-sendable type 'ActionEvent<KeyEvent<A.Settings>>' in a '@Sendable' closure
55 | 		}
56 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Events/Events.swift:86:15: note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 84 |
 85 | /// Events sent by the server in response to actions.
 86 | public struct ActionEvent<Payload: Decodable>: Decodable {
    |               `- note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 87 |
 88 | 	/// The action's unique identifier. If your plugin supports multiple actions, you should use this value to see which action was triggered.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:52:50: warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
44 | 	///   - action: The `Action`.
45 | 	///   - event: The `KeyEvent` which is passed to handler.
46 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<KeyEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
47 |
48 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
50 | 		// Begin the long-press timer
51 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
52 | 			log.log("Long key press timer has fired for \(action.context, privacy: .public)")
   |                                                  `- warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
53 | 			self.lastState[action.context] = true
54 | 			action.longKeyPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:70:51: warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
62 | 	///   - action: The `Action`.
63 | 	///   - event: The `KeyEvent` which is passed to handler.
64 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<EncoderPressEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
65 |
66 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
68 | 		// Begin the long-press timer
69 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
   |                                                   `- warning: capture of 'action' with non-sendable type 'A' in a '@Sendable' closure
71 | 			self.lastState[action.context] = true
72 | 			action.longDialPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:71:4: warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
12 |
13 | /// A class that stores long press timers for actions.
14 | class TimerKeeper {
   |       `- note: class 'TimerKeeper' does not conform to the 'Sendable' protocol
15 |
16 | 	/// The shared `TimerKeeper` instance.
   :
69 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
71 | 			self.lastState[action.context] = true
   |    `- warning: capture of 'self' with non-sendable type 'TimerKeeper' in a '@Sendable' closure
72 | 			action.longDialPress(device: event.device, payload: event.payload)
73 | 		}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:72:33: warning: capture of 'event' with non-sendable type 'ActionEvent<EncoderPressEvent<A.Settings>>' in a '@Sendable' closure
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
71 | 			self.lastState[action.context] = true
72 | 			action.longDialPress(device: event.device, payload: event.payload)
   |                                 `- warning: capture of 'event' with non-sendable type 'ActionEvent<EncoderPressEvent<A.Settings>>' in a '@Sendable' closure
73 | 		}
74 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/Events/Events.swift:86:15: note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 84 |
 85 | /// Events sent by the server in response to actions.
 86 | public struct ActionEvent<Payload: Decodable>: Decodable {
    |               `- note: consider making generic struct 'ActionEvent' conform to the 'Sendable' protocol
 87 |
 88 | 	/// The action's unique identifier. If your plugin supports multiple actions, you should use this value to see which action was triggered.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/Action/LongPress.swift:70:51: warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
62 | 	///   - action: The `Action`.
63 | 	///   - event: The `KeyEvent` which is passed to handler.
64 | 	func beginTimer<A: Action>(for action: A, event: ActionEvent<EncoderPressEvent<A.Settings>>) {
   |                  `- note: consider making generic parameter 'A' conform to the 'Sendable' protocol
65 |
66 | 		log.log("Beginning long press timer for \(action.context, privacy: .public)")
   :
68 | 		// Begin the long-press timer
69 | 		let timer = Timer(timeInterval: action.longPressDuration, repeats: false) { _ in
70 | 			log.log("Long dial press timer has fired for \(action.context, privacy: .public)")
   |                                                   `- warning: implicit capture of 'action' requires that 'A' conforms to 'Sendable'; this is an error in the Swift 6 language mode
71 | 			self.lastState[action.context] = true
72 | 			action.longDialPress(device: event.device, payload: event.payload)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckError.swift:14:7: warning: associated value 'invalidJSON' of 'Sendable'-conforming enum 'StreamDeckError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
12 |
13 | 	/// The JSON for an event is invalid.
14 | 	case invalidJSON(String, [String: Any])
   |       `- warning: associated value 'invalidJSON' of 'Sendable'-conforming enum 'StreamDeckError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
15 |
16 | 	/// The UUID has been used more than once.
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:25:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 23 | 	@available(*, deprecated, message: "Use the Settings API.")
 24 | 	func setSettings(in context: String, to settings: [String: Any]) {
 25 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 26 | 			await PluginCommunication.shared.sendEvent(.setSettings,
 27 | 													   context: context,
 28 | 													   payload: settings)
    |                          `- note: closure captures 'settings' which is accessible to code in the current task
 29 | 		}
 30 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:26:37: warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
 24 | 	func setSettings(in context: String, to settings: [String: Any]) {
 25 | 		Task {
 26 | 			await PluginCommunication.shared.sendEvent(.setSettings,
    |                                     |- warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'settings.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
 27 | 													   context: context,
 28 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:37:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 35 | 	///   - settings: A json object which is persistently saved for the action's instance.
 36 | 	func setSettings<P: Encodable>(in context: String, to settings: P) {
 37 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 38 | 			await PluginCommunication.shared.sendEvent(.setSettings,
 39 | 													   context: context,
 40 | 													   payload: settings)
    |                          `- note: closure captures 'settings' which is accessible to code in the current task
 41 | 		}
 42 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:38:37: warning: sending value of non-Sendable type 'P' risks causing data races; this is an error in the Swift 6 language mode
 36 | 	func setSettings<P: Encodable>(in context: String, to settings: P) {
 37 | 		Task {
 38 | 			await PluginCommunication.shared.sendEvent(.setSettings,
    |                                     |- warning: sending value of non-Sendable type 'P' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated value of non-Sendable type 'P' to actor-isolated callee risks causing races in between task-isolated and actor-isolated uses
 39 | 													   context: context,
 40 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:59:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 57 | 	///   - settings: A json object which is persistently saved globally.
 58 | 	func setGlobalSettings(_ settings: [String: Any]) {
 59 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
 60 | 			await PluginCommunication.shared.sendEvent(.setGlobalSettings,
 61 | 													   context: PluginCommunication.shared.uuid,
 62 | 													   payload: settings)
    |                          `- note: closure captures 'settings' which is accessible to code in the current task
 63 | 		}
 64 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:60:37: warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
 58 | 	func setGlobalSettings(_ settings: [String: Any]) {
 59 | 		Task {
 60 | 			await PluginCommunication.shared.sendEvent(.setGlobalSettings,
    |                                     |- warning: sending 'settings.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'settings.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
 61 | 													   context: PluginCommunication.shared.uuid,
 62 | 													   payload: settings)
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:114:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
112 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the title is set to all states.
113 | 	func setTitle(in context: String, to title: String?, target: Target? = nil, state: Int? = nil) {
114 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
115 | 			var payload: [String: Any] = [:]
116 |
117 | 			payload["title"] = title
118 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
119 | 			payload["state"] = state
120 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:141:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
139 | 		let encodedImage = image?.base64String
140 |
141 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
142 | 			var payload: [String: Any] = [:]
143 |
144 | 			payload["image"] = encodedImage
145 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
146 | 			payload["state"] = state
147 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:190:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
188 | 	///   - state: A 0-based integer value representing the state of an action with multiple states. This is an optional parameter. If not specified, the title is set to all states.
189 | 	func setImage(in context: String, toSVG svg: String?, target: Target? = nil, state: Int? = nil) {
190 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
191 | 			var payload: [String: Any] = [:]
192 |
    :
195 | 			}
196 |
197 | 			payload["target"] = target?.rawValue
    |                        `- note: closure captures 'target' which is accessible to code in the current task
198 | 			payload["state"] = state
199 |
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:261:8: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
259 | 	///   - payload: A json object that will be received by the Property Inspector.
260 | 	func sendToPropertyInspector(in context: String, action: String, payload: [String: Any]) {
261 | 		Task {
    |        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
262 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
263 | 													   action: action,
264 | 													   context: context,
265 | 													   payload: payload)
    |                          `- note: closure captures 'payload' which is accessible to code in the current task
266 | 		}
267 | 	}
/Users/admin/builder/spi-builder-workspace/Sources/StreamDeck/StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift:262:37: warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
260 | 	func sendToPropertyInspector(in context: String, action: String, payload: [String: Any]) {
261 | 		Task {
262 | 			await PluginCommunication.shared.sendEvent(.sendToPropertyInspector,
    |                                     |- warning: sending 'payload.some' risks causing data races; this is an error in the Swift 6 language mode
    |                                     `- note: sending task-isolated 'payload.some' to actor-isolated callee risks causing data races between actor-isolated and task-isolated uses
263 | 													   action: action,
264 | 													   context: context,
Build complete! (41.84s)
Build complete.
{
  "dependencies" : [
    {
      "identity" : "swift-argument-parser",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "1.5.0",
            "upper_bound" : "2.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/apple/swift-argument-parser.git"
    },
    {
      "identity" : "swift-syntax",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "509.0.0",
            "upper_bound" : "602.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/swiftlang/swift-syntax.git"
    },
    {
      "identity" : "swift-docc-plugin",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "1.0.0",
            "upper_bound" : "2.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/apple/swift-docc-plugin"
    }
  ],
  "manifest_display_name" : "StreamDeck",
  "name" : "StreamDeck",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "macos",
      "version" : "12.0"
    }
  ],
  "products" : [
    {
      "name" : "StreamDeck",
      "targets" : [
        "StreamDeck"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "StreamDeckMacros",
      "targets" : [
        "StreamDeckMacros"
      ],
      "type" : {
        "macro" : null
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "StreamDeckPluginTests",
      "module_type" : "SwiftTarget",
      "name" : "StreamDeckPluginTests",
      "path" : "Tests/StreamDeckPluginTests",
      "resources" : [
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Tests/StreamDeckPluginTests/Support/Test Events",
          "rule" : {
            "copy" : {
            }
          }
        }
      ],
      "sources" : [
        "PluginEventTests.swift",
        "PluginManifestTests.swift",
        "PluginRegistrationTests.swift",
        "StreamDeckPluginTests.swift",
        "Support/TestEvents.swift",
        "Support/TestPlugin.swift"
      ],
      "target_dependencies" : [
        "StreamDeck"
      ],
      "type" : "test"
    },
    {
      "c99name" : "StreamDeckMacrosTests",
      "module_type" : "SwiftTarget",
      "name" : "StreamDeckMacrosTests",
      "path" : "Tests/StreamDeckMacrosTests",
      "product_dependencies" : [
        "SwiftSyntaxMacrosTestSupport"
      ],
      "sources" : [
        "SettingsMacroTests.swift"
      ],
      "target_dependencies" : [
        "StreamDeckMacros"
      ],
      "type" : "test"
    },
    {
      "c99name" : "StreamDeckMacros",
      "module_type" : "SwiftTarget",
      "name" : "StreamDeckMacros",
      "path" : "Sources/StreamDeckMacros",
      "product_dependencies" : [
        "SwiftSyntaxMacros",
        "SwiftCompilerPlugin"
      ],
      "product_memberships" : [
        "StreamDeck",
        "StreamDeckMacros"
      ],
      "sources" : [
        "EntryMacro.swift",
        "KeyMacros.swift",
        "Plugin.swift",
        "SharedKeyMacro.swift"
      ],
      "type" : "macro"
    },
    {
      "c99name" : "StreamDeck",
      "module_type" : "SwiftTarget",
      "name" : "StreamDeck",
      "path" : "Sources/StreamDeck",
      "product_dependencies" : [
        "ArgumentParser"
      ],
      "product_memberships" : [
        "StreamDeck"
      ],
      "sources" : [
        "Builders/ActionBuilder.swift",
        "Command Line/ExportCommand.swift",
        "Command Line/PluginCommand.swift",
        "Command Line/StreamDeckCommand.swift",
        "Command Line/StreamDeckKey.swift",
        "Events/EventProtocols.swift",
        "Events/Events.swift",
        "Extensions/CharSet+DNS.swift",
        "Extensions/NSImage+Base64.swift",
        "Extensions/URL+Argument.swift",
        "Macros/SettingsMacros.swift",
        "StreamDeck Plugin/Action/Action+Received.swift",
        "StreamDeck Plugin/Action/Action+Sent.swift",
        "StreamDeck Plugin/Action/Action+Support.swift",
        "StreamDeck Plugin/Action/Action.swift",
        "StreamDeck Plugin/Action/LongPress.swift",
        "StreamDeck Plugin/PluginCommunication.swift",
        "StreamDeck Plugin/StreamDeckError.swift",
        "StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Received.swift",
        "StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Sent.swift",
        "StreamDeck Plugin/StreamDeckPlugin/SDPlugin+Support.swift",
        "StreamDeck Plugin/StreamDeckPlugin/StreamDeckPlugin.swift",
        "Support Models/ActionControllerRegistry.swift",
        "Support Models/Environment/EnvironmentKey.swift",
        "Support Models/Environment/EnvironmentValues.swift",
        "Support Models/Environment/EnvironmentWrapper.swift",
        "Support Models/PluginManifest/ApplicationsToMonitor.swift",
        "Support Models/PluginManifest/Coordinates.swift",
        "Support Models/PluginManifest/Fonts.swift",
        "Support Models/PluginManifest/Hardware.swift",
        "Support Models/PluginManifest/PluginAction.swift",
        "Support Models/PluginManifest/PluginActionState.swift",
        "Support Models/PluginManifest/PluginInfo.swift",
        "Support Models/PluginManifest/PluginManifest.swift",
        "Support Models/PluginManifest/PluginOS.swift",
        "Support Models/PluginManifest/PluginProfile.swift",
        "Support Models/PluginManifest/PluginSoftware.swift",
        "Support Models/RotaryEncoder/RotaryEncoder.swift",
        "Support Models/RotaryEncoder/TriggerDescription.swift",
        "Support Models/SPDI.swift",
        "Support Models/Settings/GlobalSettings.swift",
        "Support Models/Settings/GlobalSettingsKey.swift",
        "Support Models/Settings/SettingsWrapper.swift",
        "Support Models/State.swift"
      ],
      "target_dependencies" : [
        "StreamDeckMacros",
        "SDPlusLayout"
      ],
      "type" : "library"
    },
    {
      "c99name" : "SDPlusLayoutTests",
      "module_type" : "SwiftTarget",
      "name" : "SDPlusLayoutTests",
      "path" : "Tests/SDPlusLayoutTests",
      "sources" : [
        "LayoutTests.swift"
      ],
      "target_dependencies" : [
        "SDPlusLayout"
      ],
      "type" : "test"
    },
    {
      "c99name" : "SDPlusLayout",
      "module_type" : "SwiftTarget",
      "name" : "SDPlusLayout",
      "path" : "Sources/SDPlusLayout",
      "product_memberships" : [
        "StreamDeck"
      ],
      "sources" : [
        "BarLayoutItem.swift",
        "Color/Color+ExpressibleByStringLiteral.swift",
        "Color/Color+FormatStyle.swift",
        "Color/Color.swift",
        "Color/ColorStyle.swift",
        "Color/Gradient.swift",
        "Elements/Bar.swift",
        "Elements/Image.swift",
        "Elements/Slider.swift",
        "Elements/Text.swift",
        "Extensions/Clamped.swift",
        "Layout.swift",
        "LayoutItem.swift",
        "LayoutItemKey.swift",
        "LayoutName.swift",
        "LayoutSettings.swift",
        "ModifiedItem.swift",
        "Properties.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.9"
}
Done.