The Swift Package Index logo.Swift Package Index

Build Information

Successful build of Phoros, reference 1.7.0 (e6c78c), with Swift 6.1 for macOS (SPM) on 5 Oct 2026 17:16:52 UTC.

Swift 6 data race errors: 2

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

========================================
RunAll
========================================
Builder version: 5.1.1
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/kevinerikjs/phoros.git
Reference: 1.7.0
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/kevinerikjs/phoros
 * tag               1.7.0      -> FETCH_HEAD
HEAD is now at e6c78c7 feat(BEAM-104): encrypt the Phoros connection (X25519 + AES-256-GCM)
Cloned https://github.com/kevinerikjs/phoros.git
Revision (git rev-parse @):
e6c78c744d8e11c2f4726f5158e2579e785b62b9
SPI manifest file found: $PWD/.spi.yml
SUCCESS checkout https://github.com/kevinerikjs/phoros.git at 1.7.0
========================================
Build
========================================
Selected platform:         macosSpm
Swift version:             6.1
Building package at path:  $PWD
https://github.com/kevinerikjs/phoros.git
https://github.com/kevinerikjs/phoros.git
{
  "dependencies" : [
  ],
  "manifest_display_name" : "Phoros",
  "name" : "Phoros",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "ios",
      "version" : "15.0"
    },
    {
      "name" : "macos",
      "version" : "12.0"
    },
    {
      "name" : "tvos",
      "version" : "15.0"
    },
    {
      "name" : "visionos",
      "version" : "1.0"
    }
  ],
  "products" : [
    {
      "name" : "Phoros",
      "targets" : [
        "Phoros"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "PhorosSession",
      "targets" : [
        "PhorosSession"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "PhorosNetwork",
      "targets" : [
        "PhorosNetwork"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "PhorosMedia",
      "targets" : [
        "PhorosMedia"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "PhorosInput",
      "targets" : [
        "PhorosInput"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "PhorosCore",
      "targets" : [
        "PhorosCore"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "PhorosTests",
      "module_type" : "SwiftTarget",
      "name" : "PhorosTests",
      "path" : "Tests/PhorosTests",
      "sources" : [
        "ControlTests.swift",
        "FramingTests.swift",
        "HandshakeTests.swift",
        "MediaTests.swift"
      ],
      "target_dependencies" : [
        "Phoros"
      ],
      "type" : "test"
    },
    {
      "c99name" : "PhorosSessionTests",
      "module_type" : "SwiftTarget",
      "name" : "PhorosSessionTests",
      "path" : "Tests/PhorosSessionTests",
      "sources" : [
        "SecureChannelTests.swift",
        "SessionTests.swift"
      ],
      "target_dependencies" : [
        "PhorosSession"
      ],
      "type" : "test"
    },
    {
      "c99name" : "PhorosSession",
      "module_type" : "SwiftTarget",
      "name" : "PhorosSession",
      "path" : "Sources/PhorosSession",
      "product_memberships" : [
        "PhorosSession",
        "PhorosNetwork",
        "PhorosCore"
      ],
      "sources" : [
        "AudioSequenceGuard.swift",
        "BitrateController.swift",
        "ClockSync.swift",
        "FrameAssembler.swift",
        "LinkHealth.swift",
        "PairingClient.swift",
        "PairingHost.swift",
        "QualityLadder.swift",
        "RealtimeTransport.swift",
        "SecureChannel.swift",
        "SendScheduler.swift",
        "SharedSecret.swift"
      ],
      "target_dependencies" : [
        "Phoros"
      ],
      "type" : "library"
    },
    {
      "c99name" : "PhorosNetworkTests",
      "module_type" : "SwiftTarget",
      "name" : "PhorosNetworkTests",
      "path" : "Tests/PhorosNetworkTests",
      "sources" : [
        "LegacyTransportTests.swift",
        "SecureConnectionTests.swift"
      ],
      "target_dependencies" : [
        "PhorosNetwork"
      ],
      "type" : "test"
    },
    {
      "c99name" : "PhorosNetwork",
      "module_type" : "SwiftTarget",
      "name" : "PhorosNetwork",
      "path" : "Sources/PhorosNetwork",
      "product_memberships" : [
        "PhorosNetwork"
      ],
      "sources" : [
        "PhorosConnection.swift",
        "PhorosLegacyTransport.swift"
      ],
      "target_dependencies" : [
        "Phoros",
        "PhorosSession"
      ],
      "type" : "library"
    },
    {
      "c99name" : "PhorosMediaTests",
      "module_type" : "SwiftTarget",
      "name" : "PhorosMediaTests",
      "path" : "Tests/PhorosMediaTests",
      "sources" : [
        "MediaTests.swift"
      ],
      "target_dependencies" : [
        "PhorosMedia"
      ],
      "type" : "test"
    },
    {
      "c99name" : "PhorosMedia",
      "module_type" : "SwiftTarget",
      "name" : "PhorosMedia",
      "path" : "Sources/PhorosMedia",
      "product_memberships" : [
        "PhorosMedia"
      ],
      "sources" : [
        "AACDecoder.swift",
        "AACEncoder.swift",
        "AnnexB.swift",
        "PCMChunk.swift",
        "VideoEncoder.swift",
        "VideoFormat.swift"
      ],
      "target_dependencies" : [
        "Phoros"
      ],
      "type" : "library"
    },
    {
      "c99name" : "PhorosInputTests",
      "module_type" : "SwiftTarget",
      "name" : "PhorosInputTests",
      "path" : "Tests/PhorosInputTests",
      "sources" : [
        "InputTests.swift"
      ],
      "target_dependencies" : [
        "PhorosInput"
      ],
      "type" : "test"
    },
    {
      "c99name" : "PhorosInput",
      "module_type" : "SwiftTarget",
      "name" : "PhorosInput",
      "path" : "Sources/PhorosInput",
      "product_memberships" : [
        "PhorosInput"
      ],
      "sources" : [
        "ControllerSampler.swift",
        "FrameMapping.swift",
        "GamepadProfile.swift",
        "GamepadReport.swift",
        "InputReplay.swift",
        "PhorosInput.swift",
        "VirtualGamepad.swift"
      ],
      "target_dependencies" : [
        "Phoros"
      ],
      "type" : "library"
    },
    {
      "c99name" : "PhorosCoreTests",
      "module_type" : "SwiftTarget",
      "name" : "PhorosCoreTests",
      "path" : "Tests/PhorosCoreTests",
      "sources" : [
        "BoundaryTests.swift",
        "PeerTests.swift",
        "PeerTransportTests.swift"
      ],
      "target_dependencies" : [
        "PhorosCore"
      ],
      "type" : "test"
    },
    {
      "c99name" : "PhorosCoreFFI",
      "module_type" : "BinaryTarget",
      "name" : "PhorosCoreFFI",
      "path" : "remote/archive/PhorosCore.xcframework.zip",
      "product_memberships" : [
        "PhorosCore"
      ],
      "sources" : [
      ],
      "type" : "binary"
    },
    {
      "c99name" : "PhorosCore",
      "module_type" : "SwiftTarget",
      "name" : "PhorosCore",
      "path" : "Sources/PhorosCore",
      "product_memberships" : [
        "PhorosCore"
      ],
      "sources" : [
        "PhorosCore.swift",
        "PhorosPeerTransport.swift",
        "RealtimePeer.swift"
      ],
      "target_dependencies" : [
        "PhorosCoreFFI",
        "Phoros",
        "PhorosSession"
      ],
      "type" : "library"
    },
    {
      "c99name" : "Phoros",
      "module_type" : "SwiftTarget",
      "name" : "Phoros",
      "path" : "Sources/Phoros",
      "product_memberships" : [
        "Phoros",
        "PhorosSession",
        "PhorosNetwork",
        "PhorosMedia",
        "PhorosInput",
        "PhorosCore"
      ],
      "sources" : [
        "Control/ControlMessage.swift",
        "Control/KeyModifiers.swift",
        "Framing/ByteOrder.swift",
        "Framing/FrameDecoder.swift",
        "Framing/PacketHeader.swift",
        "Handshake/PairingMessage.swift",
        "Handshake/PeerCapabilities.swift",
        "Media/AudioChunkHeader.swift",
        "Media/Codecs.swift",
        "Media/ControllerReport.swift",
        "Media/QualityPreset.swift",
        "Media/VideoFragmentHeader.swift",
        "Phoros.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.9"
}
Running build ...
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
Building for debugging...
[0/8] Write sources
[0/8] Copying libphoros_core.a
[1/8] Write sources
[7/8] Write swift-version-2F0A5646E1D333AE.txt
[9/21] Compiling Phoros ControllerReport.swift
[10/22] Compiling Phoros PacketHeader.swift
[11/22] Compiling Phoros PairingMessage.swift
[12/22] Compiling Phoros Codecs.swift
[13/22] Compiling Phoros QualityPreset.swift
[14/22] Compiling Phoros VideoFragmentHeader.swift
[15/22] Compiling Phoros AudioChunkHeader.swift
[16/22] Compiling Phoros PeerCapabilities.swift
[17/22] Emitting module Phoros
[18/22] Compiling Phoros ByteOrder.swift
[19/22] Compiling Phoros FrameDecoder.swift
[20/22] Compiling Phoros ControlMessage.swift
[21/22] Compiling Phoros KeyModifiers.swift
[22/22] Compiling Phoros Phoros.swift
[23/49] Compiling PhorosSession SendScheduler.swift
[24/50] Compiling PhorosSession RealtimeTransport.swift
[25/50] Compiling PhorosSession QualityLadder.swift
[26/50] Compiling PhorosSession LinkHealth.swift
[27/50] Compiling PhorosSession PairingClient.swift
[28/50] Compiling PhorosSession ClockSync.swift
[29/50] Compiling PhorosSession FrameAssembler.swift
[30/50] Compiling PhorosSession AudioSequenceGuard.swift
[31/50] Compiling PhorosSession BitrateController.swift
[32/50] Compiling PhorosSession PairingHost.swift
[33/50] Compiling PhorosSession SecureChannel.swift
[34/50] Emitting module PhorosSession
[35/50] Compiling PhorosSession SharedSecret.swift
[36/57] Emitting module PhorosNetwork
[37/57] Compiling PhorosNetwork PhorosConnection.swift
/Users/admin/builder/spi-builder-workspace/Sources/PhorosNetwork/PhorosConnection.swift:216:76: warning: passing non-sendable parameter 'completion' to function expecting a @Sendable closure
210 |     /// re-prefixed. Returns the number of bytes handed to the transport.
211 |     @discardableResult
212 |     public func sendFramed(_ framed: Data, completion: @escaping (NWError?) -> Void) -> Int {
    |                                            `- note: parameter 'completion' is implicitly non-sendable
213 |         sendLock.lock()
214 |         defer { sendLock.unlock() }
215 |         guard sending != nil || holdsSends else {
216 |             connection.send(content: framed, completion: .contentProcessed(completion))
    |                                                                            `- warning: passing non-sendable parameter 'completion' to function expecting a @Sendable closure
217 |             return framed.count
218 |         }
/Users/admin/builder/spi-builder-workspace/Sources/PhorosNetwork/PhorosConnection.swift:231:69: warning: passing non-sendable parameter 'completion' to function expecting a @Sendable closure
210 |     /// re-prefixed. Returns the number of bytes handed to the transport.
211 |     @discardableResult
212 |     public func sendFramed(_ framed: Data, completion: @escaping (NWError?) -> Void) -> Int {
    |                                            `- note: parameter 'completion' is implicitly non-sendable
213 |         sendLock.lock()
214 |         defer { sendLock.unlock() }
    :
229 |             out.append(sealed.lengthPrefixed())
230 |         }
231 |         connection.send(content: out, completion: .contentProcessed(completion))
    |                                                                     `- warning: passing non-sendable parameter 'completion' to function expecting a @Sendable closure
232 |         return out.count
233 |     }
/Users/admin/builder/spi-builder-workspace/Sources/PhorosNetwork/PhorosConnection.swift:245:13: warning: capture of 'completion' with non-sendable type '((NWError?) -> Void)?' in a '@Sendable' closure
243 |         }
244 |         connection.send(content: body.lengthPrefixed(), completion: .contentProcessed { error in
245 |             completion?(error)
    |             |- warning: capture of 'completion' with non-sendable type '((NWError?) -> Void)?' in a '@Sendable' closure
    |             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
246 |         })
247 |     }
/Users/admin/builder/spi-builder-workspace/Sources/PhorosNetwork/PhorosConnection.swift:362:45: warning: reference to captured var 'self' in concurrently-executing code
360 |                     // End once the reject has left, so the client can tell "pair again" from a drop.
361 |                     connection.send(content: reply.encoded().lengthPrefixed(), completion: .contentProcessed { [weak self] _ in
362 |                         self?.queue.async { self?.end(.secureChannelFailed(error)) }
    |                                             `- warning: reference to captured var 'self' in concurrently-executing code
363 |                     })
364 |                     return false
[38/57] Compiling PhorosNetwork PhorosLegacyTransport.swift
/Users/admin/builder/spi-builder-workspace/Sources/PhorosNetwork/PhorosLegacyTransport.swift:443:43: warning: reference to captured var 'wireBytes' in concurrently-executing code
441 |                     if write.tag > 0 { self.onTrace?(.videoAcceptedByLink(frame: UInt32(write.tag - 1))) }
442 |                     self.scheduler.completed(write)
443 |                     self.bytesAccepted += wireBytes
    |                                           `- warning: reference to captured var 'wireBytes' in concurrently-executing code
444 |                     if error != nil { self.link.cancel(); return }
445 |                     self.drain()
[39/57] Compiling PhorosInput VirtualGamepad.swift
[40/57] Compiling PhorosInput PhorosInput.swift
[41/57] Compiling PhorosCore PhorosPeerTransport.swift
/Users/admin/builder/spi-builder-workspace/Sources/PhorosCore/PhorosPeerTransport.swift:115:33: warning: capture of 'self' with non-sendable type 'PhorosPeerTransport' in a '@Sendable' closure
 14 | /// compares the two on one table. RTP media is the next step; SCTP messages are enough to
 15 | /// measure what UDP, DTLS and partial reliability do to the loop.
 16 | public final class PhorosPeerTransport: PhorosRealtimeTransport {
    |                    `- note: class 'PhorosPeerTransport' does not conform to the 'Sendable' protocol
 17 |     public var onInbound: ((RealtimeInbound) -> Void)?
 18 |     public var onReady: (() -> Void)?
    :
113 |         onInbound = nil; onKeyframeNeeded = nil; onLinkStateChange = nil; onEnd = nil; onBitrateChange = nil
114 |         peer.onData = nil; peer.onVideo = nil; peer.onEvent = nil
115 |         queue.async { [self] in outbox.removeAll(); held.removeAll() }
    |                                 `- warning: capture of 'self' with non-sendable type 'PhorosPeerTransport' in a '@Sendable' closure
116 |         peer.destroy()
117 |     }
/Users/admin/builder/spi-builder-workspace/Sources/PhorosCore/PhorosPeerTransport.swift:204:13: warning: capture of 'self' with non-sendable type 'PhorosPeerTransport' in a '@Sendable' closure
 14 | /// compares the two on one table. RTP media is the next step; SCTP messages are enough to
 15 | /// measure what UDP, DTLS and partial reliability do to the loop.
 16 | public final class PhorosPeerTransport: PhorosRealtimeTransport {
    |                    `- note: class 'PhorosPeerTransport' does not conform to the 'Sendable' protocol
 17 |     public var onInbound: ((RealtimeInbound) -> Void)?
 18 |     public var onReady: (() -> Void)?
    :
202 |         message.append(payload)
203 |         queue.async { [self] in
204 |             outbox.append((lane.rawValue, message, Date()))
    |             `- warning: capture of 'self' with non-sendable type 'PhorosPeerTransport' in a '@Sendable' closure
205 |             flush()
206 |         }
/Users/admin/builder/spi-builder-workspace/Sources/PhorosCore/PhorosPeerTransport.swift:204:43: warning: reference to captured var 'message' in concurrently-executing code
202 |         message.append(payload)
203 |         queue.async { [self] in
204 |             outbox.append((lane.rawValue, message, Date()))
    |                                           `- warning: reference to captured var 'message' in concurrently-executing code
205 |             flush()
206 |         }
/Users/admin/builder/spi-builder-workspace/Sources/PhorosCore/PhorosPeerTransport.swift:229:27: warning: capture of 'self' with non-sendable type 'PhorosPeerTransport?' in a '@Sendable' closure
 14 | /// compares the two on one table. RTP media is the next step; SCTP messages are enough to
 15 | /// measure what UDP, DTLS and partial reliability do to the loop.
 16 | public final class PhorosPeerTransport: PhorosRealtimeTransport {
    |                    `- note: class 'PhorosPeerTransport' does not conform to the 'Sendable' protocol
 17 |     public var onInbound: ((RealtimeInbound) -> Void)?
 18 |     public var onReady: (() -> Void)?
    :
227 |             retryScheduled = true
228 |             queue.asyncAfter(deadline: .now() + .milliseconds(1)) { [weak self] in
229 |                 guard let self else { return }
    |                           `- warning: capture of 'self' with non-sendable type 'PhorosPeerTransport?' in a '@Sendable' closure
230 |                 self.retryScheduled = false
231 |                 self.flush()
/Users/admin/builder/spi-builder-workspace/Sources/PhorosCore/PhorosPeerTransport.swift:247:13: warning: capture of 'self' with non-sendable type 'PhorosPeerTransport' in a '@Sendable' closure
 14 | /// compares the two on one table. RTP media is the next step; SCTP messages are enough to
 15 | /// measure what UDP, DTLS and partial reliability do to the loop.
 16 | public final class PhorosPeerTransport: PhorosRealtimeTransport {
    |                    `- note: class 'PhorosPeerTransport' does not conform to the 'Sendable' protocol
 17 |     public var onInbound: ((RealtimeInbound) -> Void)?
 18 |     public var onReady: (() -> Void)?
    :
245 |         guard ackClocked else { sendVideoNow(annexB, presentationTimestamp: presentationTimestamp, isKeyframe: isKeyframe); return }
246 |         queue.async { [self] in
247 |             held.append((annexB, presentationTimestamp, isKeyframe))
    |             `- warning: capture of 'self' with non-sendable type 'PhorosPeerTransport' in a '@Sendable' closure
248 |             if held.count == 1 { heldSince = Date() }
249 |             releaseHeld()
/Users/admin/builder/spi-builder-workspace/Sources/PhorosCore/PhorosPeerTransport.swift:260:88: warning: capture of 'self' with non-sendable type 'PhorosPeerTransport?' in a '@Sendable' closure
 14 | /// compares the two on one table. RTP media is the next step; SCTP messages are enough to
 15 | /// measure what UDP, DTLS and partial reliability do to the loop.
 16 | public final class PhorosPeerTransport: PhorosRealtimeTransport {
    |                    `- note: class 'PhorosPeerTransport' does not conform to the 'Sendable' protocol
 17 |     public var onInbound: ((RealtimeInbound) -> Void)?
 18 |     public var onReady: (() -> Void)?
    :
258 |             let outstanding = frameNumber > ackWindow && lastAckedFrame + ackWindow < frameNumber
259 |             if outstanding && Date().timeIntervalSince(heldSince) < 0.04 {
260 |                 queue.asyncAfter(deadline: .now() + .milliseconds(2)) { [weak self] in self?.releaseHeld() }
    |                                                                                        `- warning: capture of 'self' with non-sendable type 'PhorosPeerTransport?' in a '@Sendable' closure
261 |                 return
262 |             }
/Users/admin/builder/spi-builder-workspace/Sources/PhorosCore/PhorosPeerTransport.swift:327:27: warning: capture of 'self' with non-sendable type 'PhorosPeerTransport' in a '@Sendable' closure
 14 | /// compares the two on one table. RTP media is the next step; SCTP messages are enough to
 15 | /// measure what UDP, DTLS and partial reliability do to the loop.
 16 | public final class PhorosPeerTransport: PhorosRealtimeTransport {
    |                    `- note: class 'PhorosPeerTransport' does not conform to the 'Sendable' protocol
 17 |     public var onInbound: ((RealtimeInbound) -> Void)?
 18 |     public var onReady: (() -> Void)?
    :
325 |                   let header = AudioChunkHeader.parse(from: Data(body.dropFirst())) else { return }
326 |             hostTimeReference = header.presentationTimestamp   // audio carries the full timestamp
327 |             queue.async { self.reorderAudio(header, Data(body.dropFirst(1 + AudioChunkHeader.size)), codec: codec) }
    |                           `- warning: capture of 'self' with non-sendable type 'PhorosPeerTransport' in a '@Sendable' closure
328 |         case .input:
329 |             guard let flag = body.first, let report = ControllerReport.parse(from: Data(body.dropFirst())) else { return }
/Users/admin/builder/spi-builder-workspace/Sources/PhorosCore/PhorosPeerTransport.swift:335:29: warning: capture of 'self' with non-sendable type 'PhorosPeerTransport' in a '@Sendable' closure
 14 | /// compares the two on one table. RTP media is the next step; SCTP messages are enough to
 15 | /// measure what UDP, DTLS and partial reliability do to the loop.
 16 | public final class PhorosPeerTransport: PhorosRealtimeTransport {
    |                    `- note: class 'PhorosPeerTransport' does not conform to the 'Sendable' protocol
 17 |     public var onInbound: ((RealtimeInbound) -> Void)?
 18 |     public var onReady: (() -> Void)?
    :
333 |             let acked = UInt32(b[0]) << 24 | UInt32(b[1]) << 16 | UInt32(b[2]) << 8 | UInt32(b[3])
334 |             queue.async { [self] in
335 |                 if acked >= lastAckedFrame { lastAckedFrame = acked; lastAckAt = Date() }
    |                             `- warning: capture of 'self' with non-sendable type 'PhorosPeerTransport' in a '@Sendable' closure
336 |                 releaseHeld()
337 |             }
[42/57] Compiling PhorosCore RealtimePeer.swift
/Users/admin/builder/spi-builder-workspace/Sources/PhorosCore/RealtimePeer.swift:220:23: warning: capture of 'self' with non-sendable type 'NetworkDrivenPeer?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
195 | /// `NWConnection` to the remote address; the peer's transmits go out on it, its receives go
196 | /// in. Everything on one queue, the way a transport would do it.
197 | public final class NetworkDrivenPeer {
    |                    `- note: class 'NetworkDrivenPeer' does not conform to the 'Sendable' protocol
198 |     public let peer: RealtimePeer
199 |     private let connection: NWConnection
    :
218 |     public func start(remoteInfo: String) {
219 |         connection.stateUpdateHandler = { [weak self] state in
220 |             guard let self, case .ready = state else { return }
    |                       `- warning: capture of 'self' with non-sendable type 'NetworkDrivenPeer?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
221 |             self.peer.setRemote(info: remoteInfo, address: self.remote, nowMicros: self.nowMicros)
222 |             self.receive()
/Users/admin/builder/spi-builder-workspace/Sources/PhorosCore/RealtimePeer.swift:246:17: warning: capture of 'self' with non-sendable type 'NetworkDrivenPeer' in a '@Sendable' closure
195 | /// `NWConnection` to the remote address; the peer's transmits go out on it, its receives go
196 | /// in. Everything on one queue, the way a transport would do it.
197 | public final class NetworkDrivenPeer {
    |                    `- note: class 'NetworkDrivenPeer' does not conform to the 'Sendable' protocol
198 |     public let peer: RealtimePeer
199 |     private let connection: NWConnection
    :
244 |     public func send(channel: Int, _ data: Data) {
245 |         queue.async { [self] in
246 |             _ = peer.send(channel: channel, data)
    |                 `- warning: capture of 'self' with non-sendable type 'NetworkDrivenPeer' in a '@Sendable' closure
247 |             pump()
248 |         }
/Users/admin/builder/spi-builder-workspace/Sources/PhorosCore/RealtimePeer.swift:270:23: warning: capture of 'self' with non-sendable type 'NetworkDrivenPeer?' in a '@Sendable' closure
195 | /// `NWConnection` to the remote address; the peer's transmits go out on it, its receives go
196 | /// in. Everything on one queue, the way a transport would do it.
197 | public final class NetworkDrivenPeer {
    |                    `- note: class 'NetworkDrivenPeer' does not conform to the 'Sendable' protocol
198 |     public let peer: RealtimePeer
199 |     private let connection: NWConnection
    :
268 |     private func receive() {
269 |         connection.receiveMessage { [weak self] data, _, _, error in
270 |             guard let self, error == nil else { return }
    |                       `- warning: capture of 'self' with non-sendable type 'NetworkDrivenPeer?' in a '@Sendable' closure
271 |             if let data {
272 |                 data.withUnsafeBytes { _ = self.peer.feed($0, from: self.remote, nowMicros: self.nowMicros) }
[43/57] Emitting module PhorosCore
[44/57] Compiling PhorosCore PhorosCore.swift
[45/57] Compiling PhorosInput FrameMapping.swift
[46/57] Compiling PhorosInput ControllerSampler.swift
[47/57] Compiling PhorosMedia VideoFormat.swift
[48/57] Compiling PhorosInput GamepadReport.swift
[49/57] Compiling PhorosInput GamepadProfile.swift
/Users/admin/builder/spi-builder-workspace/Sources/PhorosInput/GamepadProfile.swift:173:24: warning: static property 'counter' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
171 |     ]
172 |
173 |     private static var counter: UInt8 = 0
    |                        |- warning: static property 'counter' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'counter' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'counter' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
174 |
175 |     public static func bytes(for r: ControllerReport) -> [UInt8] {
[50/57] Emitting module PhorosInput
/Users/admin/builder/spi-builder-workspace/Sources/PhorosInput/GamepadProfile.swift:173:24: warning: static property 'counter' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
171 |     ]
172 |
173 |     private static var counter: UInt8 = 0
    |                        |- warning: static property 'counter' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'counter' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'counter' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
174 |
175 |     public static func bytes(for r: ControllerReport) -> [UInt8] {
/Users/admin/builder/spi-builder-workspace/Sources/PhorosInput/InputReplay.swift:202:24: warning: static property 'heldButton' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
200 |
201 |     /// The button a pointer drag is holding down, if any. Only touched on `queue`.
202 |     private static var heldButton: CGMouseButton?
    |                        |- warning: static property 'heldButton' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'heldButton' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'heldButton' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
203 |
204 |     /// Press a mouse button at `point` and keep it down (the start of a drag).
[51/57] Compiling PhorosInput InputReplay.swift
/Users/admin/builder/spi-builder-workspace/Sources/PhorosInput/InputReplay.swift:202:24: warning: static property 'heldButton' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
200 |
201 |     /// The button a pointer drag is holding down, if any. Only touched on `queue`.
202 |     private static var heldButton: CGMouseButton?
    |                        |- warning: static property 'heldButton' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'heldButton' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'heldButton' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
203 |
204 |     /// Press a mouse button at `point` and keep it down (the start of a drag).
/Users/admin/builder/spi-builder-workspace/Sources/PhorosInput/InputReplay.swift:30:24: warning: reference to var 'kAXTrustedCheckOptionPrompt' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 28 |     /// Ask the system to show the Accessibility prompt for this process.
 29 |     public static func requestAccessibilityPermission() {
 30 |         let options = [kAXTrustedCheckOptionPrompt.takeRetainedValue() as String: true] as CFDictionary
    |                        `- warning: reference to var 'kAXTrustedCheckOptionPrompt' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 31 |         AXIsProcessTrustedWithOptions(options)
 32 |     }
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks/HIServices.framework/Headers/AXUIElement.h:66:20: note: var declared here
 64 | extern Boolean AXIsProcessTrustedWithOptions (CFDictionaryRef __nullable options) CF_AVAILABLE_MAC(10_9);
 65 |
 66 | extern CFStringRef kAXTrustedCheckOptionPrompt CF_AVAILABLE_MAC(10_9);
    |                    `- note: var declared here
 67 |
 68 | /*!
[52/57] Compiling PhorosMedia AnnexB.swift
[53/57] Compiling PhorosMedia VideoEncoder.swift
/Users/admin/builder/spi-builder-workspace/Sources/PhorosMedia/VideoEncoder.swift:186:13: warning: capture of 'change' with non-sendable type '(inout VideoEncoderConfiguration) -> Void' in a '@Sendable' closure
184 |         queue.async { [self] in
185 |             var next = configuration
186 |             change(&next)
    |             |- warning: capture of 'change' with non-sendable type '(inout VideoEncoderConfiguration) -> Void' in a '@Sendable' closure
    |             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
187 |             guard next != configuration || session == nil else { return }
188 |             if let session { VTCompressionSessionInvalidate(session) }
/Users/admin/builder/spi-builder-workspace/Sources/PhorosMedia/VideoEncoder.swift:214:39: warning: capture of 'imageBuffer' with non-sendable type 'CVImageBuffer' (aka 'CVBuffer') in a '@Sendable' closure
212 |             }
213 |             let status = VTCompressionSessionEncodeFrame(
214 |                 session, imageBuffer: imageBuffer, presentationTimeStamp: pts, duration: .invalid,
    |                                       `- warning: capture of 'imageBuffer' with non-sendable type 'CVImageBuffer' (aka 'CVBuffer') in a '@Sendable' closure
215 |                 frameProperties: properties, sourceFrameRefcon: nil, infoFlagsOut: nil
216 |             )
CoreVideo.CVBuffer:1:14: note: class 'CVBuffer' does not conform to the 'Sendable' protocol
1 | public class CVBuffer : _CFObject {
  |              `- note: class 'CVBuffer' does not conform to the 'Sendable' protocol
2 | }
[54/57] Compiling PhorosMedia AACEncoder.swift
[55/57] Compiling PhorosMedia PCMChunk.swift
[56/57] Emitting module PhorosMedia
[57/57] Compiling PhorosMedia AACDecoder.swift
Build complete! (12.63s)
Downloading binary artifact https://github.com/kevinerikjs/phoros/releases/download/1.4.2/PhorosCore.xcframework.zip
[16375/56921555] Downloading https://github.com/kevinerikjs/phoros/releases/download/1.4.2/PhorosCore.xcframework.zip
Downloaded https://github.com/kevinerikjs/phoros/releases/download/1.4.2/PhorosCore.xcframework.zip (2.73s)
Build complete.
{
  "dependencies" : [
  ],
  "manifest_display_name" : "Phoros",
  "name" : "Phoros",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "ios",
      "version" : "15.0"
    },
    {
      "name" : "macos",
      "version" : "12.0"
    },
    {
      "name" : "tvos",
      "version" : "15.0"
    },
    {
      "name" : "visionos",
      "version" : "1.0"
    }
  ],
  "products" : [
    {
      "name" : "Phoros",
      "targets" : [
        "Phoros"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "PhorosSession",
      "targets" : [
        "PhorosSession"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "PhorosNetwork",
      "targets" : [
        "PhorosNetwork"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "PhorosMedia",
      "targets" : [
        "PhorosMedia"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "PhorosInput",
      "targets" : [
        "PhorosInput"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    },
    {
      "name" : "PhorosCore",
      "targets" : [
        "PhorosCore"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "PhorosTests",
      "module_type" : "SwiftTarget",
      "name" : "PhorosTests",
      "path" : "Tests/PhorosTests",
      "sources" : [
        "ControlTests.swift",
        "FramingTests.swift",
        "HandshakeTests.swift",
        "MediaTests.swift"
      ],
      "target_dependencies" : [
        "Phoros"
      ],
      "type" : "test"
    },
    {
      "c99name" : "PhorosSessionTests",
      "module_type" : "SwiftTarget",
      "name" : "PhorosSessionTests",
      "path" : "Tests/PhorosSessionTests",
      "sources" : [
        "SecureChannelTests.swift",
        "SessionTests.swift"
      ],
      "target_dependencies" : [
        "PhorosSession"
      ],
      "type" : "test"
    },
    {
      "c99name" : "PhorosSession",
      "module_type" : "SwiftTarget",
      "name" : "PhorosSession",
      "path" : "Sources/PhorosSession",
      "product_memberships" : [
        "PhorosSession",
        "PhorosNetwork",
        "PhorosCore"
      ],
      "sources" : [
        "AudioSequenceGuard.swift",
        "BitrateController.swift",
        "ClockSync.swift",
        "FrameAssembler.swift",
        "LinkHealth.swift",
        "PairingClient.swift",
        "PairingHost.swift",
        "QualityLadder.swift",
        "RealtimeTransport.swift",
        "SecureChannel.swift",
        "SendScheduler.swift",
        "SharedSecret.swift"
      ],
      "target_dependencies" : [
        "Phoros"
      ],
      "type" : "library"
    },
    {
      "c99name" : "PhorosNetworkTests",
      "module_type" : "SwiftTarget",
      "name" : "PhorosNetworkTests",
      "path" : "Tests/PhorosNetworkTests",
      "sources" : [
        "LegacyTransportTests.swift",
        "SecureConnectionTests.swift"
      ],
      "target_dependencies" : [
        "PhorosNetwork"
      ],
      "type" : "test"
    },
    {
      "c99name" : "PhorosNetwork",
      "module_type" : "SwiftTarget",
      "name" : "PhorosNetwork",
      "path" : "Sources/PhorosNetwork",
      "product_memberships" : [
        "PhorosNetwork"
      ],
      "sources" : [
        "PhorosConnection.swift",
        "PhorosLegacyTransport.swift"
      ],
      "target_dependencies" : [
        "Phoros",
        "PhorosSession"
      ],
      "type" : "library"
    },
    {
      "c99name" : "PhorosMediaTests",
      "module_type" : "SwiftTarget",
      "name" : "PhorosMediaTests",
      "path" : "Tests/PhorosMediaTests",
      "sources" : [
        "MediaTests.swift"
      ],
      "target_dependencies" : [
        "PhorosMedia"
      ],
      "type" : "test"
    },
    {
      "c99name" : "PhorosMedia",
      "module_type" : "SwiftTarget",
      "name" : "PhorosMedia",
      "path" : "Sources/PhorosMedia",
      "product_memberships" : [
        "PhorosMedia"
      ],
      "sources" : [
        "AACDecoder.swift",
        "AACEncoder.swift",
        "AnnexB.swift",
        "PCMChunk.swift",
        "VideoEncoder.swift",
        "VideoFormat.swift"
      ],
      "target_dependencies" : [
        "Phoros"
      ],
      "type" : "library"
    },
    {
      "c99name" : "PhorosInputTests",
      "module_type" : "SwiftTarget",
      "name" : "PhorosInputTests",
      "path" : "Tests/PhorosInputTests",
      "sources" : [
        "InputTests.swift"
      ],
      "target_dependencies" : [
        "PhorosInput"
      ],
      "type" : "test"
    },
    {
      "c99name" : "PhorosInput",
      "module_type" : "SwiftTarget",
      "name" : "PhorosInput",
      "path" : "Sources/PhorosInput",
      "product_memberships" : [
        "PhorosInput"
      ],
      "sources" : [
        "ControllerSampler.swift",
        "FrameMapping.swift",
        "GamepadProfile.swift",
        "GamepadReport.swift",
        "InputReplay.swift",
        "PhorosInput.swift",
        "VirtualGamepad.swift"
      ],
      "target_dependencies" : [
        "Phoros"
      ],
      "type" : "library"
    },
    {
      "c99name" : "PhorosCoreTests",
      "module_type" : "SwiftTarget",
      "name" : "PhorosCoreTests",
      "path" : "Tests/PhorosCoreTests",
      "sources" : [
        "BoundaryTests.swift",
        "PeerTests.swift",
        "PeerTransportTests.swift"
      ],
      "target_dependencies" : [
        "PhorosCore"
      ],
      "type" : "test"
    },
    {
      "c99name" : "PhorosCoreFFI",
      "module_type" : "BinaryTarget",
      "name" : "PhorosCoreFFI",
      "path" : "remote/archive/PhorosCore.xcframework.zip",
      "product_memberships" : [
        "PhorosCore"
      ],
      "sources" : [
      ],
      "type" : "binary"
    },
    {
      "c99name" : "PhorosCore",
      "module_type" : "SwiftTarget",
      "name" : "PhorosCore",
      "path" : "Sources/PhorosCore",
      "product_memberships" : [
        "PhorosCore"
      ],
      "sources" : [
        "PhorosCore.swift",
        "PhorosPeerTransport.swift",
        "RealtimePeer.swift"
      ],
      "target_dependencies" : [
        "PhorosCoreFFI",
        "Phoros",
        "PhorosSession"
      ],
      "type" : "library"
    },
    {
      "c99name" : "Phoros",
      "module_type" : "SwiftTarget",
      "name" : "Phoros",
      "path" : "Sources/Phoros",
      "product_memberships" : [
        "Phoros",
        "PhorosSession",
        "PhorosNetwork",
        "PhorosMedia",
        "PhorosInput",
        "PhorosCore"
      ],
      "sources" : [
        "Control/ControlMessage.swift",
        "Control/KeyModifiers.swift",
        "Framing/ByteOrder.swift",
        "Framing/FrameDecoder.swift",
        "Framing/PacketHeader.swift",
        "Handshake/PairingMessage.swift",
        "Handshake/PeerCapabilities.swift",
        "Media/AudioChunkHeader.swift",
        "Media/Codecs.swift",
        "Media/ControllerReport.swift",
        "Media/QualityPreset.swift",
        "Media/VideoFragmentHeader.swift",
        "Phoros.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.9"
}
Done.