Build Information
Successful build of BLESwift, reference 3.1.0 (b00ece), with Swift 6.4 for macOS (SPM) on 2 Nov 2026 12:13:01 UTC.
Swift 6 data race errors: 0
Build Command
env DEVELOPER_DIR=/Applications/Xcode-27.0.0.app xcrun swift build --arch arm64Build Log
========================================
RunAll
========================================
Builder version: 5.1.4
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/kylebrowning/BLESwift.git
Reference: 3.1.0
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/kylebrowning/BLESwift
* tag 3.1.0 -> FETCH_HEAD
HEAD is now at b00ece9 Release 3.1.0: the virtual radio as its own product, on every platform (#90)
Cloned https://github.com/kylebrowning/BLESwift.git
Revision (git rev-parse @):
b00ece985e527db31188ba375c8686678d56700f
SPI manifest file found: $PWD/.spi.yml
SUCCESS checkout https://github.com/kylebrowning/BLESwift.git at 3.1.0
Fetching https://github.com/swiftlang/swift-docc-symbolkit
Fetching https://github.com/apple/swift-log.git
Fetching https://github.com/swiftlang/swift-docc-plugin
[1/8315] Fetching swift-log
[2/10660] Fetching swift-log, swift-docc-plugin
[1960/14510] Fetching swift-log, swift-docc-plugin, swift-docc-symbolkit
Fetched https://github.com/apple/swift-log.git (1.68s)
Fetched https://github.com/swiftlang/swift-docc-symbolkit (1.68s)
Fetched https://github.com/swiftlang/swift-docc-plugin (1.68s)
Computing version for https://github.com/apple/swift-log.git
Computed https://github.com/apple/swift-log.git at 1.14.0 (2.32s)
Computing version for https://github.com/swiftlang/swift-docc-plugin
Computed https://github.com/swiftlang/swift-docc-plugin at 1.5.0 (10.04s)
Computing version for https://github.com/swiftlang/swift-docc-symbolkit
Computed https://github.com/swiftlang/swift-docc-symbolkit at 1.0.0 (0.73s)
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
Creating working copy for https://github.com/swiftlang/swift-docc-plugin
Working copy of https://github.com/swiftlang/swift-docc-plugin resolved at 1.5.0
Creating working copy for https://github.com/apple/swift-log.git
Working copy of https://github.com/apple/swift-log.git resolved at 1.14.0
========================================
ResolveProductDependencies
========================================
Resolving dependencies ...
{
"identity": ".resolve-product-dependencies",
"name": "resolve-dependencies",
"url": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
"version": "unspecified",
"path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
"traits": [
"default"
],
"dependencies": [
{
"identity": "bleswift",
"name": "BLESwift",
"url": "https://github.com/kylebrowning/BLESwift.git",
"version": "unspecified",
"path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/BLESwift",
"traits": [
"default"
],
"dependencies": [
{
"identity": "swift-log",
"name": "swift-log",
"url": "https://github.com/apple/swift-log.git",
"version": "1.16.2",
"path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/swift-log",
"traits": [
],
"dependencies": [
]
}
]
}
]
}
Fetching https://github.com/kylebrowning/BLESwift.git
[1/3742] Fetching bleswift
Fetched https://github.com/kylebrowning/BLESwift.git (1.70s)
Fetching https://github.com/apple/swift-log.git from cache
Fetched https://github.com/apple/swift-log.git from cache (0.66s)
Computing version for https://github.com/apple/swift-log.git
Computed https://github.com/apple/swift-log.git at 1.16.2 (1.29s)
Creating working copy for https://github.com/apple/swift-log.git
Working copy of https://github.com/apple/swift-log.git resolved at 1.16.2
Creating working copy for https://github.com/kylebrowning/BLESwift.git
Working copy of https://github.com/kylebrowning/BLESwift.git resolved at 3.1.0 (b00ece9)
Found 1 product dependencies
- swift-log
========================================
Build
========================================
Selected platform: macosSpm
Swift version: 6.4
Building package at path: $PWD
https://github.com/kylebrowning/BLESwift.git
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-27.0.0.app xcrun swift build --arch arm64
Building for debugging...
[Computing dependencies]
[Pre-planning 1 / 879]
[Planning deferred tasks]
[180 / 324] BLESwift_BLESwiftProfiles
[218 / 324] BLESwift_BLESwiftCore
[221 / 324]
[224 / 327] Logging
[233 / 354]
[235 / 354]
[241 / 390]
[248 / 390]
[251 / 390]
[261 / 390] Logging
[262 / 390]
[265 / 390] Logging
[272 / 390]
[274 / 390]
[279 / 390] Logging
[283 / 390]
[285 / 390]
[286 / 390]
[295 / 390] BLESwiftCompat17
[308 / 391] BLESwiftCompat16
[308 / 391] BLESwiftCore
[316 / 402] BLESwiftCore
[325 / 402] BLESwiftCore
[332 / 405] BLESwiftCompat17
[332 / 405] BLESwiftCore
[345 / 427]
[347 / 439]
[352 / 439] BLESwift
[362 / 439] BLESwiftTestSupport-product
[369 / 439] BLESwiftLink
[371 / 439] BLESwift
[386 / 439] BLESwift
[388 / 439] BLESwift
[390 / 440]
[393 / 442] BLESwift
[393 / 442] BLESwiftLink
[404 / 461] BLESwiftSimulatorLink
[405 / 472] BLESwiftProfiles
[408 / 472] BLESwiftVirtualRadio
[424 / 472] BLESwiftVirtualRadio-product
[432 / 472] BLESwiftSimulatorLink-product
[434 / 472] BLESwiftProvider
[437 / 472] BLESwiftProfiles-product
[441 / 472] BLESwiftProfiles
[446 / 473]
[451 / 473] BLESwiftSimulatorLink-product
[452 / 473] BLESwiftProvider
[462 / 484] BLESwiftProvider
[465 / 484] BLESwiftProvider
[477 / 485] BLESwiftProvider
[482 / 487] bleswift-provider-product
[485 / 487] bleswift-provider-product
Build complete! (12.83 sec)
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/swiftlang/swift-docc-plugin"
},
{
"identity" : "swift-log",
"requirement" : {
"range" : [
{
"lower_bound" : "1.6.0",
"upper_bound" : "2.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/apple/swift-log.git"
}
],
"manifest_display_name" : "BLESwift",
"name" : "BLESwift",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "ios",
"version" : "16.0"
},
{
"name" : "macos",
"version" : "13.0"
},
{
"name" : "watchos",
"version" : "9.0"
},
{
"name" : "tvos",
"version" : "16.0"
},
{
"name" : "visionos",
"version" : "1.0"
}
],
"products" : [
{
"name" : "BLESwift",
"targets" : [
"BLESwift"
],
"type" : {
"library" : [
"automatic"
]
}
},
{
"name" : "BLESwiftCore",
"targets" : [
"BLESwiftCore"
],
"type" : {
"library" : [
"automatic"
]
}
},
{
"name" : "BLESwiftProfiles",
"targets" : [
"BLESwiftProfiles"
],
"type" : {
"library" : [
"automatic"
]
}
},
{
"name" : "BLESwiftTestSupport",
"targets" : [
"BLESwiftTestSupport"
],
"type" : {
"library" : [
"automatic"
]
}
},
{
"name" : "BLESwiftLink",
"targets" : [
"BLESwiftLink"
],
"type" : {
"library" : [
"automatic"
]
}
},
{
"name" : "BLESwiftSimulatorLink",
"targets" : [
"BLESwiftSimulatorLink"
],
"type" : {
"library" : [
"automatic"
]
}
},
{
"name" : "BLESwiftVirtualRadio",
"targets" : [
"BLESwiftVirtualRadio"
],
"type" : {
"library" : [
"automatic"
]
}
},
{
"name" : "BLESwiftProvider",
"targets" : [
"BLESwiftProvider"
],
"type" : {
"library" : [
"automatic"
]
}
},
{
"name" : "bleswift-provider",
"targets" : [
"bleswift-provider"
],
"type" : {
"executable" : null
}
}
],
"targets" : [
{
"c99name" : "bleswift_provider",
"module_type" : "SwiftTarget",
"name" : "bleswift-provider",
"path" : "Sources/bleswift-provider",
"product_memberships" : [
"bleswift-provider"
],
"sources" : [
"main.swift"
],
"target_dependencies" : [
"BLESwiftProvider"
],
"type" : "executable"
},
{
"c99name" : "BLESwiftVirtualRadioTests",
"module_type" : "SwiftTarget",
"name" : "BLESwiftVirtualRadioTests",
"path" : "Tests/BLESwiftVirtualRadioTests",
"sources" : [
"FaultInjectionTests.swift",
"InProcessTests.swift",
"LatencyTests.swift",
"ManualClockTests.swift",
"RecordingDevice.swift",
"ReportOrderTests.swift",
"ReregistrationTests.swift",
"WriteLengthTests.swift"
],
"target_dependencies" : [
"BLESwift",
"BLESwiftCore",
"BLESwiftTestSupport",
"BLESwiftVirtualRadio"
],
"type" : "test"
},
{
"c99name" : "BLESwiftVirtualRadio",
"module_type" : "SwiftTarget",
"name" : "BLESwiftVirtualRadio",
"path" : "Sources/BLESwiftVirtualRadio",
"product_dependencies" : [
"Logging"
],
"product_memberships" : [
"BLESwiftVirtualRadio",
"BLESwiftProvider",
"bleswift-provider"
],
"resources" : [
{
"path" : "/Users/admin/builder/spi-builder-workspace/Sources/BLESwiftVirtualRadio/BLESwiftVirtualRadio.docc",
"rule" : {
"copy" : {
}
}
}
],
"sources" : [
"FixtureDeviceHandler.swift",
"VirtualCentralBackend.swift",
"VirtualDevice.swift",
"VirtualGATTOperations.swift",
"VirtualLatency.swift",
"VirtualPeripheralManagerBackend.swift",
"VirtualPeripheralRemote.swift",
"VirtualRadio+Faults.swift",
"VirtualRadio+Install.swift",
"VirtualRadio.swift"
],
"target_dependencies" : [
"BLESwiftCompat17",
"BLESwiftCore",
"BLESwiftLink"
],
"type" : "library"
},
{
"c99name" : "BLESwiftTests",
"module_type" : "SwiftTarget",
"name" : "BLESwiftTests",
"path" : "Tests/BLESwiftTests",
"sources" : [
"ANCSTests.swift",
"AdvertisementDataTests.swift",
"BLESwiftErrorTests.swift",
"BroadcasterTests.swift",
"CentralTests.swift",
"CharacteristicPropertiesTests.swift",
"ChunkedWriteTests.swift",
"CompatibilityTests.swift",
"CompositeTests.swift",
"ConcurrentConnectRegressionTests.swift",
"ConnectionEventsTests.swift",
"ConnectionTests.swift",
"CoreBluetoothBridgingTests.swift",
"CrossRoleEndToEndTests.swift",
"DataExtractionTests.swift",
"DelegateProxyHandlerTests.swift",
"DescriptorTests.swift",
"ExecutorSelectionTests.swift",
"FakesSmokeTests.swift",
"GATTAssignedNumbersTests.swift",
"GATTEnumerationTests.swift",
"GATTTests.swift",
"IdentifierTests.swift",
"L2CAPTests.swift",
"MultiPeripheralGATTIsolationTests.swift",
"NotificationReconnectTests.swift",
"NotificationTests.swift",
"PeripheralDisconnectTests.swift",
"PeripheralHostCancellationTests.swift",
"PeripheralHostRestorationTests.swift",
"PeripheralHostTests.swift",
"PrimitiveRoundTripTests.swift",
"ProfilesPeripheralTests.swift",
"ProfilesTests.swift",
"RestorationTests.swift",
"RetrievalTests.swift",
"ScanFilterTests.swift",
"ScanTests.swift",
"ServiceChangesRegistryTests.swift",
"TestHelpers.swift",
"ThrowingBroadcasterTests.swift"
],
"target_dependencies" : [
"BLESwiftCompat16",
"BLESwiftCompat17",
"BLESwift",
"BLESwiftCore",
"BLESwiftProfiles",
"BLESwiftTestSupport"
],
"type" : "test"
},
{
"c99name" : "BLESwiftTestSupport",
"module_type" : "SwiftTarget",
"name" : "BLESwiftTestSupport",
"path" : "Sources/BLESwiftTestSupport",
"product_memberships" : [
"BLESwiftTestSupport"
],
"resources" : [
{
"path" : "/Users/admin/builder/spi-builder-workspace/Sources/BLESwiftTestSupport/BLESwiftTestSupport.docc",
"rule" : {
"copy" : {
}
}
}
],
"sources" : [
"FakeCentral.swift",
"FakeGATTBridge.swift",
"FakeL2CAPChannel.swift",
"FakePeripheral.swift",
"FakePeripheralManager.swift",
"FakeStartupBackgroundTask.swift",
"ManualClock.swift"
],
"target_dependencies" : [
"BLESwiftCompat17",
"BLESwiftCore"
],
"type" : "library"
},
{
"c99name" : "BLESwiftSimulatorLink",
"module_type" : "SwiftTarget",
"name" : "BLESwiftSimulatorLink",
"path" : "Sources/BLESwiftSimulatorLink",
"product_dependencies" : [
"Logging"
],
"product_memberships" : [
"BLESwiftSimulatorLink"
],
"resources" : [
{
"path" : "/Users/admin/builder/spi-builder-workspace/Sources/BLESwiftSimulatorLink/BLESwiftSimulatorLink.docc",
"rule" : {
"copy" : {
}
}
}
],
"sources" : [
"LinkCentral.swift",
"LinkClientSession.swift",
"LinkL2CAPChannel.swift",
"LinkPeripheral.swift",
"LinkPeripheralManager.swift",
"SimulatorLink.swift"
],
"target_dependencies" : [
"BLESwiftCompat17",
"BLESwiftCore",
"BLESwiftLink"
],
"type" : "library"
},
{
"c99name" : "BLESwiftProvider",
"module_type" : "SwiftTarget",
"name" : "BLESwiftProvider",
"path" : "Sources/BLESwiftProvider",
"product_dependencies" : [
"Logging"
],
"product_memberships" : [
"BLESwiftProvider",
"bleswift-provider"
],
"resources" : [
{
"path" : "/Users/admin/builder/spi-builder-workspace/Sources/BLESwiftProvider/BLESwiftProvider.docc",
"rule" : {
"copy" : {
}
}
}
],
"sources" : [
"Composite/CompositeCentral.swift",
"Composite/CompositePeripheralManager.swift",
"CoreBluetoothBackends.swift",
"Exports.swift",
"HeldMessageSize.swift",
"Provider.swift",
"ProviderCommandLine.swift",
"ProviderConfiguration.swift",
"Sessions/CentralSession+L2CAP.swift",
"Sessions/CentralSession.swift",
"Sessions/HostSession.swift"
],
"target_dependencies" : [
"BLESwiftCompat17",
"BLESwift",
"BLESwiftLink",
"BLESwiftVirtualRadio"
],
"type" : "library"
},
{
"c99name" : "BLESwiftProfiles",
"module_type" : "SwiftTarget",
"name" : "BLESwiftProfiles",
"path" : "Sources/BLESwiftProfiles",
"product_memberships" : [
"BLESwiftProfiles"
],
"resources" : [
{
"path" : "/Users/admin/builder/spi-builder-workspace/Sources/BLESwiftProfiles/BLESwiftProfiles.docc",
"rule" : {
"copy" : {
}
}
}
],
"sources" : [
"BatteryLevel.swift",
"BodySensorLocation.swift",
"CSCMeasurement.swift",
"CurrentTime.swift",
"CyclingPowerMeasurement.swift",
"DeviceInformation.swift",
"GATTDateTime.swift",
"HeartRateMeasurement.swift",
"IEEE11073Float.swift",
"Peripheral+Profiles.swift",
"TemperatureMeasurement.swift"
],
"target_dependencies" : [
"BLESwift"
],
"type" : "library"
},
{
"c99name" : "BLESwiftLinkTests",
"module_type" : "SwiftTarget",
"name" : "BLESwiftLinkTests",
"path" : "Tests/BLESwiftLinkTests",
"sources" : [
"BackendRegistrySerializedTests.swift",
"CentralEndToEndTests.swift",
"CentralSessionLimitsTests.swift",
"CompositeBackendTests.swift",
"FixtureTests.swift",
"HostEndToEndTests.swift",
"HostSessionLimitsTests.swift",
"L2CAPLinkTests.swift",
"LinkCentralTests.swift",
"LinkClientSessionTests.swift",
"LinkCodecTests.swift",
"LinkEndpointTests.swift",
"LinkFramingTests.swift",
"LinkPeripheralManagerTests.swift",
"LinkPeripheralTests.swift",
"LinkTestHelpers.swift",
"ParityTests.swift",
"PassthroughWiringTests.swift",
"ProviderBacklogTests.swift",
"ProviderCommandLineTests.swift",
"ProviderLifecycleTests.swift",
"TransportLoopbackTests.swift",
"VirtualPeripheralManagerTests.swift",
"VirtualRadioTests.swift",
"WireIdentifierValidationTests.swift",
"WireLengthValidationTests.swift",
"WireMessageTests.swift"
],
"target_dependencies" : [
"BLESwiftCompat17",
"BLESwift",
"BLESwiftCore",
"BLESwiftTestSupport",
"BLESwiftLink",
"BLESwiftSimulatorLink",
"BLESwiftVirtualRadio",
"BLESwiftProvider"
],
"type" : "test"
},
{
"c99name" : "BLESwiftLink",
"module_type" : "SwiftTarget",
"name" : "BLESwiftLink",
"path" : "Sources/BLESwiftLink",
"product_dependencies" : [
"Logging"
],
"product_memberships" : [
"BLESwiftLink",
"BLESwiftSimulatorLink",
"BLESwiftVirtualRadio",
"BLESwiftProvider",
"bleswift-provider"
],
"resources" : [
{
"path" : "/Users/admin/builder/spi-builder-workspace/Sources/BLESwiftLink/BLESwiftLink.docc",
"rule" : {
"copy" : {
}
}
}
],
"sources" : [
"Fixtures/Fixture.swift",
"LinkCodec.swift",
"LinkEndpoint.swift",
"LinkFraming.swift",
"LinkProtocol.swift",
"Messages/CentralMessages.swift",
"Messages/Handshake.swift",
"Messages/HostMessages.swift",
"Messages/LinkMessage.swift",
"Messages/WireIdentifierValidation.swift",
"Messages/WireLengthValidation.swift",
"Messages/WireTypes.swift",
"Transport/LinkConnection.swift",
"Transport/LinkListener.swift"
],
"target_dependencies" : [
"BLESwiftCompat17",
"BLESwiftCore"
],
"type" : "library"
},
{
"c99name" : "BLESwiftCore",
"module_type" : "SwiftTarget",
"name" : "BLESwiftCore",
"path" : "Sources/BLESwiftCore",
"product_memberships" : [
"BLESwift",
"BLESwiftCore",
"BLESwiftProfiles",
"BLESwiftTestSupport",
"BLESwiftLink",
"BLESwiftSimulatorLink",
"BLESwiftVirtualRadio",
"BLESwiftProvider",
"bleswift-provider"
],
"resources" : [
{
"path" : "/Users/admin/builder/spi-builder-workspace/Sources/BLESwiftCore/BLESwiftCore.docc",
"rule" : {
"copy" : {
}
}
}
],
"sources" : [
"Advertisement/AdvertisementData.swift",
"Advertisement/Discovery.swift",
"Advertisement/PeripheralAdvertisement.swift",
"AssignedNumbers/GATTAssignedNumbers+Characteristics.swift",
"AssignedNumbers/GATTAssignedNumbers+Descriptors.swift",
"AssignedNumbers/GATTAssignedNumbers+Services.swift",
"AssignedNumbers/GATTAssignedNumbers.swift",
"AssignedNumbers/Identifier+Name.swift",
"Backend/BackendRegistry.swift",
"Backend/CentralEvent.swift",
"Backend/CentralManaging.swift",
"Backend/CharacteristicProperties.swift",
"Backend/L2CAPChannelRemote.swift",
"Backend/L2CAPPSM.swift",
"Backend/PeripheralConnectionState.swift",
"Backend/PeripheralEvent.swift",
"Backend/PeripheralHostEvent.swift",
"Backend/PeripheralManaging.swift",
"Backend/PeripheralRemote.swift",
"Backend/ScanOptions.swift",
"Backend/WriteType.swift",
"Configuration/WarningOptions.swift",
"Errors/BLESwiftError.swift",
"GATT/ATTError.swift",
"GATT/AttributePermissions.swift",
"GATT/GATTCharacteristic.swift",
"GATT/GATTService.swift",
"GATT/ReadRequest.swift",
"GATT/RequestToken.swift",
"GATT/Subscriber.swift",
"GATT/SubscriptionEvent.swift",
"GATT/WriteRequest.swift",
"GATTCompatibility.swift",
"Identifiers/CharacteristicIdentifier.swift",
"Identifiers/DescriptorIdentifier.swift",
"Identifiers/PeripheralIdentifier.swift",
"Identifiers/ServiceIdentifier.swift",
"Identifiers/UUIDNormalization.swift",
"Restoration/RestoredPeripheralState.swift",
"Restoration/RestoredState.swift",
"Restoration/StartupBackgroundTask.swift",
"Scanning/ScanFilter.swift",
"Serialization/Combine.swift",
"Serialization/Data+Extractable.swift",
"Serialization/Data+Identity.swift",
"Serialization/DataPadding.swift",
"Serialization/Integer+Transferable.swift",
"Serialization/Receivable.swift",
"Serialization/String+Transferable.swift",
"Serialization/Transmittable.swift",
"State/BluetoothAuthorization.swift",
"State/CentralState.swift",
"State/SystemConnectionEvent.swift"
],
"target_dependencies" : [
"BLESwiftCompat17"
],
"type" : "library"
},
{
"c99name" : "BLESwiftCompat17Tests",
"module_type" : "SwiftTarget",
"name" : "BLESwiftCompat17Tests",
"path" : "Tests/BLESwiftCompat17Tests",
"sources" : [
"MutexTests.swift"
],
"target_dependencies" : [
"BLESwiftCompat17"
],
"type" : "test"
},
{
"c99name" : "BLESwiftCompat17",
"module_type" : "SwiftTarget",
"name" : "BLESwiftCompat17",
"path" : "Sources/BLESwiftCompat17",
"product_memberships" : [
"BLESwift",
"BLESwiftCore",
"BLESwiftProfiles",
"BLESwiftTestSupport",
"BLESwiftLink",
"BLESwiftSimulatorLink",
"BLESwiftVirtualRadio",
"BLESwiftProvider",
"bleswift-provider"
],
"resources" : [
{
"path" : "/Users/admin/builder/spi-builder-workspace/Sources/BLESwiftCompat17/BLESwiftCompat17.docc",
"rule" : {
"copy" : {
}
}
}
],
"sources" : [
"Mutex.swift"
],
"type" : "library"
},
{
"c99name" : "BLESwiftCompat16Tests",
"module_type" : "SwiftTarget",
"name" : "BLESwiftCompat16Tests",
"path" : "Tests/BLESwiftCompat16Tests",
"sources" : [
"AssumeIsolatedTests.swift",
"QueueExecutorTests.swift",
"SerialQueueExecutorTests.swift"
],
"target_dependencies" : [
"BLESwiftCompat16"
],
"type" : "test"
},
{
"c99name" : "BLESwiftCompat16",
"module_type" : "SwiftTarget",
"name" : "BLESwiftCompat16",
"path" : "Sources/BLESwiftCompat16",
"product_memberships" : [
"BLESwift",
"BLESwiftProfiles",
"BLESwiftProvider",
"bleswift-provider"
],
"resources" : [
{
"path" : "/Users/admin/builder/spi-builder-workspace/Sources/BLESwiftCompat16/BLESwiftCompat16.docc",
"rule" : {
"copy" : {
}
}
}
],
"sources" : [
"Actor+AssumeIsolated.swift",
"ExecutorPolicy.swift",
"QueueExecutor.swift",
"SerialQueueExecutor.swift"
],
"type" : "library"
},
{
"c99name" : "BLESwift",
"module_type" : "SwiftTarget",
"name" : "BLESwift",
"path" : "Sources/BLESwift",
"product_dependencies" : [
"Logging"
],
"product_memberships" : [
"BLESwift",
"BLESwiftProfiles",
"BLESwiftProvider",
"bleswift-provider"
],
"resources" : [
{
"path" : "/Users/admin/builder/spi-builder-workspace/Sources/BLESwift/BLESwift.docc",
"rule" : {
"copy" : {
}
}
}
],
"sources" : [
"Central+Retrieval.swift",
"Central.swift",
"Configuration/Configuration.swift",
"Connection/BufferingPolicy.swift",
"Connection/ConnectionEvent.swift",
"Connection/ConnectionState.swift",
"Connection/L2CAPChannel.swift",
"Connection/Peripheral+ANCS.swift",
"Connection/Peripheral+Chunked.swift",
"Connection/Peripheral+Composite.swift",
"Connection/Peripheral+GATT.swift",
"Connection/Peripheral+L2CAP.swift",
"Connection/Peripheral+Notifications.swift",
"Connection/Peripheral.swift",
"Connection/ReconnectPolicy.swift",
"CoreBluetoothBackend/CBCentralManager+CentralManaging.swift",
"CoreBluetoothBackend/CBL2CAPChannelTransport.swift",
"CoreBluetoothBackend/CBPeripheral+PeripheralRemote.swift",
"CoreBluetoothBackend/CBPeripheralManager+PeripheralManaging.swift",
"CoreBluetoothBackend/CentralDelegateProxy.swift",
"CoreBluetoothBackend/PeripheralDelegateProxy.swift",
"CoreBluetoothBackend/PeripheralManagerDelegateProxy.swift",
"CoreBluetoothBridging/ATTError+CB.swift",
"CoreBluetoothBridging/AdvertisementData+CB.swift",
"CoreBluetoothBridging/AttributePermissions+CB.swift",
"CoreBluetoothBridging/BluetoothAuthorization+CB.swift",
"CoreBluetoothBridging/CentralState+CB.swift",
"CoreBluetoothBridging/CharacteristicProperties+CB.swift",
"CoreBluetoothBridging/Identifiers+CBUUID.swift",
"CoreBluetoothBridging/PeripheralConnectionState+CB.swift",
"CoreBluetoothBridging/RestoredState+CB.swift",
"CoreBluetoothBridging/WarningOptions+CB.swift",
"CoreBluetoothBridging/WriteType+CB.swift",
"Exports.swift",
"Internal/ANCSAuthorizationRegistry.swift",
"Internal/Broadcaster.swift",
"Internal/ServiceChangesRegistry.swift",
"Internal/ThrowingBroadcaster.swift",
"Internal/WithTimeout.swift",
"PeripheralHost.swift",
"Restoration/PeripheralRestorationConfiguration.swift",
"Restoration/PeripheralRestorationEvent.swift",
"Restoration/RestorationConfiguration.swift",
"Restoration/RestorationEvent.swift",
"Restoration/UIKitStartupBackgroundTask.swift",
"Scanning/ActiveScan.swift",
"Scanning/ScanEvent.swift"
],
"target_dependencies" : [
"BLESwiftCompat16",
"BLESwiftCompat17",
"BLESwiftCore"
],
"type" : "library"
}
],
"tools_version" : "6.2"
}
✅ Doc result (pending) reported
========================================
GenerateDocs
========================================
Generating docs at path: $PWD/.docs/kylebrowning/bleswift/3.1.0
Repository: kylebrowning/BLESwift
Swift version used: 6.4
.package(url: "https://github.com/swiftlang/swift-docc-plugin", from: "1.5.0"),
Target: BLESwift
Extracting symbol information for 'BLESwift'...
Finished extracting symbol information for 'BLESwift'. (3.17s)
Building documentation for 'BLESwift'...
warning: 'connectionEventRegistration(services:peripherals:)' doesn't exist at '/BLESwift/Central'
--> BLESwift.md:99:13-99:63
97 | - <doc:SystemEvents>
98 | - ``SystemConnectionEvent``
99 + - ``Central/connectionEventRegistration(services:peripherals:)``
| ╰─suggestion: Replace 'connectionEventRegistration(services:peripherals:)' with 'connectionEvents()'
100 |
101 | ### Reading, Writing, and Notifications
warning: 'RestorationConfiguration' doesn't exist at '/BLESwift'
--> BLESwift.md:116:5-116:29
114 |
115 | - <doc:BackgroundRestoration>
116 + - ``RestorationConfiguration``
| ╰─suggestion: Replace 'RestorationConfiguration' with 'Configuration'
117 | - ``RestorationEvent``
118 | - ``PeripheralRestorationConfiguration``
warning: 'RestorationEvent' doesn't exist at '/BLESwift'
--> BLESwift.md:117:5-117:21
115 | - <doc:BackgroundRestoration>
116 | - ``RestorationConfiguration``
117 + - ``RestorationEvent``
| ├─suggestion: Replace 'RestorationEvent' with 'RestoredScanOptions'
| ├─suggestion: Replace 'RestorationEvent' with 'BackgroundRestoration'
| ├─suggestion: Replace 'RestorationEvent' with 'SubscriptionEvent'
| ├─suggestion: Replace 'RestorationEvent' with 'SystemConnectionEvent'
| ├─suggestion: Replace 'RestorationEvent' with 'RestoredState'
| ╰─suggestion: Replace 'RestorationEvent' with 'ConnectionEvent'
118 | - ``PeripheralRestorationConfiguration``
119 | - ``PeripheralRestorationEvent``
warning: 'PeripheralRestorationConfiguration' doesn't exist at '/BLESwift'
--> BLESwift.md:118:5-118:39
116 | - ``RestorationConfiguration``
117 | - ``RestorationEvent``
118 + - ``PeripheralRestorationConfiguration``
| ├─suggestion: Replace 'PeripheralRestorationConfiguration' with 'PeripheralRemote'
| ├─suggestion: Replace 'PeripheralRestorationConfiguration' with 'PeripheralConnectionState'
| ├─suggestion: Replace 'PeripheralRestorationConfiguration' with 'PeripheralRole'
| ├─suggestion: Replace 'PeripheralRestorationConfiguration' with 'PeripheralIdentifier'
| ├─suggestion: Replace 'PeripheralRestorationConfiguration' with 'PeripheralManaging'
| ├─suggestion: Replace 'PeripheralRestorationConfiguration' with 'PeripheralAdvertisement'
| ├─suggestion: Replace 'PeripheralRestorationConfiguration' with 'PeripheralEvent'
| ├─suggestion: Replace 'PeripheralRestorationConfiguration' with 'PeripheralHostEvent'
| ├─suggestion: Replace 'PeripheralRestorationConfiguration' with 'PeripheralHost'
| ╰─suggestion: Replace 'PeripheralRestorationConfiguration' with 'Peripheral'
119 | - ``PeripheralRestorationEvent``
120 |
warning: 'PeripheralRestorationEvent' doesn't exist at '/BLESwift'
--> BLESwift.md:119:5-119:31
117 | - ``RestorationEvent``
118 | - ``PeripheralRestorationConfiguration``
119 + - ``PeripheralRestorationEvent``
| ├─suggestion: Replace 'PeripheralRestorationEvent' with 'PeripheralRemote'
| ├─suggestion: Replace 'PeripheralRestorationEvent' with 'PeripheralHostEvent'
| ├─suggestion: Replace 'PeripheralRestorationEvent' with 'PeripheralEvent'
| ├─suggestion: Replace 'PeripheralRestorationEvent' with 'PeripheralRole'
| ├─suggestion: Replace 'PeripheralRestorationEvent' with 'PeripheralAdvertisement'
| ├─suggestion: Replace 'PeripheralRestorationEvent' with 'PeripheralConnectionState'
| ├─suggestion: Replace 'PeripheralRestorationEvent' with 'PeripheralHost'
| ├─suggestion: Replace 'PeripheralRestorationEvent' with 'PeripheralIdentifier'
| ├─suggestion: Replace 'PeripheralRestorationEvent' with 'PeripheralManaging'
| ╰─suggestion: Replace 'PeripheralRestorationEvent' with 'Peripheral'
120 |
121 | ### Peripheral Role (GATT server)
warning: 'PeripheralRestorationConfiguration' doesn't exist at '/BLESwift/PeripheralRole'
--> PeripheralRole.md:127:13-127:47
125 | On iOS, CoreBluetooth can relaunch your app in the background and hand back the GATT database
126 | and advertising state it preserved while your app was suspended or terminated. Opt in by
127 + passing a ``PeripheralRestorationConfiguration`` as ``Configuration/peripheralRestoration`` —
128 | its identifier is registered with CoreBluetooth
129 | (`CBPeripheralManagerOptionRestoreIdentifierKey`) when the manager is created:
warning: 'peripheralRestoration' doesn't exist at '/BLESwift/Configuration'
--> PeripheralRole.md:127:69-127:90
125 | On iOS, CoreBluetooth can relaunch your app in the background and hand back the GATT database
126 | and advertising state it preserved while your app was suspended or terminated. Opt in by
127 + passing a ``PeripheralRestorationConfiguration`` as ``Configuration/peripheralRestoration`` —
128 | its identifier is registered with CoreBluetooth
129 | (`CBPeripheralManagerOptionRestoreIdentifierKey`) when the manager is created:
warning: 'RestorationConfiguration' doesn't exist at '/BLESwift/PeripheralRole'
--> PeripheralRole.md:138:5-138:29
136 |
137 | - Important: The peripheral restore identifier must be **distinct** from any ``Central``'s
138 + ``RestorationConfiguration/identifier`` — CoreBluetooth requires a unique restore identifier
139 | per manager. That is why the two are separate ``Configuration`` settings.
140 |
warning: 'restorationEvents()' doesn't exist at '/BLESwift/PeripheralHost'
--> PeripheralRole.md:141:48-141:67
139 | per manager. That is why the two are separate ``Configuration`` settings.
140 |
141 + Restoration results arrive on ``PeripheralHost/restorationEvents()`` — a **buffered, replayed**
| ╰─suggestion: Replace 'restorationEvents()' with 'subscriptionEvents()'
142 | stream, exactly like ``Central/restorationEvents()``. Every event is buffered from the host's
143 | creation and replayed, in order, to the first consumer, so state restored during launch is
warning: 'restorationEvents()' doesn't exist at '/BLESwift/Central'
--> PeripheralRole.md:142:32-142:51
140 |
141 | Restoration results arrive on ``PeripheralHost/restorationEvents()`` — a **buffered, replayed**
142 + stream, exactly like ``Central/restorationEvents()``. Every event is buffered from the host's
| ├─suggestion: Replace 'restorationEvents()' with 'connectionEvents()'
| ╰─suggestion: Replace 'restorationEvents()' with 'stateEvents()'
143 | creation and replayed, in order, to the first consumer, so state restored during launch is
144 | never lost even if your consumer task starts strictly afterwards:
warning: 'PeripheralRestorationConfiguration' doesn't exist at '/BLESwift/PeripheralRole'
--> PeripheralRole.md:208:5-208:39
206 | ### Background restoration
207 |
208 + - ``PeripheralRestorationConfiguration``
209 | - ``PeripheralRestorationEvent``
210 | - ``RestoredPeripheralState``
warning: 'PeripheralRestorationEvent' doesn't exist at '/BLESwift/PeripheralRole'
--> PeripheralRole.md:209:5-209:31
207 |
208 | - ``PeripheralRestorationConfiguration``
209 + - ``PeripheralRestorationEvent``
210 | - ``RestoredPeripheralState``
warning: 'queue' doesn't exist at '/BLESwift/Central/unownedExecutor'
--> ../Central.swift:39:42-39:47
37 | nonisolated let executor: QueueExecutor
38 |
39 + /// Ties this actor's isolation to ``queue`` (SE-0424 custom executors). Public only
40 | /// because it satisfies the `Actor` protocol requirement — not for direct client use.
41 | public nonisolated var unownedExecutor: UnownedSerialExecutor {
warning: 'notifications(for:policy:)' doesn't exist at '/BLESwift/Peripheral'
--> ../Connection/BufferingPolicy.swift:8:18-8:44
6 | /// How a notification stream buffers values its consumer hasn't consumed yet. BLESwift's
7 | /// own mirror of `AsyncStream.Continuation.BufferingPolicy`, which can't appear directly in
8 + /// ``Peripheral/notifications(for:policy:)``'s signature without naming the element type.
| ╰─suggestion: Replace 'notifications(for:policy:)' with 'notifications(for:policy:survivesReconnect:)'
9 | public enum BufferingPolicy: Sendable, Equatable {
10 |
warning: 'PeripheralManagerDelegateProxy' doesn't exist at '/BLESwift/CoreBluetooth/CBPeripheralManager'
--> ../CoreBluetoothBackend/CBPeripheralManager+PeripheralManaging.swift:24:58-24:88
22 | /// `PeripheralHost` drive a real manager the same way it drives a `FakePeripheralManager`.
23 | /// The value-type GATT database is compiled to `CBMutableService`/`CBMutableCharacteristic`
24 + /// here, and `respond`/`updateValue` reach the shared ``PeripheralManagerDelegateProxy`` to
25 | /// recover the `CBATTRequest`/`CBCentral` objects the value-type API hides.
26 | ///
warning: 'PeripheralManagerDelegateProxy' doesn't exist at '/BLESwift/CoreBluetooth/CBPeripheralManager/eventHandler'
--> ../CoreBluetoothBackend/CBPeripheralManager+PeripheralManaging.swift:45:11-45:41
43 |
44 | /// Implements `eventHandler` with an associated-object-retained
45 + /// ``PeripheralManagerDelegateProxy`` assigned to `.delegate` (which is `weak` — the
46 | /// association keeps the proxy alive). Mirrors `CBCentralManager.eventHandler` exactly,
47 | /// including the `nonisolated(unsafe)` bridge from the protocol's plain closure into the
warning: 'bleSwiftRegisterProxy(_:)' doesn't exist at '/BLESwift/CoreBluetooth/CBPeripheralManager/eventHandler'
--> ../CoreBluetoothBackend/CBPeripheralManager+PeripheralManaging.swift:53:13-53:38
51 | /// property — it creates its proxy and passes it to
52 | /// `CBPeripheralManager(delegate:queue:options:)` directly, then calls
53 + /// ``bleSwiftRegisterProxy(_:)``.
54 | public var eventHandler: ((PeripheralHostEvent) -> Void)? {
55 | get {
warning: 'queue' doesn't exist at '/BLESwift/PeripheralHost/unownedExecutor'
--> ../PeripheralHost.swift:50:51-50:56
48 | nonisolated let executor: QueueExecutor
49 |
50 + /// Ties this actor's isolation directly to ``queue`` (SE-0424 custom executors), exactly
51 | /// as ``Central/unownedExecutor`` does. Declared `public` because it satisfies a
52 | /// requirement of the public `Actor` protocol; not meant for direct use by clients.
warning: 'handle(_:)' doesn't exist at '/BLESwift/PeripheralHost/state'
--> ../PeripheralHost.swift:255:65-255:75
253 |
254 | /// The current state of the Bluetooth radio. A synchronous snapshot — readable without
255 + /// `await` from any isolation domain — kept current by ``handle(_:)`` on every
256 | /// `.didUpdateState`.
257 | public nonisolated var state: CentralState {
Finished building documentation for 'BLESwift' (0.50s)
Generated documentation archive at:
/Users/admin/builder/spi-builder-workspace/.docs/kylebrowning/bleswift/3.1.0
Building for debugging...
[Planning deferred tasks]
[20 / 43] Snippets
[30 / 92]
[35 / 92]
[38 / 92]
[39 / 92]
[43 / 92]
[45 / 92]
[48 / 92]
[51 / 92]
[53 / 92]
[54 / 92]
[65 / 92] SymbolKit
[66 / 92] Snippets
[84 / 93] SymbolKit
[84 / 93] Snippets
[92 / 97] SymbolKit
[93 / 97] snippet-extract-product
[95 / 97] snippet-extract-product
Build complete! (4.28 sec)
Building for debugging...
[Pre-planning 1 / 269]
[Planning deferred tasks]
[9 / 46] Logging
[20 / 66] BLESwiftCompat16
[28 / 62] BLESwiftCompat17
[37 / 64] Logging
[52 / 70] Logging
[53 / 70] BLESwiftCore
[58 / 66] BLESwift
[69 / 77] BLESwift
[71 / 73] BLESwift
Build complete! (2.90 sec)
Target: BLESwiftCore
Extracting symbol information for 'BLESwiftCore'...
Finished extracting symbol information for 'BLESwiftCore'. (0.74s)
Building documentation for 'BLESwiftCore'...
Finished building documentation for 'BLESwiftCore' (0.28s)
Generated documentation archive at:
/Users/admin/builder/spi-builder-workspace/.docs/kylebrowning/bleswift/3.1.0
Building for debugging...
[1 / 11]
Build complete! (0.48 sec)
Building for debugging...
[Planning deferred tasks]
Build complete! (0.46 sec)
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/3.1.0/index/index.json
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/3.1.0/linkable-paths.json
Target: BLESwiftProfiles
Extracting symbol information for 'BLESwiftProfiles'...
Finished extracting symbol information for 'BLESwiftProfiles'. (1.60s)
Building documentation for 'BLESwiftProfiles'...
warning: 'BLESwiftCore' doesn't exist at '/BLESwiftProfiles'
--> BLESwiftProfiles.md:8:32-8:44
6 |
7 | BLESwiftProfiles turns the raw bytes of well-known GATT characteristics into strongly typed
8 + Swift values. Each type is a ``BLESwiftCore/Receivable`` (and, where the characteristic is
| ╰─suggestion: Replace 'BLESwiftCore' with 'BLESwift'
9 | writable, a ``BLESwiftCore/Transmittable``) whose byte layout follows the Bluetooth SIG GATT
10 | Specification Supplement (GSS) exactly — little-endian throughout, with flag-driven optional
warning: 'BLESwiftCore' doesn't exist at '/BLESwiftProfiles'
--> BLESwiftProfiles.md:9:15-9:27
7 | BLESwiftProfiles turns the raw bytes of well-known GATT characteristics into strongly typed
8 | Swift values. Each type is a ``BLESwiftCore/Receivable`` (and, where the characteristic is
9 + writable, a ``BLESwiftCore/Transmittable``) whose byte layout follows the Bluetooth SIG GATT
| ╰─suggestion: Replace 'BLESwiftCore' with 'BLESwift'
10 | Specification Supplement (GSS) exactly — little-endian throughout, with flag-driven optional
11 | fields decoded in their specified order.
warning: 'BLESwiftCore' doesn't exist at '/BLESwiftProfiles/UsingProfiles'
--> UsingProfiles.md:7:46-7:58
5 | ## Streaming a measurement
6 |
7 + Each profile type exposes the SIG-assigned ``BLESwiftCore/CharacteristicIdentifier`` it
8 | decodes, so subscribing is a one-liner — no hand-written UUIDs, no manual byte parsing:
9 |
warning: 'read(from:timeout:)' doesn't exist at '/BLESwiftProfiles/BLESwift/Peripheral'
--> UsingProfiles.md:36:68-36:87
34 | ## Reading a single value
35 |
36 + For a one-shot read, decode straight through ``BLESwift/Peripheral/read(from:timeout:)`` by
| ├─suggestion: Replace 'read(from:timeout:)' with 'readDeviceInformation(timeout:)'
| ╰─suggestion: Replace 'read(from:timeout:)' with 'readBatteryLevel(timeout:)'
37 | naming the profile type, or use a purpose-built convenience:
38 |
warning: 'Receivable' doesn't exist at '/BLESwiftProfiles/DeviceInformation'
--> ../DeviceInformation.swift:14:7-14:17
12 | /// This is an *aggregate* of up to six independent UTF-8 String characteristics, each of
13 | /// which is optional on a given peripheral — so `DeviceInformation` is not itself
14 + /// ``Receivable``. Read it with ``BLESwift/Peripheral/readDeviceInformation(timeout:)``,
15 | /// which reads whichever characteristics the peripheral exposes and leaves the rest `nil`.
16 | ///
warning: 'read(from:timeout:)' doesn't exist at '/BLESwiftProfiles/BLESwift/Peripheral'
--> ../Peripheral+Profiles.swift:11:27-11:46
9 |
10 | /// Convenience reads for standard GATT profiles, built on ``BLESwift/Peripheral``'s generic
11 + /// ``BLESwift/Peripheral/read(from:timeout:)``.
| ├─suggestion: Replace 'read(from:timeout:)' with 'readDeviceInformation(timeout:)'
| ╰─suggestion: Replace 'read(from:timeout:)' with 'readBatteryLevel(timeout:)'
12 | extension Peripheral {
13 |
warning: 'read(from:timeout:)' doesn't exist at '/BLESwiftProfiles/BLESwift/Peripheral'
--> ../Peripheral+Profiles.swift:20:33-20:52
18 | ///
19 | /// - Parameter timeout: Per-read timeout, forwarded to
20 + /// ``BLESwift/Peripheral/read(from:timeout:)``. `nil` (the default) waits indefinitely.
| ├─suggestion: Replace 'read(from:timeout:)' with 'readDeviceInformation(timeout:)'
| ╰─suggestion: Replace 'read(from:timeout:)' with 'readBatteryLevel(timeout:)'
21 | /// - Returns: A ``DeviceInformation`` with a value for each present characteristic and
22 | /// `nil` for each absent one.
warning: 'BLESwiftError' doesn't exist at '/BLESwiftProfiles/BLESwift/Peripheral/readDeviceInformation(timeout:)'
--> ../Peripheral+Profiles.swift:23:21-23:34
21 | /// - Returns: A ``DeviceInformation`` with a value for each present characteristic and
22 | /// `nil` for each absent one.
23 + /// - Throws: ``BLESwiftError/missingService(_:)`` if the Device Information service is
24 | /// absent, ``BLESwiftError/notConnected``, ``BLESwiftError/timedOut``, or whatever a
25 | /// read or its UTF-8 decoding throws.
warning: 'BLESwiftError' doesn't exist at '/BLESwiftProfiles/BLESwift/Peripheral/readDeviceInformation(timeout:)'
--> ../Peripheral+Profiles.swift:24:21-24:34
22 | /// `nil` for each absent one.
23 | /// - Throws: ``BLESwiftError/missingService(_:)`` if the Device Information service is
24 + /// absent, ``BLESwiftError/notConnected``, ``BLESwiftError/timedOut``, or whatever a
25 | /// read or its UTF-8 decoding throws.
26 | public func readDeviceInformation(timeout: Duration? = nil) async throws -> DeviceInformation {
warning: 'BLESwiftError' doesn't exist at '/BLESwiftProfiles/BLESwift/Peripheral/readDeviceInformation(timeout:)'
--> ../Peripheral+Profiles.swift:24:53-24:66
22 | /// `nil` for each absent one.
23 | /// - Throws: ``BLESwiftError/missingService(_:)`` if the Device Information service is
24 + /// absent, ``BLESwiftError/notConnected``, ``BLESwiftError/timedOut``, or whatever a
25 | /// read or its UTF-8 decoding throws.
26 | public func readDeviceInformation(timeout: Duration? = nil) async throws -> DeviceInformation {
warning: 'read(from:timeout:)' doesn't exist at '/BLESwiftProfiles/BLESwift/Peripheral'
--> ../Peripheral+Profiles.swift:54:65-54:84
52 | /// Reads Battery Level (`0x2A19`) and returns the percentage (0–100).
53 | ///
54 + /// - Parameter timeout: Forwarded to ``BLESwift/Peripheral/read(from:timeout:)``. `nil`
| ├─suggestion: Replace 'read(from:timeout:)' with 'readDeviceInformation(timeout:)'
| ╰─suggestion: Replace 'read(from:timeout:)' with 'readBatteryLevel(timeout:)'
55 | /// (the default) waits indefinitely.
56 | /// - Returns: The battery charge, as a percentage.
warning: 'read(from:timeout:)' doesn't exist at '/BLESwiftProfiles/BLESwift/Peripheral'
--> ../Peripheral+Profiles.swift:57:44-57:63
55 | /// (the default) waits indefinitely.
56 | /// - Returns: The battery charge, as a percentage.
57 + /// - Throws: As ``BLESwift/Peripheral/read(from:timeout:)`` does, plus
| ├─suggestion: Replace 'read(from:timeout:)' with 'readDeviceInformation(timeout:)'
| ╰─suggestion: Replace 'read(from:timeout:)' with 'readBatteryLevel(timeout:)'
58 | /// ``BLESwiftError/invalidArgument(_:)`` if the peripheral reports a value above 100.
59 | public func readBatteryLevel(timeout: Duration? = nil) async throws -> UInt8 {
warning: 'BLESwiftError' doesn't exist at '/BLESwiftProfiles/BLESwift/Peripheral/readBatteryLevel(timeout:)'
--> ../Peripheral+Profiles.swift:58:13-58:26
56 | /// - Returns: The battery charge, as a percentage.
57 | /// - Throws: As ``BLESwift/Peripheral/read(from:timeout:)`` does, plus
58 + /// ``BLESwiftError/invalidArgument(_:)`` if the peripheral reports a value above 100.
59 | public func readBatteryLevel(timeout: Duration? = nil) async throws -> UInt8 {
60 | let level: BatteryLevel = try await read(from: BatteryLevel.characteristic, timeout: timeout)
Finished building documentation for 'BLESwiftProfiles' (0.16s)
Generated documentation archive at:
/Users/admin/builder/spi-builder-workspace/.docs/kylebrowning/bleswift/3.1.0
Building for debugging...
[1 / 11]
Build complete! (0.48 sec)
Building for debugging...
[Constructing description]
[Planning 131 / 327]
[Planning deferred tasks]
[2 / 28]
[8 / 16] BLESwiftProfiles
[19 / 27] BLESwiftProfiles
Build complete! (1.32 sec)
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/3.1.0/index/index.json
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/3.1.0/linkable-paths.json
Target: BLESwiftTestSupport
Extracting symbol information for 'BLESwiftTestSupport'...
Finished extracting symbol information for 'BLESwiftTestSupport'. (1.47s)
Building documentation for 'BLESwiftTestSupport'...
warning: 'RequestToken' doesn't exist at '/BLESwiftTestSupport/FakeGATTBridge'
--> ../FakeGATTBridge.swift:24:34-24:46
22 | /// of the fake that fired it and forwards to the other side only via that side's
23 | /// off-queue-safe `simulate…` methods, preserving each fake's queue-confinement. The
24 + /// request-correlation table (``RequestToken`` → pending central operation) is the only
25 | /// state shared across queues, so it's `Mutex`-protected.
26 | ///
warning: 'Central' doesn't exist at '/BLESwiftTestSupport/FakeGATTBridge/peripheral'
--> ../FakeGATTBridge.swift:37:60-37:67
35 | public let central: FakeCentral
36 |
37 + /// The central-side fake peripheral (the remote the ``Central`` talks to). Its read/write/
38 | /// subscribe operations are routed to ``manager`` by this bridge.
39 | public let peripheral: FakePeripheral
warning: 'PeripheralHost' doesn't exist at '/BLESwiftTestSupport/FakeGATTBridge/manager'
--> ../FakeGATTBridge.swift:41:61-41:75
39 | public let peripheral: FakePeripheral
40 |
41 + /// The peripheral-side fake manager (the backend the ``PeripheralHost`` drives). Its hosted
42 | /// database, responses, and notifications are surfaced to ``peripheral`` by this bridge.
43 | public let manager: FakePeripheralManager
warning: 'Subscriber' doesn't exist at '/BLESwiftTestSupport/FakeGATTBridge/subscriber'
--> ../FakeGATTBridge.swift:45:65-45:75
43 | public let manager: FakePeripheralManager
44 |
45 + /// The identity the central presents to the host — the ``Subscriber`` that read/write
46 | /// requests are attributed to and that subscribes to notifications. A test can assert it
47 | /// appears in `PeripheralHost/subscribers(for:)`.
warning: 'Subscriber' doesn't exist at '/BLESwiftTestSupport/FakeGATTBridge/make(central:peripheral:manager:subscriber:)'
--> ../FakeGATTBridge.swift:73:15-73:25
71 | /// surfaced to `peripheral`.
72 | /// - subscriber: The identity the central presents to the host. Defaults to a fresh
73 + /// ``Subscriber`` with `maximumUpdateValueLength` 512.
74 | public static func make(
75 | central: FakeCentral,
warning: 'readValue(for:)' is ambiguous at '/BLESwiftTestSupport/FakePeripheral'
--> ../FakePeripheral.swift:176:72-176:87
174 | }
175 |
176 + /// Bridge hook invoked synchronously, on ``queue``, from inside ``readValue(for:)`` —
| ├─suggestion: Insert '-(CharacteristicIdentifier)' for 'func readValue(for characteristic: CharacteristicIdentifier)'
| ╰─suggestion: Insert '-(DescriptorIdentifier)' for 'func readValue(for descriptor: DescriptorIdentifier)'
177 | /// used by ``FakeGATTBridge`` to route a central-side read to a remote
178 | /// ``FakePeripheralManager`` host. When non-`nil`, ``readValue(for:)`` fires this
warning: 'readValue(for:)' is ambiguous at '/BLESwiftTestSupport/FakePeripheral'
--> ../FakePeripheral.swift:178:59-178:74
176 | /// Bridge hook invoked synchronously, on ``queue``, from inside ``readValue(for:)`` —
177 | /// used by ``FakeGATTBridge`` to route a central-side read to a remote
178 + /// ``FakePeripheralManager`` host. When non-`nil`, ``readValue(for:)`` fires this
| ├─suggestion: Insert '-(CharacteristicIdentifier)' for 'func readValue(for characteristic: CharacteristicIdentifier)'
| ╰─suggestion: Insert '-(DescriptorIdentifier)' for 'func readValue(for descriptor: DescriptorIdentifier)'
179 | /// closure and returns without delivering its own `didUpdateValue` completion
180 | /// (bypassing ``scriptedReadValues``/``holdReadCompletions``); the bridge delivers the
warning: 'readValue(for:)' is ambiguous at '/BLESwiftTestSupport/FakePeripheral'
--> ../FakePeripheral.swift:228:21-228:36
226 | }
227 |
228 + /// The value ``readValue(for:)`` reports back via `didUpdateValue`, keyed by
| ├─suggestion: Insert '-(CharacteristicIdentifier)' for 'func readValue(for characteristic: CharacteristicIdentifier)'
| ╰─suggestion: Insert '-(DescriptorIdentifier)' for 'func readValue(for descriptor: DescriptorIdentifier)'
229 | /// characteristic. `nil` (no entry) reports back `nil` data. Configure via
230 | /// ``onQueue(_:)``.
warning: 'CharacteristicProperties' doesn't exist at '/BLESwiftTestSupport/FakePeripheral/scriptedProperties'
--> ../FakePeripheral.swift:246:15-246:39
244 | public static let defaultProperties: CharacteristicProperties = [.read, .write, .writeWithoutResponse, .notify]
245 |
246 + /// The ``CharacteristicProperties`` ``properties(of:)`` reports back, keyed by
247 | /// characteristic. A characteristic with no entry reports ``defaultProperties``.
248 | /// Configure via ``onQueue(_:)``.
warning: 'readValue(for:)' is ambiguous at '/BLESwiftTestSupport/FakePeripheral'
--> ../FakePeripheral.swift:288:31-288:46
286 | }
287 |
288 + /// The number of times ``readValue(for:)`` has been called.
| ├─suggestion: Insert '-(CharacteristicIdentifier)' for 'func readValue(for characteristic: CharacteristicIdentifier)'
| ╰─suggestion: Insert '-(DescriptorIdentifier)' for 'func readValue(for descriptor: DescriptorIdentifier)'
289 | public var readCallCount: Int {
290 | dispatchPrecondition(condition: .onQueue(queue))
warning: 'readValue(for:)' is ambiguous at '/BLESwiftTestSupport/FakePeripheral'
--> ../FakePeripheral.swift:367:21-367:36
365 | }
366 |
367 + /// The value ``readValue(for:)`` reports back via `didUpdateValueForDescriptor`, keyed
| ├─suggestion: Insert '-(CharacteristicIdentifier)' for 'func readValue(for characteristic: CharacteristicIdentifier)'
| ╰─suggestion: Insert '-(DescriptorIdentifier)' for 'func readValue(for descriptor: DescriptorIdentifier)'
368 | /// by descriptor. In permissive mode (``availableDescriptors`` is `nil`), scripting a
369 | /// value here also makes that descriptor "exist" for ``discoverDescriptors(for:)``. A
warning: 'readValue(for:)' is ambiguous at '/BLESwiftTestSupport/FakePeripheral'
--> ../FakePeripheral.swift:419:31-419:46
417 | }
418 |
419 + /// The number of times ``readValue(for:)`` (the descriptor overload) has been called.
| ├─suggestion: Insert '-(CharacteristicIdentifier)' for 'func readValue(for characteristic: CharacteristicIdentifier)'
| ╰─suggestion: Insert '-(DescriptorIdentifier)' for 'func readValue(for descriptor: DescriptorIdentifier)'
420 | public var descriptorReadCallCount: Int {
421 | dispatchPrecondition(condition: .onQueue(queue))
warning: 'readValue(for:)' is ambiguous at '/BLESwiftTestSupport/FakePeripheral'
--> ../FakePeripheral.swift:425:19-425:34
423 | }
424 |
425 + /// Whether ``readValue(for:)`` (the descriptor overload) withholds its
| ├─suggestion: Insert '-(CharacteristicIdentifier)' for 'func readValue(for characteristic: CharacteristicIdentifier)'
| ╰─suggestion: Insert '-(DescriptorIdentifier)' for 'func readValue(for descriptor: DescriptorIdentifier)'
426 | /// `didUpdateValueForDescriptor` completion instead of delivering it immediately —
427 | /// the descriptor counterpart to ``holdReadCompletions``. `false` by default. Configure
warning: 'readValue(for:)' is ambiguous at '/BLESwiftTestSupport/FakePeripheral'
--> ../FakePeripheral.swift:716:19-716:34
714 | }
715 |
716 + /// Whether ``readValue(for:)`` withholds its `didUpdateValue` completion instead of
| ├─suggestion: Insert '-(CharacteristicIdentifier)' for 'func readValue(for characteristic: CharacteristicIdentifier)'
| ╰─suggestion: Insert '-(DescriptorIdentifier)' for 'func readValue(for descriptor: DescriptorIdentifier)'
717 | /// delivering it immediately. `false` by default (every read completes right away, as
718 | /// every other operation on this fake does). Configure via ``onQueue(_:)``.
warning: 'CharacteristicProperties' doesn't exist at '/BLESwiftTestSupport/FakePeripheral/properties(of:)'
--> ../FakePeripheral.swift:847:24-847:48
845 | }
846 |
847 + /// The scripted ``CharacteristicProperties`` for `characteristic` (see
848 | /// ``scriptedProperties``), or ``defaultProperties`` if none was scripted. Unlike real
849 | /// CoreBluetooth, this does not gate on discovery.
warning: 'RequestToken' doesn't exist at '/BLESwiftTestSupport/FakePeripheralManager/simulateReadRequest(central:characteristic:offset:)'
--> ../FakePeripheralManager.swift:238:61-238:73
236 |
237 | /// Simulates a remote central issuing a read request and, asynchronously, delivers
238 + /// `.didReceiveRead(_:)`. Returns the freshly minted ``RequestToken`` (synchronously) so a
239 | /// test can correlate the eventual ``respondCalls`` entry.
240 | @discardableResult
warning: 'RequestToken' doesn't exist at '/BLESwiftTestSupport/FakePeripheralManager/simulateWriteRequest(central:characteristic:value:offset:)'
--> ../FakePeripheralManager.swift:255:54-255:66
253 |
254 | /// Simulates a remote central issuing a single write and, asynchronously, delivers
255 + /// `.didReceiveWrite(_:)`. Returns the minted ``RequestToken``.
256 | @discardableResult
257 | public func simulateWriteRequest(
warning: 'RequestToken' doesn't exist at '/BLESwiftTestSupport/FakePeripheralManager/simulateWriteRequests(_:)'
--> ../FakePeripheralManager.swift:267:54-267:66
265 |
266 | /// Simulates a remote central issuing a batch of writes and, asynchronously, delivers
267 + /// `.didReceiveWrite(_:)`. Returns the minted ``RequestToken``.
268 | @discardableResult
269 | public func simulateWriteRequests(_ entries: [WriteRequest.Entry]) -> RequestToken {
warning: 'PeripheralHost' doesn't exist at '/BLESwiftTestSupport/FakePeripheralManager/simulateReadyToUpdate()'
--> ../FakePeripheralManager.swift:297:54-297:68
295 |
296 | /// Simulates the transmit queue draining and, asynchronously, delivers
297 + /// `.readyToUpdateSubscribers` — unblocks a ``PeripheralHost/updateValue(_:for:onSubscribed:)``
298 | /// that is awaiting capacity after a scripted `false` return.
299 | public func simulateReadyToUpdate() {
Finished building documentation for 'BLESwiftTestSupport' (0.18s)
Generated documentation archive at:
/Users/admin/builder/spi-builder-workspace/.docs/kylebrowning/bleswift/3.1.0
Building for debugging...
[1 / 11]
Build complete! (0.47 sec)
Building for debugging...
[Pre-planning 1 / 181]
[Planning deferred tasks]
[2 / 18]
[6 / 14] BLESwiftTestSupport
[15 / 23] BLESwiftTestSupport
Build complete! (1.19 sec)
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/3.1.0/index/index.json
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/3.1.0/linkable-paths.json
Target: BLESwiftLink
Extracting symbol information for 'BLESwiftLink'...
Finished extracting symbol information for 'BLESwiftLink'. (1.92s)
Building documentation for 'BLESwiftLink'...
Finished building documentation for 'BLESwiftLink' (0.26s)
Generated documentation archive at:
/Users/admin/builder/spi-builder-workspace/.docs/kylebrowning/bleswift/3.1.0
Building for debugging...
[1 / 11]
Build complete! (0.48 sec)
Building for debugging...
[Pre-planning 1 / 211]
[Planning deferred tasks]
[2 / 21]
[6 / 14] BLESwiftLink
[17 / 25] BLESwiftLink
[19 / 21] BLESwiftLink
Build complete! (1.64 sec)
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/3.1.0/index/index.json
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/3.1.0/linkable-paths.json
Target: BLESwiftSimulatorLink
Extracting symbol information for 'BLESwiftSimulatorLink'...
Finished extracting symbol information for 'BLESwiftSimulatorLink'. (1.54s)
Building documentation for 'BLESwiftSimulatorLink'...
Finished building documentation for 'BLESwiftSimulatorLink' (0.08s)
Generated documentation archive at:
/Users/admin/builder/spi-builder-workspace/.docs/kylebrowning/bleswift/3.1.0
Building for debugging...
[1 / 11]
Build complete! (0.30 sec)
Building for debugging...
[Pre-planning 1 / 269]
[Planning deferred tasks]
[2 / 25]
[7 / 15] BLESwiftSimulatorLink
[15 / 23] BLESwiftSimulatorLink
Build complete! (1.27 sec)
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/3.1.0/index/index.json
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/3.1.0/linkable-paths.json
Target: BLESwiftProvider
Extracting symbol information for 'BLESwiftProvider'...
Finished extracting symbol information for 'BLESwiftProvider'. (2.19s)
Building documentation for 'BLESwiftProvider'...
Finished building documentation for 'BLESwiftProvider' (0.18s)
Generated documentation archive at:
/Users/admin/builder/spi-builder-workspace/.docs/kylebrowning/bleswift/3.1.0
Building for debugging...
[1 / 11]
Build complete! (0.49 sec)
Building for debugging...
[Computing dependencies]
[Pre-planning 1 / 443]
[Planning deferred tasks]
[9 / 30] BLESwiftLink
[10 / 27] BLESwiftVirtualRadio
[21 / 38] BLESwiftVirtualRadio
[25 / 35] BLESwiftVirtualRadio
[25 / 35] BLESwiftProvider
[36 / 46] BLESwiftVirtualRadio
[37 / 45] BLESwiftProvider
[39 / 41] BLESwiftProvider
Build complete! (1.90 sec)
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/3.1.0/index/index.json
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/3.1.0/linkable-paths.json
Target: BLESwiftVirtualRadio
Extracting symbol information for 'BLESwiftVirtualRadio'...
Finished extracting symbol information for 'BLESwiftVirtualRadio'. (1.03s)
Building documentation for 'BLESwiftVirtualRadio'...
Finished building documentation for 'BLESwiftVirtualRadio' (0.12s)
Generated documentation archive at:
/Users/admin/builder/spi-builder-workspace/.docs/kylebrowning/bleswift/3.1.0
Building for debugging...
[1 / 11]
Build complete! (0.50 sec)
Building for debugging...
[Pre-planning 1 / 269]
[Planning deferred tasks]
[1 / 19]
Build complete! (0.76 sec)
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/3.1.0/index/index.json
Successfully merged into /Users/admin/builder/spi-builder-workspace/.docs-staging/kylebrowning/bleswift/3.1.0/linkable-paths.json
5140
33 /Users/admin/builder/spi-builder-workspace/.docs/kylebrowning/bleswift/3.1.0
✅ Doc result (uploading) reported
========================================
SyncDocs
========================================
Doc archive source directory: $PWD/.docs/kylebrowning/bleswift/3.1.0
File count: 5140
Doc size: 33.0MB
Preparing doc bundle ...
Using presigned URL upload - AWS credentials not required
Uploading -kylebrowning-bleswift-3.1.0-171d1bf7.zip to presigned URL
Starting upload of 7080766 bytes...
Upload completed successfully
Done.