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.