Build Information
Successful build of CoreBluetoothMock, reference 1.1.0 (1356e6), with Swift 6.1 for macOS (SPM) on 24 Oct 2026 19:45:51 UTC.
Swift 6 data race errors: 30
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
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
| |- warning: static property 'managers' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'managers' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'managers' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
43 | private static let mutex: DispatchQueue = DispatchQueue(label: "Mutex")
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:42:24: warning: static property 'centrals' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
| |- warning: static property 'centrals' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'centrals' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'centrals' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
43 | private static let mutex: DispatchQueue = DispatchQueue(label: "Mutex")
44 |
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:105:23: warning: static property 'simulateStateRestoration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
103 | /// - SeeAlso: ``CBMPeripheralManagerRestoredStateServicesKey``
104 | /// - SeeAlso: ``CBMPeripheralManagerRestoredStateAdvertisementDataKey``
105 | public static var simulateStateRestoration: ((_ identifierKey: String) -> [String : Any]?)?
| |- warning: static property 'simulateStateRestoration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'simulateStateRestoration' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'simulateStateRestoration' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
106 |
107 | public init() {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:204:31: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
202 | guard !alreadyAdvertising else {
203 | queue.async { [weak self] in
204 | if let self = self {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
205 | self.delegate?.peripheralManagerDidStartAdvertising(self, error: CBMError(.alreadyAdvertising))
206 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:219:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
217 |
218 | queue.async { [weak self] in
219 | guard let self = self, self.state == .poweredOn else {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
220 | return
221 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:377:34: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
375 | queue.asyncAfter(deadline: .now() + spec.connectionInterval) { [weak self] in
376 | defer { delivery.leave() }
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:377:66: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
375 | queue.asyncAfter(deadline: .now() + spec.connectionInterval) { [weak self] in
376 | defer { delivery.leave() }
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:379:37: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
380 | }) else {
381 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:379:74: warning: capture of 'central' with non-sendable type 'CBMCentralMock' in a '@Sendable' closure
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
| `- warning: capture of 'central' with non-sendable type 'CBMCentralMock' in a '@Sendable' closure
380 | }) else {
381 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMCentral.swift:90:14: note: class 'CBMCentralMock' does not conform to the 'Sendable' protocol
88 | /// Each mock central is based on a ``CBMCentralSpec`` which is used to simulate the
89 | /// central's behavior.
90 | public class CBMCentralMock: CBMCentral {
| `- note: class 'CBMCentralMock' does not conform to the 'Sendable' protocol
91 | /// The specification of the simulated central.
92 | internal let spec: CBMCentralSpec
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:379:37: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
380 | }) else {
381 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:379:74: warning: capture of 'central' with non-sendable type 'CBMCentralMock' in an isolated closure; this is an error in the Swift 6 language mode
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
| `- warning: capture of 'central' with non-sendable type 'CBMCentralMock' in an isolated closure; this is an error in the Swift 6 language mode
380 | }) else {
381 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMCentral.swift:90:14: note: class 'CBMCentralMock' does not conform to the 'Sendable' protocol
88 | /// Each mock central is based on a ``CBMCentralSpec`` which is used to simulate the
89 | /// central's behavior.
90 | public class CBMCentralMock: CBMCentral {
| `- note: class 'CBMCentralMock' does not conform to the 'Sendable' protocol
91 | /// The specification of the simulated central.
92 | internal let spec: CBMCentralSpec
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:379:74: warning: implicit capture of 'central' requires that 'CBMCentralMock' conforms to 'Sendable'; this is an error in the Swift 6 language mode
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
| `- warning: implicit capture of 'central' requires that 'CBMCentralMock' conforms to 'Sendable'; this is an error in the Swift 6 language mode
380 | }) else {
381 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMCentral.swift:90:14: note: class 'CBMCentralMock' does not conform to the 'Sendable' protocol
88 | /// Each mock central is based on a ``CBMCentralSpec`` which is used to simulate the
89 | /// central's behavior.
90 | public class CBMCentralMock: CBMCentral {
| `- note: class 'CBMCentralMock' does not conform to the 'Sendable' protocol
91 | /// The specification of the simulated central.
92 | internal let spec: CBMCentralSpec
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:379:87: warning: implicit capture of 'characteristic' requires that 'CBMMutableCharacteristic' conforms to 'Sendable'; this is an error in the Swift 6 language mode
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
| `- warning: implicit capture of 'characteristic' requires that 'CBMMutableCharacteristic' conforms to 'Sendable'; this is an error in the Swift 6 language mode
380 | }) else {
381 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:415:27: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
413 | NSLog("[CoreBluetoothMock] L2CAP channels are not implemented in the mock. Publishing a channel failed.")
414 | queue.async { [weak self] in
415 | if let self = self, self.state == .poweredOn {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
416 | self.delegate?.peripheralManager(self,
417 | didPublishL2CAPChannel: 0,
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:429:27: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
427 | NSLog("[CoreBluetoothMock] L2CAP channels are not implemented in the mock. Unpublishing channel with PSM \(PSM) failed.")
428 | queue.async { [weak self] in
429 | if let self = self, self.state == .poweredOn {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
430 | self.delegate?.peripheralManager(self,
431 | didUnpublishL2CAPChannel: PSM,
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:449:20: warning: capture of 'manager' with non-sendable type 'CBMPeripheralManagerMock' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
447 | self.existingManagers.forEach { manager in
448 | manager.queue.async {
449 | if manager.state != .poweredOn {
| `- warning: capture of 'manager' with non-sendable type 'CBMPeripheralManagerMock' in a '@Sendable' closure
450 | // ...stop advertising and remove all services if state changed
451 | // to any other state than `.poweredOn`.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:510:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
508 | didSubscribeTo characteristic: CBMMutableCharacteristic) {
509 | queue.asyncAfter(deadline: .now() + spec.connectionInterval) { [weak self] in
510 | guard let self = self, self.state == .poweredOn, spec.isConnected else {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
511 | NSLog("Warning: Central \(spec.identifier) is not connected")
512 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:510:62: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
508 | didSubscribeTo characteristic: CBMMutableCharacteristic) {
509 | queue.asyncAfter(deadline: .now() + spec.connectionInterval) { [weak self] in
510 | guard let self = self, self.state == .poweredOn, spec.isConnected else {
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
511 | NSLog("Warning: Central \(spec.identifier) is not connected")
512 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:515:33: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
513 | }
514 | let subscribedCentral: CBMCentralMock? = self.mutex.sync {
515 | guard self.owns(characteristic) else {
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
516 | return nil
517 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:515:33: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
513 | }
514 | let subscribedCentral: CBMCentralMock? = self.mutex.sync {
515 | guard self.owns(characteristic) else {
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
516 | return nil
517 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:518:49: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
516 | return nil
517 | }
518 | let central = self.central(for: spec)
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
519 | guard !self.isSubscribed(central, to: characteristic) else {
520 | return nil
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:537:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
535 | didUnsubscribeFrom characteristic: CBMMutableCharacteristic) {
536 | queue.asyncAfter(deadline: .now() + spec.connectionInterval) { [weak self] in
537 | guard let self = self, self.state == .poweredOn, spec.isConnected else {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
538 | NSLog("Warning: Central \(spec.identifier) is not connected")
539 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:537:62: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
535 | didUnsubscribeFrom characteristic: CBMMutableCharacteristic) {
536 | queue.asyncAfter(deadline: .now() + spec.connectionInterval) { [weak self] in
537 | guard let self = self, self.state == .poweredOn, spec.isConnected else {
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
538 | NSLog("Warning: Central \(spec.identifier) is not connected")
539 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:542:33: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
540 | }
541 | let unsubscribedCentral: CBMCentralMock? = self.mutex.sync {
542 | guard self.owns(characteristic),
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
543 | let central = self.centrals[spec.identifier],
544 | self.isSubscribed(central, to: characteristic) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:542:33: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
540 | }
541 | let unsubscribedCentral: CBMCentralMock? = self.mutex.sync {
542 | guard self.owns(characteristic),
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
543 | let central = self.centrals[spec.identifier],
544 | self.isSubscribed(central, to: characteristic) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:543:51: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
541 | let unsubscribedCentral: CBMCentralMock? = self.mutex.sync {
542 | guard self.owns(characteristic),
543 | let central = self.centrals[spec.identifier],
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
544 | self.isSubscribed(central, to: characteristic) else {
545 | return nil
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:565:17: warning: capture of 'completion' with non-sendable type '(Result<Data, any Error>) -> Void' in a '@Sendable' closure
563 | let reply: (Result<Data, Error>) -> Void = { result in
564 | queue.asyncAfter(deadline: .now() + interval) {
565 | completion(result)
| |- warning: capture of 'completion' with non-sendable type '(Result<Data, any Error>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
566 | }
567 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:602:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
600 | }
601 | queue.asyncAfter(deadline: .now() + interval) { [weak self] in
602 | guard let self = self, self.state == .poweredOn, spec.isConnected,
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
603 | self.mutex.sync(execute: { () -> Bool in
604 | guard self.owns(characteristic) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:602:62: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
600 | }
601 | queue.asyncAfter(deadline: .now() + interval) { [weak self] in
602 | guard let self = self, self.state == .poweredOn, spec.isConnected,
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
603 | self.mutex.sync(execute: { () -> Bool in
604 | guard self.owns(characteristic) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:604:39: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
602 | guard let self = self, self.state == .poweredOn, spec.isConnected,
603 | self.mutex.sync(execute: { () -> Bool in
604 | guard self.owns(characteristic) else {
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
605 | return false
606 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:607:51: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in a '@Sendable' closure
605 | return false
606 | }
607 | self.pendingRequests.append(request)
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in a '@Sendable' closure
608 | return true
609 | }) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:610:17: warning: capture of 'reply' with non-sendable type '(Result<Data, any Error>) -> Void' in a '@Sendable' closure
608 | return true
609 | }) else {
610 | reply(.failure(CBMError(.notConnected)))
| |- warning: capture of 'reply' with non-sendable type '(Result<Data, any Error>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
611 | return
612 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:604:39: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
602 | guard let self = self, self.state == .poweredOn, spec.isConnected,
603 | self.mutex.sync(execute: { () -> Bool in
604 | guard self.owns(characteristic) else {
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
605 | return false
606 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:607:51: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
605 | return false
606 | }
607 | self.pendingRequests.append(request)
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
608 | return true
609 | }) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:627:17: warning: capture of 'withResponseCompletion' with non-sendable type '((Result<Void, any Error>) -> Void)?' in a '@Sendable' closure
625 | let reply: (Result<Void, Error>) -> Void = { result in
626 | queue.asyncAfter(deadline: .now() + interval) {
627 | withResponseCompletion?(result)
| |- warning: capture of 'withResponseCompletion' with non-sendable type '((Result<Void, any Error>) -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
628 | }
629 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:671:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
669 | } : nil)
670 | queue.asyncAfter(deadline: .now() + interval) { [weak self] in
671 | guard let self = self, self.state == .poweredOn, spec.isConnected,
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
672 | self.mutex.sync(execute: { () -> Bool in
673 | guard self.owns(characteristic) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:671:62: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
669 | } : nil)
670 | queue.asyncAfter(deadline: .now() + interval) { [weak self] in
671 | guard let self = self, self.state == .poweredOn, spec.isConnected,
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
672 | self.mutex.sync(execute: { () -> Bool in
673 | guard self.owns(characteristic) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:673:39: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
671 | guard let self = self, self.state == .poweredOn, spec.isConnected,
672 | self.mutex.sync(execute: { () -> Bool in
673 | guard self.owns(characteristic) else {
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
674 | return false
675 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:677:55: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in a '@Sendable' closure
675 | }
676 | if isWithResponse {
677 | self.pendingRequests.append(request)
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in a '@Sendable' closure
678 | }
679 | return true
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:682:21: warning: capture of 'reply' with non-sendable type '(Result<Void, any Error>) -> Void' in a '@Sendable' closure
680 | }) else {
681 | if isWithResponse {
682 | reply(.failure(CBMError(.notConnected)))
| |- warning: capture of 'reply' with non-sendable type '(Result<Void, any Error>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
683 | } else {
684 | NSLog("[CoreBluetoothMock] Write command to characteristic \(characteristic.uuid) dropped: not connected")
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:673:39: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
671 | guard let self = self, self.state == .poweredOn, spec.isConnected,
672 | self.mutex.sync(execute: { () -> Bool in
673 | guard self.owns(characteristic) else {
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
674 | return false
675 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:677:55: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
675 | }
676 | if isWithResponse {
677 | self.pendingRequests.append(request)
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
678 | }
679 | return true
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:724:27: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
722 | private func initialize() {
723 | queue.async { [weak self] in
724 | if let self = self {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
725 | CBMPeripheralManagerMock.mutex.sync {
726 | CBMPeripheralManagerMock.managers.append(WeakRef(self))
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:747:27: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
745 | private func notifyDidAddServiceCallback(_ service: CBMMutableService, error: Error?) {
746 | queue.async { [weak self] in
747 | if let self = self, self.state == .poweredOn {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
748 | self.delegate?.peripheralManager(self, didAdd: service, error: error)
749 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:748:64: warning: capture of 'service' with non-sendable type 'CBMMutableService' in a '@Sendable' closure
746 | queue.async { [weak self] in
747 | if let self = self, self.state == .poweredOn {
748 | self.delegate?.peripheralManager(self, didAdd: service, error: error)
| `- warning: capture of 'service' with non-sendable type 'CBMMutableService' in a '@Sendable' closure
749 | }
750 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:38:12: note: class 'CBMMutableService' does not conform to the 'Sendable' protocol
36 | /// ``CBMPeripheralManager``. The characteristics of a mutable service must be
37 | /// ``CBMMutableCharacteristic`` objects.
38 | open class CBMMutableService: CBMService {
| `- note: class 'CBMMutableService' does not conform to the 'Sendable' protocol
39 |
40 | /// A list of included services.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:756:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
754 | private func scheduleTimeout(of request: CBMATTRequestMock, for spec: CBMCentralSpec) {
755 | queue.asyncAfter(deadline: .now() + spec.attributeProtocolTimeout) { [weak self] in
756 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
757 | let isPending: Bool = self.mutex.sync {
758 | guard let index = self.pendingRequests.firstIndex(where: { $0 === request }) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:758:83: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in a '@Sendable' closure
756 | guard let self = self else { return }
757 | let isPending: Bool = self.mutex.sync {
758 | guard let index = self.pendingRequests.firstIndex(where: { $0 === request }) else {
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in a '@Sendable' closure
759 | return false
760 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:758:83: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
756 | guard let self = self else { return }
757 | let isPending: Bool = self.mutex.sync {
758 | guard let index = self.pendingRequests.firstIndex(where: { $0 === request }) else {
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
759 | return false
760 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:758:83: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
756 | guard let self = self else { return }
757 | let isPending: Bool = self.mutex.sync {
758 | guard let index = self.pendingRequests.firstIndex(where: { $0 === request }) else {
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
759 | return false
760 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:830:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
828 | private func central(didDisconnect spec: CBMCentralSpec) {
829 | queue.async { [weak self] in
830 | guard let self = self else {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
831 | return
832 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:836:71: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
834 | let disconnected: (central: CBMCentralMock,
835 | characteristics: [CBMMutableCharacteristic])? = self.mutex.sync {
836 | guard let central = self.centrals.removeValue(forKey: spec.identifier) else {
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
837 | return nil
838 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:836:71: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
834 | let disconnected: (central: CBMCentralMock,
835 | characteristics: [CBMMutableCharacteristic])? = self.mutex.sync {
836 | guard let central = self.centrals.removeValue(forKey: spec.identifier) else {
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
837 | return nil
838 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:839:90: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
837 | return nil
838 | }
839 | abortedRequests = self.pendingRequests.filter { $0.central.identifier == spec.identifier }
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
840 | self.pendingRequests.removeAll { $0.central.identifier == spec.identifier }
841 | let characteristics = self.services
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:840:75: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
838 | }
839 | abortedRequests = self.pendingRequests.filter { $0.central.identifier == spec.identifier }
840 | self.pendingRequests.removeAll { $0.central.identifier == spec.identifier }
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
841 | let characteristics = self.services
842 | .flatMap { $0.characteristics ?? [] }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerNative.swift:157:11: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerNative?' in a '@Sendable' closure
32 | import CoreBluetooth
33 |
34 | public class CBMPeripheralManagerNative: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerNative' does not conform to the 'Sendable' protocol
35 | private var observation: NSKeyValueObservation?
36 | @objc dynamic private var manager: CBPeripheralManager!
:
155 | observation = observe(\.manager?.isAdvertising, options: [.new]) { [weak self] _, change in
156 | if let new = change.newValue ?? nil {
157 | self?.isAdvertising = new
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerNative?' in a '@Sendable' closure
158 | }
159 | }
[21/33] Compiling CoreBluetoothMock CBMPeripheralManagerMock.swift
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:41:24: warning: static property 'managers' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
| |- warning: static property 'managers' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'managers' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'managers' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
43 | private static let mutex: DispatchQueue = DispatchQueue(label: "Mutex")
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:42:24: warning: static property 'centrals' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
| |- warning: static property 'centrals' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'centrals' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'centrals' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
43 | private static let mutex: DispatchQueue = DispatchQueue(label: "Mutex")
44 |
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:105:23: warning: static property 'simulateStateRestoration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
103 | /// - SeeAlso: ``CBMPeripheralManagerRestoredStateServicesKey``
104 | /// - SeeAlso: ``CBMPeripheralManagerRestoredStateAdvertisementDataKey``
105 | public static var simulateStateRestoration: ((_ identifierKey: String) -> [String : Any]?)?
| |- warning: static property 'simulateStateRestoration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'simulateStateRestoration' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'simulateStateRestoration' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
106 |
107 | public init() {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:204:31: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
202 | guard !alreadyAdvertising else {
203 | queue.async { [weak self] in
204 | if let self = self {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
205 | self.delegate?.peripheralManagerDidStartAdvertising(self, error: CBMError(.alreadyAdvertising))
206 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:219:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
217 |
218 | queue.async { [weak self] in
219 | guard let self = self, self.state == .poweredOn else {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
220 | return
221 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:377:34: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
375 | queue.asyncAfter(deadline: .now() + spec.connectionInterval) { [weak self] in
376 | defer { delivery.leave() }
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:377:66: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
375 | queue.asyncAfter(deadline: .now() + spec.connectionInterval) { [weak self] in
376 | defer { delivery.leave() }
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:379:37: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
380 | }) else {
381 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:379:74: warning: capture of 'central' with non-sendable type 'CBMCentralMock' in a '@Sendable' closure
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
| `- warning: capture of 'central' with non-sendable type 'CBMCentralMock' in a '@Sendable' closure
380 | }) else {
381 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMCentral.swift:90:14: note: class 'CBMCentralMock' does not conform to the 'Sendable' protocol
88 | /// Each mock central is based on a ``CBMCentralSpec`` which is used to simulate the
89 | /// central's behavior.
90 | public class CBMCentralMock: CBMCentral {
| `- note: class 'CBMCentralMock' does not conform to the 'Sendable' protocol
91 | /// The specification of the simulated central.
92 | internal let spec: CBMCentralSpec
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:379:37: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
380 | }) else {
381 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:379:74: warning: capture of 'central' with non-sendable type 'CBMCentralMock' in an isolated closure; this is an error in the Swift 6 language mode
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
| `- warning: capture of 'central' with non-sendable type 'CBMCentralMock' in an isolated closure; this is an error in the Swift 6 language mode
380 | }) else {
381 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMCentral.swift:90:14: note: class 'CBMCentralMock' does not conform to the 'Sendable' protocol
88 | /// Each mock central is based on a ``CBMCentralSpec`` which is used to simulate the
89 | /// central's behavior.
90 | public class CBMCentralMock: CBMCentral {
| `- note: class 'CBMCentralMock' does not conform to the 'Sendable' protocol
91 | /// The specification of the simulated central.
92 | internal let spec: CBMCentralSpec
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:379:74: warning: implicit capture of 'central' requires that 'CBMCentralMock' conforms to 'Sendable'; this is an error in the Swift 6 language mode
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
| `- warning: implicit capture of 'central' requires that 'CBMCentralMock' conforms to 'Sendable'; this is an error in the Swift 6 language mode
380 | }) else {
381 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMCentral.swift:90:14: note: class 'CBMCentralMock' does not conform to the 'Sendable' protocol
88 | /// Each mock central is based on a ``CBMCentralSpec`` which is used to simulate the
89 | /// central's behavior.
90 | public class CBMCentralMock: CBMCentral {
| `- note: class 'CBMCentralMock' does not conform to the 'Sendable' protocol
91 | /// The specification of the simulated central.
92 | internal let spec: CBMCentralSpec
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:379:87: warning: implicit capture of 'characteristic' requires that 'CBMMutableCharacteristic' conforms to 'Sendable'; this is an error in the Swift 6 language mode
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
| `- warning: implicit capture of 'characteristic' requires that 'CBMMutableCharacteristic' conforms to 'Sendable'; this is an error in the Swift 6 language mode
380 | }) else {
381 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:415:27: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
413 | NSLog("[CoreBluetoothMock] L2CAP channels are not implemented in the mock. Publishing a channel failed.")
414 | queue.async { [weak self] in
415 | if let self = self, self.state == .poweredOn {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
416 | self.delegate?.peripheralManager(self,
417 | didPublishL2CAPChannel: 0,
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:429:27: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
427 | NSLog("[CoreBluetoothMock] L2CAP channels are not implemented in the mock. Unpublishing channel with PSM \(PSM) failed.")
428 | queue.async { [weak self] in
429 | if let self = self, self.state == .poweredOn {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
430 | self.delegate?.peripheralManager(self,
431 | didUnpublishL2CAPChannel: PSM,
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:449:20: warning: capture of 'manager' with non-sendable type 'CBMPeripheralManagerMock' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
447 | self.existingManagers.forEach { manager in
448 | manager.queue.async {
449 | if manager.state != .poweredOn {
| `- warning: capture of 'manager' with non-sendable type 'CBMPeripheralManagerMock' in a '@Sendable' closure
450 | // ...stop advertising and remove all services if state changed
451 | // to any other state than `.poweredOn`.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:510:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
508 | didSubscribeTo characteristic: CBMMutableCharacteristic) {
509 | queue.asyncAfter(deadline: .now() + spec.connectionInterval) { [weak self] in
510 | guard let self = self, self.state == .poweredOn, spec.isConnected else {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
511 | NSLog("Warning: Central \(spec.identifier) is not connected")
512 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:510:62: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
508 | didSubscribeTo characteristic: CBMMutableCharacteristic) {
509 | queue.asyncAfter(deadline: .now() + spec.connectionInterval) { [weak self] in
510 | guard let self = self, self.state == .poweredOn, spec.isConnected else {
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
511 | NSLog("Warning: Central \(spec.identifier) is not connected")
512 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:515:33: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
513 | }
514 | let subscribedCentral: CBMCentralMock? = self.mutex.sync {
515 | guard self.owns(characteristic) else {
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
516 | return nil
517 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:515:33: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
513 | }
514 | let subscribedCentral: CBMCentralMock? = self.mutex.sync {
515 | guard self.owns(characteristic) else {
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
516 | return nil
517 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:518:49: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
516 | return nil
517 | }
518 | let central = self.central(for: spec)
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
519 | guard !self.isSubscribed(central, to: characteristic) else {
520 | return nil
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:537:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
535 | didUnsubscribeFrom characteristic: CBMMutableCharacteristic) {
536 | queue.asyncAfter(deadline: .now() + spec.connectionInterval) { [weak self] in
537 | guard let self = self, self.state == .poweredOn, spec.isConnected else {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
538 | NSLog("Warning: Central \(spec.identifier) is not connected")
539 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:537:62: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
535 | didUnsubscribeFrom characteristic: CBMMutableCharacteristic) {
536 | queue.asyncAfter(deadline: .now() + spec.connectionInterval) { [weak self] in
537 | guard let self = self, self.state == .poweredOn, spec.isConnected else {
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
538 | NSLog("Warning: Central \(spec.identifier) is not connected")
539 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:542:33: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
540 | }
541 | let unsubscribedCentral: CBMCentralMock? = self.mutex.sync {
542 | guard self.owns(characteristic),
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
543 | let central = self.centrals[spec.identifier],
544 | self.isSubscribed(central, to: characteristic) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:542:33: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
540 | }
541 | let unsubscribedCentral: CBMCentralMock? = self.mutex.sync {
542 | guard self.owns(characteristic),
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
543 | let central = self.centrals[spec.identifier],
544 | self.isSubscribed(central, to: characteristic) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:543:51: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
541 | let unsubscribedCentral: CBMCentralMock? = self.mutex.sync {
542 | guard self.owns(characteristic),
543 | let central = self.centrals[spec.identifier],
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
544 | self.isSubscribed(central, to: characteristic) else {
545 | return nil
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:565:17: warning: capture of 'completion' with non-sendable type '(Result<Data, any Error>) -> Void' in a '@Sendable' closure
563 | let reply: (Result<Data, Error>) -> Void = { result in
564 | queue.asyncAfter(deadline: .now() + interval) {
565 | completion(result)
| |- warning: capture of 'completion' with non-sendable type '(Result<Data, any Error>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
566 | }
567 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:602:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
600 | }
601 | queue.asyncAfter(deadline: .now() + interval) { [weak self] in
602 | guard let self = self, self.state == .poweredOn, spec.isConnected,
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
603 | self.mutex.sync(execute: { () -> Bool in
604 | guard self.owns(characteristic) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:602:62: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
600 | }
601 | queue.asyncAfter(deadline: .now() + interval) { [weak self] in
602 | guard let self = self, self.state == .poweredOn, spec.isConnected,
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
603 | self.mutex.sync(execute: { () -> Bool in
604 | guard self.owns(characteristic) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:604:39: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
602 | guard let self = self, self.state == .poweredOn, spec.isConnected,
603 | self.mutex.sync(execute: { () -> Bool in
604 | guard self.owns(characteristic) else {
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
605 | return false
606 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:607:51: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in a '@Sendable' closure
605 | return false
606 | }
607 | self.pendingRequests.append(request)
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in a '@Sendable' closure
608 | return true
609 | }) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:610:17: warning: capture of 'reply' with non-sendable type '(Result<Data, any Error>) -> Void' in a '@Sendable' closure
608 | return true
609 | }) else {
610 | reply(.failure(CBMError(.notConnected)))
| |- warning: capture of 'reply' with non-sendable type '(Result<Data, any Error>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
611 | return
612 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:604:39: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
602 | guard let self = self, self.state == .poweredOn, spec.isConnected,
603 | self.mutex.sync(execute: { () -> Bool in
604 | guard self.owns(characteristic) else {
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
605 | return false
606 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:607:51: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
605 | return false
606 | }
607 | self.pendingRequests.append(request)
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
608 | return true
609 | }) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:627:17: warning: capture of 'withResponseCompletion' with non-sendable type '((Result<Void, any Error>) -> Void)?' in a '@Sendable' closure
625 | let reply: (Result<Void, Error>) -> Void = { result in
626 | queue.asyncAfter(deadline: .now() + interval) {
627 | withResponseCompletion?(result)
| |- warning: capture of 'withResponseCompletion' with non-sendable type '((Result<Void, any Error>) -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
628 | }
629 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:671:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
669 | } : nil)
670 | queue.asyncAfter(deadline: .now() + interval) { [weak self] in
671 | guard let self = self, self.state == .poweredOn, spec.isConnected,
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
672 | self.mutex.sync(execute: { () -> Bool in
673 | guard self.owns(characteristic) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:671:62: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
669 | } : nil)
670 | queue.asyncAfter(deadline: .now() + interval) { [weak self] in
671 | guard let self = self, self.state == .poweredOn, spec.isConnected,
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
672 | self.mutex.sync(execute: { () -> Bool in
673 | guard self.owns(characteristic) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:673:39: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
671 | guard let self = self, self.state == .poweredOn, spec.isConnected,
672 | self.mutex.sync(execute: { () -> Bool in
673 | guard self.owns(characteristic) else {
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
674 | return false
675 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:677:55: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in a '@Sendable' closure
675 | }
676 | if isWithResponse {
677 | self.pendingRequests.append(request)
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in a '@Sendable' closure
678 | }
679 | return true
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:682:21: warning: capture of 'reply' with non-sendable type '(Result<Void, any Error>) -> Void' in a '@Sendable' closure
680 | }) else {
681 | if isWithResponse {
682 | reply(.failure(CBMError(.notConnected)))
| |- warning: capture of 'reply' with non-sendable type '(Result<Void, any Error>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
683 | } else {
684 | NSLog("[CoreBluetoothMock] Write command to characteristic \(characteristic.uuid) dropped: not connected")
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:673:39: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
671 | guard let self = self, self.state == .poweredOn, spec.isConnected,
672 | self.mutex.sync(execute: { () -> Bool in
673 | guard self.owns(characteristic) else {
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
674 | return false
675 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:677:55: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
675 | }
676 | if isWithResponse {
677 | self.pendingRequests.append(request)
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
678 | }
679 | return true
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:724:27: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
722 | private func initialize() {
723 | queue.async { [weak self] in
724 | if let self = self {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
725 | CBMPeripheralManagerMock.mutex.sync {
726 | CBMPeripheralManagerMock.managers.append(WeakRef(self))
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:747:27: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
745 | private func notifyDidAddServiceCallback(_ service: CBMMutableService, error: Error?) {
746 | queue.async { [weak self] in
747 | if let self = self, self.state == .poweredOn {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
748 | self.delegate?.peripheralManager(self, didAdd: service, error: error)
749 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:748:64: warning: capture of 'service' with non-sendable type 'CBMMutableService' in a '@Sendable' closure
746 | queue.async { [weak self] in
747 | if let self = self, self.state == .poweredOn {
748 | self.delegate?.peripheralManager(self, didAdd: service, error: error)
| `- warning: capture of 'service' with non-sendable type 'CBMMutableService' in a '@Sendable' closure
749 | }
750 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:38:12: note: class 'CBMMutableService' does not conform to the 'Sendable' protocol
36 | /// ``CBMPeripheralManager``. The characteristics of a mutable service must be
37 | /// ``CBMMutableCharacteristic`` objects.
38 | open class CBMMutableService: CBMService {
| `- note: class 'CBMMutableService' does not conform to the 'Sendable' protocol
39 |
40 | /// A list of included services.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:756:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
754 | private func scheduleTimeout(of request: CBMATTRequestMock, for spec: CBMCentralSpec) {
755 | queue.asyncAfter(deadline: .now() + spec.attributeProtocolTimeout) { [weak self] in
756 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
757 | let isPending: Bool = self.mutex.sync {
758 | guard let index = self.pendingRequests.firstIndex(where: { $0 === request }) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:758:83: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in a '@Sendable' closure
756 | guard let self = self else { return }
757 | let isPending: Bool = self.mutex.sync {
758 | guard let index = self.pendingRequests.firstIndex(where: { $0 === request }) else {
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in a '@Sendable' closure
759 | return false
760 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:758:83: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
756 | guard let self = self else { return }
757 | let isPending: Bool = self.mutex.sync {
758 | guard let index = self.pendingRequests.firstIndex(where: { $0 === request }) else {
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
759 | return false
760 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:758:83: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
756 | guard let self = self else { return }
757 | let isPending: Bool = self.mutex.sync {
758 | guard let index = self.pendingRequests.firstIndex(where: { $0 === request }) else {
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
759 | return false
760 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:830:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
828 | private func central(didDisconnect spec: CBMCentralSpec) {
829 | queue.async { [weak self] in
830 | guard let self = self else {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
831 | return
832 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:836:71: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
834 | let disconnected: (central: CBMCentralMock,
835 | characteristics: [CBMMutableCharacteristic])? = self.mutex.sync {
836 | guard let central = self.centrals.removeValue(forKey: spec.identifier) else {
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
837 | return nil
838 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:836:71: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
834 | let disconnected: (central: CBMCentralMock,
835 | characteristics: [CBMMutableCharacteristic])? = self.mutex.sync {
836 | guard let central = self.centrals.removeValue(forKey: spec.identifier) else {
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
837 | return nil
838 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:839:90: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
837 | return nil
838 | }
839 | abortedRequests = self.pendingRequests.filter { $0.central.identifier == spec.identifier }
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
840 | self.pendingRequests.removeAll { $0.central.identifier == spec.identifier }
841 | let characteristics = self.services
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:840:75: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
838 | }
839 | abortedRequests = self.pendingRequests.filter { $0.central.identifier == spec.identifier }
840 | self.pendingRequests.removeAll { $0.central.identifier == spec.identifier }
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
841 | let characteristics = self.services
842 | .flatMap { $0.characteristics ?? [] }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerNative.swift:157:11: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerNative?' in a '@Sendable' closure
32 | import CoreBluetooth
33 |
34 | public class CBMPeripheralManagerNative: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerNative' does not conform to the 'Sendable' protocol
35 | private var observation: NSKeyValueObservation?
36 | @objc dynamic private var manager: CBPeripheralManager!
:
155 | observation = observe(\.manager?.isAdvertising, options: [.new]) { [weak self] _, change in
156 | if let new = change.newValue ?? nil {
157 | self?.isAdvertising = new
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerNative?' in a '@Sendable' closure
158 | }
159 | }
[22/33] Compiling CoreBluetoothMock CBMPeripheralManagerNative.swift
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:41:24: warning: static property 'managers' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
| |- warning: static property 'managers' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'managers' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'managers' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
43 | private static let mutex: DispatchQueue = DispatchQueue(label: "Mutex")
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:42:24: warning: static property 'centrals' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
| |- warning: static property 'centrals' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'centrals' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'centrals' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
43 | private static let mutex: DispatchQueue = DispatchQueue(label: "Mutex")
44 |
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:105:23: warning: static property 'simulateStateRestoration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
103 | /// - SeeAlso: ``CBMPeripheralManagerRestoredStateServicesKey``
104 | /// - SeeAlso: ``CBMPeripheralManagerRestoredStateAdvertisementDataKey``
105 | public static var simulateStateRestoration: ((_ identifierKey: String) -> [String : Any]?)?
| |- warning: static property 'simulateStateRestoration' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'simulateStateRestoration' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'simulateStateRestoration' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
106 |
107 | public init() {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:204:31: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
202 | guard !alreadyAdvertising else {
203 | queue.async { [weak self] in
204 | if let self = self {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
205 | self.delegate?.peripheralManagerDidStartAdvertising(self, error: CBMError(.alreadyAdvertising))
206 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:219:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
217 |
218 | queue.async { [weak self] in
219 | guard let self = self, self.state == .poweredOn else {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
220 | return
221 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:377:34: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
375 | queue.asyncAfter(deadline: .now() + spec.connectionInterval) { [weak self] in
376 | defer { delivery.leave() }
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:377:66: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
375 | queue.asyncAfter(deadline: .now() + spec.connectionInterval) { [weak self] in
376 | defer { delivery.leave() }
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:379:37: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
380 | }) else {
381 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:379:74: warning: capture of 'central' with non-sendable type 'CBMCentralMock' in a '@Sendable' closure
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
| `- warning: capture of 'central' with non-sendable type 'CBMCentralMock' in a '@Sendable' closure
380 | }) else {
381 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMCentral.swift:90:14: note: class 'CBMCentralMock' does not conform to the 'Sendable' protocol
88 | /// Each mock central is based on a ``CBMCentralSpec`` which is used to simulate the
89 | /// central's behavior.
90 | public class CBMCentralMock: CBMCentral {
| `- note: class 'CBMCentralMock' does not conform to the 'Sendable' protocol
91 | /// The specification of the simulated central.
92 | internal let spec: CBMCentralSpec
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:379:37: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
380 | }) else {
381 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:379:74: warning: capture of 'central' with non-sendable type 'CBMCentralMock' in an isolated closure; this is an error in the Swift 6 language mode
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
| `- warning: capture of 'central' with non-sendable type 'CBMCentralMock' in an isolated closure; this is an error in the Swift 6 language mode
380 | }) else {
381 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMCentral.swift:90:14: note: class 'CBMCentralMock' does not conform to the 'Sendable' protocol
88 | /// Each mock central is based on a ``CBMCentralSpec`` which is used to simulate the
89 | /// central's behavior.
90 | public class CBMCentralMock: CBMCentral {
| `- note: class 'CBMCentralMock' does not conform to the 'Sendable' protocol
91 | /// The specification of the simulated central.
92 | internal let spec: CBMCentralSpec
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:379:74: warning: implicit capture of 'central' requires that 'CBMCentralMock' conforms to 'Sendable'; this is an error in the Swift 6 language mode
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
| `- warning: implicit capture of 'central' requires that 'CBMCentralMock' conforms to 'Sendable'; this is an error in the Swift 6 language mode
380 | }) else {
381 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMCentral.swift:90:14: note: class 'CBMCentralMock' does not conform to the 'Sendable' protocol
88 | /// Each mock central is based on a ``CBMCentralSpec`` which is used to simulate the
89 | /// central's behavior.
90 | public class CBMCentralMock: CBMCentral {
| `- note: class 'CBMCentralMock' does not conform to the 'Sendable' protocol
91 | /// The specification of the simulated central.
92 | internal let spec: CBMCentralSpec
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:379:87: warning: implicit capture of 'characteristic' requires that 'CBMMutableCharacteristic' conforms to 'Sendable'; this is an error in the Swift 6 language mode
377 | guard let self = self, self.state == .poweredOn, spec.isConnected,
378 | self.mutex.sync(execute: {
379 | self.owns(characteristic) && self.isSubscribed(central, to: characteristic)
| `- warning: implicit capture of 'characteristic' requires that 'CBMMutableCharacteristic' conforms to 'Sendable'; this is an error in the Swift 6 language mode
380 | }) else {
381 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:415:27: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
413 | NSLog("[CoreBluetoothMock] L2CAP channels are not implemented in the mock. Publishing a channel failed.")
414 | queue.async { [weak self] in
415 | if let self = self, self.state == .poweredOn {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
416 | self.delegate?.peripheralManager(self,
417 | didPublishL2CAPChannel: 0,
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:429:27: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
427 | NSLog("[CoreBluetoothMock] L2CAP channels are not implemented in the mock. Unpublishing channel with PSM \(PSM) failed.")
428 | queue.async { [weak self] in
429 | if let self = self, self.state == .poweredOn {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
430 | self.delegate?.peripheralManager(self,
431 | didUnpublishL2CAPChannel: PSM,
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:449:20: warning: capture of 'manager' with non-sendable type 'CBMPeripheralManagerMock' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
447 | self.existingManagers.forEach { manager in
448 | manager.queue.async {
449 | if manager.state != .poweredOn {
| `- warning: capture of 'manager' with non-sendable type 'CBMPeripheralManagerMock' in a '@Sendable' closure
450 | // ...stop advertising and remove all services if state changed
451 | // to any other state than `.poweredOn`.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:510:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
508 | didSubscribeTo characteristic: CBMMutableCharacteristic) {
509 | queue.asyncAfter(deadline: .now() + spec.connectionInterval) { [weak self] in
510 | guard let self = self, self.state == .poweredOn, spec.isConnected else {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
511 | NSLog("Warning: Central \(spec.identifier) is not connected")
512 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:510:62: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
508 | didSubscribeTo characteristic: CBMMutableCharacteristic) {
509 | queue.asyncAfter(deadline: .now() + spec.connectionInterval) { [weak self] in
510 | guard let self = self, self.state == .poweredOn, spec.isConnected else {
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
511 | NSLog("Warning: Central \(spec.identifier) is not connected")
512 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:515:33: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
513 | }
514 | let subscribedCentral: CBMCentralMock? = self.mutex.sync {
515 | guard self.owns(characteristic) else {
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
516 | return nil
517 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:515:33: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
513 | }
514 | let subscribedCentral: CBMCentralMock? = self.mutex.sync {
515 | guard self.owns(characteristic) else {
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
516 | return nil
517 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:518:49: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
516 | return nil
517 | }
518 | let central = self.central(for: spec)
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
519 | guard !self.isSubscribed(central, to: characteristic) else {
520 | return nil
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:537:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
535 | didUnsubscribeFrom characteristic: CBMMutableCharacteristic) {
536 | queue.asyncAfter(deadline: .now() + spec.connectionInterval) { [weak self] in
537 | guard let self = self, self.state == .poweredOn, spec.isConnected else {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
538 | NSLog("Warning: Central \(spec.identifier) is not connected")
539 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:537:62: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
535 | didUnsubscribeFrom characteristic: CBMMutableCharacteristic) {
536 | queue.asyncAfter(deadline: .now() + spec.connectionInterval) { [weak self] in
537 | guard let self = self, self.state == .poweredOn, spec.isConnected else {
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
538 | NSLog("Warning: Central \(spec.identifier) is not connected")
539 | return
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:542:33: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
540 | }
541 | let unsubscribedCentral: CBMCentralMock? = self.mutex.sync {
542 | guard self.owns(characteristic),
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
543 | let central = self.centrals[spec.identifier],
544 | self.isSubscribed(central, to: characteristic) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:542:33: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
540 | }
541 | let unsubscribedCentral: CBMCentralMock? = self.mutex.sync {
542 | guard self.owns(characteristic),
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
543 | let central = self.centrals[spec.identifier],
544 | self.isSubscribed(central, to: characteristic) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:543:51: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
541 | let unsubscribedCentral: CBMCentralMock? = self.mutex.sync {
542 | guard self.owns(characteristic),
543 | let central = self.centrals[spec.identifier],
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
544 | self.isSubscribed(central, to: characteristic) else {
545 | return nil
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:565:17: warning: capture of 'completion' with non-sendable type '(Result<Data, any Error>) -> Void' in a '@Sendable' closure
563 | let reply: (Result<Data, Error>) -> Void = { result in
564 | queue.asyncAfter(deadline: .now() + interval) {
565 | completion(result)
| |- warning: capture of 'completion' with non-sendable type '(Result<Data, any Error>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
566 | }
567 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:602:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
600 | }
601 | queue.asyncAfter(deadline: .now() + interval) { [weak self] in
602 | guard let self = self, self.state == .poweredOn, spec.isConnected,
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
603 | self.mutex.sync(execute: { () -> Bool in
604 | guard self.owns(characteristic) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:602:62: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
600 | }
601 | queue.asyncAfter(deadline: .now() + interval) { [weak self] in
602 | guard let self = self, self.state == .poweredOn, spec.isConnected,
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
603 | self.mutex.sync(execute: { () -> Bool in
604 | guard self.owns(characteristic) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:604:39: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
602 | guard let self = self, self.state == .poweredOn, spec.isConnected,
603 | self.mutex.sync(execute: { () -> Bool in
604 | guard self.owns(characteristic) else {
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
605 | return false
606 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:607:51: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in a '@Sendable' closure
605 | return false
606 | }
607 | self.pendingRequests.append(request)
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in a '@Sendable' closure
608 | return true
609 | }) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:610:17: warning: capture of 'reply' with non-sendable type '(Result<Data, any Error>) -> Void' in a '@Sendable' closure
608 | return true
609 | }) else {
610 | reply(.failure(CBMError(.notConnected)))
| |- warning: capture of 'reply' with non-sendable type '(Result<Data, any Error>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
611 | return
612 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:604:39: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
602 | guard let self = self, self.state == .poweredOn, spec.isConnected,
603 | self.mutex.sync(execute: { () -> Bool in
604 | guard self.owns(characteristic) else {
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
605 | return false
606 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:607:51: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
605 | return false
606 | }
607 | self.pendingRequests.append(request)
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
608 | return true
609 | }) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:627:17: warning: capture of 'withResponseCompletion' with non-sendable type '((Result<Void, any Error>) -> Void)?' in a '@Sendable' closure
625 | let reply: (Result<Void, Error>) -> Void = { result in
626 | queue.asyncAfter(deadline: .now() + interval) {
627 | withResponseCompletion?(result)
| |- warning: capture of 'withResponseCompletion' with non-sendable type '((Result<Void, any Error>) -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
628 | }
629 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:671:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
669 | } : nil)
670 | queue.asyncAfter(deadline: .now() + interval) { [weak self] in
671 | guard let self = self, self.state == .poweredOn, spec.isConnected,
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
672 | self.mutex.sync(execute: { () -> Bool in
673 | guard self.owns(characteristic) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:671:62: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
669 | } : nil)
670 | queue.asyncAfter(deadline: .now() + interval) { [weak self] in
671 | guard let self = self, self.state == .poweredOn, spec.isConnected,
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
672 | self.mutex.sync(execute: { () -> Bool in
673 | guard self.owns(characteristic) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:673:39: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
671 | guard let self = self, self.state == .poweredOn, spec.isConnected,
672 | self.mutex.sync(execute: { () -> Bool in
673 | guard self.owns(characteristic) else {
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in a '@Sendable' closure
674 | return false
675 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:677:55: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in a '@Sendable' closure
675 | }
676 | if isWithResponse {
677 | self.pendingRequests.append(request)
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in a '@Sendable' closure
678 | }
679 | return true
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:682:21: warning: capture of 'reply' with non-sendable type '(Result<Void, any Error>) -> Void' in a '@Sendable' closure
680 | }) else {
681 | if isWithResponse {
682 | reply(.failure(CBMError(.notConnected)))
| |- warning: capture of 'reply' with non-sendable type '(Result<Void, any Error>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
683 | } else {
684 | NSLog("[CoreBluetoothMock] Write command to characteristic \(characteristic.uuid) dropped: not connected")
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:673:39: warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
671 | guard let self = self, self.state == .poweredOn, spec.isConnected,
672 | self.mutex.sync(execute: { () -> Bool in
673 | guard self.owns(characteristic) else {
| `- warning: capture of 'characteristic' with non-sendable type 'CBMMutableCharacteristic' in an isolated closure; this is an error in the Swift 6 language mode
674 | return false
675 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:89:12: note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
87 | /// characteristic must be read-only. Read requests for such characteristics are handled
88 | /// automatically without calling the peripheral manager's delegate.
89 | open class CBMMutableCharacteristic: CBMCharacteristic {
| `- note: class 'CBMMutableCharacteristic' does not conform to the 'Sendable' protocol
90 |
91 | /// The permissions of the characteristic value.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:677:55: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
675 | }
676 | if isWithResponse {
677 | self.pendingRequests.append(request)
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
678 | }
679 | return true
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:724:27: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
722 | private func initialize() {
723 | queue.async { [weak self] in
724 | if let self = self {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
725 | CBMPeripheralManagerMock.mutex.sync {
726 | CBMPeripheralManagerMock.managers.append(WeakRef(self))
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:747:27: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
745 | private func notifyDidAddServiceCallback(_ service: CBMMutableService, error: Error?) {
746 | queue.async { [weak self] in
747 | if let self = self, self.state == .poweredOn {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
748 | self.delegate?.peripheralManager(self, didAdd: service, error: error)
749 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:748:64: warning: capture of 'service' with non-sendable type 'CBMMutableService' in a '@Sendable' closure
746 | queue.async { [weak self] in
747 | if let self = self, self.state == .poweredOn {
748 | self.delegate?.peripheralManager(self, didAdd: service, error: error)
| `- warning: capture of 'service' with non-sendable type 'CBMMutableService' in a '@Sendable' closure
749 | }
750 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/CBMMutableAttributes.swift:38:12: note: class 'CBMMutableService' does not conform to the 'Sendable' protocol
36 | /// ``CBMPeripheralManager``. The characteristics of a mutable service must be
37 | /// ``CBMMutableCharacteristic`` objects.
38 | open class CBMMutableService: CBMService {
| `- note: class 'CBMMutableService' does not conform to the 'Sendable' protocol
39 |
40 | /// A list of included services.
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:756:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
754 | private func scheduleTimeout(of request: CBMATTRequestMock, for spec: CBMCentralSpec) {
755 | queue.asyncAfter(deadline: .now() + spec.attributeProtocolTimeout) { [weak self] in
756 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
757 | let isPending: Bool = self.mutex.sync {
758 | guard let index = self.pendingRequests.firstIndex(where: { $0 === request }) else {
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:758:83: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in a '@Sendable' closure
756 | guard let self = self else { return }
757 | let isPending: Bool = self.mutex.sync {
758 | guard let index = self.pendingRequests.firstIndex(where: { $0 === request }) else {
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in a '@Sendable' closure
759 | return false
760 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:758:83: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
756 | guard let self = self else { return }
757 | let isPending: Bool = self.mutex.sync {
758 | guard let index = self.pendingRequests.firstIndex(where: { $0 === request }) else {
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
759 | return false
760 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:758:83: warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
756 | guard let self = self else { return }
757 | let isPending: Bool = self.mutex.sync {
758 | guard let index = self.pendingRequests.firstIndex(where: { $0 === request }) else {
| `- warning: capture of 'request' with non-sendable type 'CBMATTRequestMock' in an isolated closure; this is an error in the Swift 6 language mode
759 | return false
760 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMATTRequest.swift:117:14: note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
115 | /// Such requests are created when a mock central, defined using ``CBMCentralSpec``,
116 | /// reads or writes a characteristic value.
117 | public class CBMATTRequestMock: CBMATTRequest {
| `- note: class 'CBMATTRequestMock' does not conform to the 'Sendable' protocol
118 | private let _central: CBMCentral
119 | private let _characteristic: CBMCharacteristic
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:830:30: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
38 | /// ``CBMCentralManagerMock/simulatePowerOn()``, ``CBMCentralManagerMock/simulatePowerOff()``
39 | /// and other simulation methods.
40 | open class CBMPeripheralManagerMock: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerMock' does not conform to the 'Sendable' protocol
41 | private static var managers: [WeakRef<CBMPeripheralManagerMock>] = []
42 | private static var centrals: [WeakRef<CBMCentralSpec>] = []
:
828 | private func central(didDisconnect spec: CBMCentralSpec) {
829 | queue.async { [weak self] in
830 | guard let self = self else {
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerMock?' in a '@Sendable' closure
831 | return
832 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:836:71: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
834 | let disconnected: (central: CBMCentralMock,
835 | characteristics: [CBMMutableCharacteristic])? = self.mutex.sync {
836 | guard let central = self.centrals.removeValue(forKey: spec.identifier) else {
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in a '@Sendable' closure
837 | return nil
838 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:836:71: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
834 | let disconnected: (central: CBMCentralMock,
835 | characteristics: [CBMMutableCharacteristic])? = self.mutex.sync {
836 | guard let central = self.centrals.removeValue(forKey: spec.identifier) else {
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
837 | return nil
838 | }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:839:90: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
837 | return nil
838 | }
839 | abortedRequests = self.pendingRequests.filter { $0.central.identifier == spec.identifier }
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
840 | self.pendingRequests.removeAll { $0.central.identifier == spec.identifier }
841 | let characteristics = self.services
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerMock.swift:840:75: warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
838 | }
839 | abortedRequests = self.pendingRequests.filter { $0.central.identifier == spec.identifier }
840 | self.pendingRequests.removeAll { $0.central.identifier == spec.identifier }
| `- warning: capture of 'spec' with non-sendable type 'CBMCentralSpec' in an isolated closure; this is an error in the Swift 6 language mode
841 | let characteristics = self.services
842 | .flatMap { $0.characteristics ?? [] }
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CentralPeer/CBMCentralSpec.swift:46:14: note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
44 | /// Notifications and indications sent by the peripheral manager are delivered
45 | /// to the ``CBMCentralSpec/delegate``.
46 | public class CBMCentralSpec {
| `- note: class 'CBMCentralSpec' does not conform to the 'Sendable' protocol
47 | /// The central identifier.
48 | public let identifier: UUID
/Users/admin/builder/spi-builder-workspace/CoreBluetoothMock/Peripheral/CBMPeripheralManagerNative.swift:157:11: warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerNative?' in a '@Sendable' closure
32 | import CoreBluetooth
33 |
34 | public class CBMPeripheralManagerNative: CBMPeripheralManager {
| `- note: class 'CBMPeripheralManagerNative' does not conform to the 'Sendable' protocol
35 | private var observation: NSKeyValueObservation?
36 | @objc dynamic private var manager: CBPeripheralManager!
:
155 | observation = observe(\.manager?.isAdvertising, options: [.new]) { [weak self] _, change in
156 | if let new = change.newValue ?? nil {
157 | self?.isAdvertising = new
| `- warning: capture of 'self' with non-sendable type 'CBMPeripheralManagerNative?' in a '@Sendable' closure
158 | }
159 | }
[23/33] Compiling CoreBluetoothMock CBMCentralSpec.swift
[24/33] Compiling CoreBluetoothMock CBMCentralSpecDelegate.swift
[25/33] Compiling CoreBluetoothMock CBMPeripheralSpec.swift
[26/33] Compiling CoreBluetoothMock CBMPeripheralSpecDelegate.swift
[27/33] Compiling CoreBluetoothMock CBMATTRequest.swift
[28/33] Compiling CoreBluetoothMock CBMPeripheralPreview.swift
[29/33] Compiling CoreBluetoothMock CBMCentralManager.swift
[30/33] Compiling CoreBluetoothMock CBMCentralManagerDelegate.swift
[31/33] Compiling CoreBluetoothMock CBMMutableAttributes.swift
[32/33] Compiling CoreBluetoothMock CBMPeer.swift
[33/33] Compiling CoreBluetoothMock CBMPeripheral.swift
Build complete! (22.80s)
Fetching https://github.com/apple/swift-docc-plugin
[1/2345] Fetching swift-docc-plugin
Fetched https://github.com/apple/swift-docc-plugin from cache (1.55s)
Computing version for https://github.com/apple/swift-docc-plugin
Computed https://github.com/apple/swift-docc-plugin at 1.5.0 (5.04s)
Fetching https://github.com/swiftlang/swift-docc-symbolkit from cache
Fetched https://github.com/swiftlang/swift-docc-symbolkit from cache (1.07s)
Computing version for https://github.com/swiftlang/swift-docc-symbolkit
Computed https://github.com/swiftlang/swift-docc-symbolkit at 1.0.0 (1.78s)
Creating working copy for https://github.com/apple/swift-docc-plugin
Working copy of https://github.com/apple/swift-docc-plugin resolved at 1.5.0
Creating working copy for https://github.com/swiftlang/swift-docc-symbolkit
Working copy of https://github.com/swiftlang/swift-docc-symbolkit resolved at 1.0.0
Build complete.
{
"dependencies" : [
{
"identity" : "swift-docc-plugin",
"requirement" : {
"range" : [
{
"lower_bound" : "1.5.0",
"upper_bound" : "2.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/apple/swift-docc-plugin"
}
],
"manifest_display_name" : "CoreBluetoothMock",
"name" : "CoreBluetoothMock",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "macos",
"version" : "10.14"
},
{
"name" : "ios",
"version" : "12.0"
},
{
"name" : "watchos",
"version" : "9.0"
},
{
"name" : "tvos",
"version" : "12.0"
}
],
"products" : [
{
"name" : "CoreBluetoothMock",
"targets" : [
"CoreBluetoothMock"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"swift_languages_versions" : [
"5"
],
"targets" : [
{
"c99name" : "CoreBluetoothMock",
"module_type" : "SwiftTarget",
"name" : "CoreBluetoothMock",
"path" : "CoreBluetoothMock",
"product_memberships" : [
"CoreBluetoothMock"
],
"sources" : [
"CBMAttributes.swift",
"CBMDictionary.swift",
"CBMManagerTypes.swift",
"CBMMutableAttributes.swift",
"CBMPeer.swift",
"CBMPeripheral.swift",
"CBMPeripheralPreview.swift",
"Central/CBMCentralManager.swift",
"Central/CBMCentralManagerDelegate.swift",
"Central/CBMCentralManagerDelegateProxy.swift",
"Central/CBMCentralManagerFactory.swift",
"Central/CBMCentralManagerMock.swift",
"Central/CBMCentralManagerNative.swift",
"Central/CBMPeripheralDelegate.swift",
"Central/CBMPeripheralDelegateProxy.swift",
"Central/PeripheralPeer/CBMPeripheralSpec.swift",
"Central/PeripheralPeer/CBMPeripheralSpecDelegate.swift",
"Peripheral/CBMATTRequest.swift",
"Peripheral/CBMCentral.swift",
"Peripheral/CBMPeripheralManager.swift",
"Peripheral/CBMPeripheralManagerDelegate.swift",
"Peripheral/CBMPeripheralManagerFactory.swift",
"Peripheral/CBMPeripheralManagerMock.swift",
"Peripheral/CBMPeripheralManagerNative.swift",
"Peripheral/CentralPeer/CBMCentralSpec.swift",
"Peripheral/CentralPeer/CBMCentralSpecDelegate.swift",
"Specs/Blinky.swift",
"Specs/UART.swift"
],
"type" : "library"
}
],
"tools_version" : "5.9"
}
Done.