Build Information
Successful build of Phoros, reference main (e6c78c), with Swift 6.1 for macOS (SPM) on 5 Oct 2026 17:18:47 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 InferSendableFromCapturesBuild Log
========================================
RunAll
========================================
Builder version: 5.1.1
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/kevinerikjs/phoros.git
Reference: main
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/kevinerikjs/phoros
* branch main -> FETCH_HEAD
* [new branch] main -> origin/main
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 main
========================================
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
[0/8] Write sources
[7/8] Write swift-version-2F0A5646E1D333AE.txt
[9/21] Compiling Phoros QualityPreset.swift
[10/21] Compiling Phoros PacketHeader.swift
[11/21] Compiling Phoros PairingMessage.swift
[12/22] Compiling Phoros ControlMessage.swift
[13/22] Compiling Phoros KeyModifiers.swift
[14/22] Emitting module Phoros
[15/22] Compiling Phoros ControllerReport.swift
[16/22] Compiling Phoros PeerCapabilities.swift
[17/22] Compiling Phoros AudioChunkHeader.swift
[18/22] Compiling Phoros VideoFragmentHeader.swift
[19/22] Compiling Phoros Codecs.swift
[20/22] Compiling Phoros ByteOrder.swift
[21/22] Compiling Phoros FrameDecoder.swift
[22/22] Compiling Phoros Phoros.swift
[23/49] Compiling PhorosSession RealtimeTransport.swift
[24/50] Compiling PhorosSession LinkHealth.swift
[25/50] Compiling PhorosSession ClockSync.swift
[26/50] Compiling PhorosSession FrameAssembler.swift
[27/50] Compiling PhorosSession SendScheduler.swift
[28/50] Compiling PhorosSession AudioSequenceGuard.swift
[29/50] Compiling PhorosSession BitrateController.swift
[30/50] Emitting module PhorosSession
[31/50] Compiling PhorosSession PairingHost.swift
[32/50] Compiling PhorosSession PairingClient.swift
[33/50] Compiling PhorosSession SharedSecret.swift
[34/50] Compiling PhorosSession QualityLadder.swift
[35/50] Compiling PhorosSession SecureChannel.swift
[36/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
[37/57] Emitting module PhorosNetwork
[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 PhorosCore PhorosCore.swift
[40/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 | }
[41/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) }
[42/57] Emitting module PhorosCore
[43/57] Compiling PhorosInput PhorosInput.swift
[44/57] Compiling PhorosInput VirtualGamepad.swift
[45/57] Compiling PhorosMedia AnnexB.swift
[46/57] Compiling PhorosMedia VideoFormat.swift
[47/57] Compiling PhorosMedia AACEncoder.swift
[48/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 | }
[49/57] Compiling PhorosMedia PCMChunk.swift
[50/57] Compiling PhorosInput ControllerSampler.swift
[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 PhorosInput FrameMapping.swift
[53/57] Compiling PhorosInput GamepadReport.swift
[54/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] {
[55/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).
[56/57] Emitting module PhorosMedia
[57/57] Compiling PhorosMedia AACDecoder.swift
Build complete! (13.61s)
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.68s)
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.