The Swift Package Index logo.Swift Package Index

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 arm64

Build 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.