├── .github └── workflows │ └── release.yml ├── .gitignore ├── .swiftpm └── xcode │ └── xcshareddata │ └── xcschemes │ ├── iOS-BLE-Library-Mock.xcscheme │ ├── iOS-BLE-Library.xcscheme │ └── iOS-BLE-LibraryTests.xcscheme ├── Gemfile ├── Gemfile.lock ├── IOS-BLE-Library-Mock.podspec ├── IOS-BLE-Library.podspec ├── LICENSE ├── Package.resolved ├── Package.swift ├── README.md ├── Sources ├── iOS-BLE-Library-Mock │ ├── Alias.swift │ ├── CentralManager │ │ ├── CentralManager.swift │ │ ├── Model │ │ │ └── ScanResult.swift │ │ └── ReactiveCentralManagerDelegate.swift │ ├── Documentation.docc │ │ ├── CentralManager │ │ │ ├── CentralManager.md │ │ │ ├── CentralManager │ │ │ │ └── connect.md │ │ │ └── ReactiveCentralManagerDelegate.md │ │ ├── Documentation.md │ │ └── Peripheral │ │ │ └── Peripheral.md │ ├── Peripheral │ │ ├── Peripheral+Writer.swift │ │ ├── Peripheral.swift │ │ └── ReactivePeripheralDelegate.swift │ └── Utilities │ │ ├── AdvertisementData.swift │ │ ├── AsyncCharacteristicData.swift │ │ ├── CBManagerState.swift │ │ ├── Extensions │ │ ├── CBManagerState+Ext.swift │ │ ├── Data+Ext.swift.swift │ │ └── Publishers+Async.swift │ │ ├── Logger.swift │ │ ├── Publishers │ │ ├── ContinuationSubscriber.swift │ │ ├── Publishers+Bluetooth.swift │ │ ├── Publishers+Connectable.swift │ │ ├── Publishers+FailablePrefix.swift.swift │ │ ├── Publishers+GuestList.swift │ │ └── Publishers+Peripheral.swift │ │ ├── Queue.swift │ │ ├── RSSI.swift │ │ └── UnimplementedError.swift └── iOS-BLE-Library │ ├── CentralManager │ ├── CentralManager.swift │ ├── Model │ │ └── ScanResult.swift │ └── ReactiveCentralManagerDelegate.swift │ ├── Documentation.docc │ ├── CentralManager │ │ ├── CentralManager.md │ │ ├── CentralManager │ │ │ └── connect.md │ │ └── ReactiveCentralManagerDelegate.md │ ├── Documentation.md │ └── Peripheral │ │ └── Peripheral.md │ ├── Peripheral │ ├── Peripheral+Writer.swift │ ├── Peripheral.swift │ └── ReactivePeripheralDelegate.swift │ └── Utilities │ ├── AdvertisementData.swift │ ├── AsyncCharacteristicData.swift │ ├── CBManagerState.swift │ ├── Extensions │ ├── CBManagerState+Ext.swift │ ├── Data+Ext.swift.swift │ └── Publishers+Async.swift │ ├── Logger.swift │ ├── Publishers │ ├── ContinuationSubscriber.swift │ ├── Publishers+Bluetooth.swift │ ├── Publishers+Connectable.swift │ ├── Publishers+FailablePrefix.swift.swift │ └── Publishers+GuestList.swift │ ├── Queue.swift │ ├── RSSI.swift │ └── UnimplementedError.swift ├── Tests └── iOS-BLE-LibraryTests │ ├── CentralManagerStateTest.swift │ ├── CentralManagerTests.swift │ ├── PeripheralMultitaskingTests.swift │ └── PeripheralReadWriteDescriptorTests.swift ├── code_gen ├── additional_files │ └── Alias.swift ├── code_gen.py ├── copy_files.py └── replace_code.py ├── docs ├── css │ ├── chunk-c0335d80.10a2f091.css │ ├── documentation-topic.1d1eec04.css │ ├── documentation-topic~topic.b6287bcf.css │ ├── documentation-topic~topic~tutorials-overview.d6f5411c.css │ ├── index.038e887c.css │ ├── topic.d8c126f3.css │ └── tutorials-overview.c249c765.css ├── data │ └── documentation │ │ ├── ios_ble_library.json │ │ └── ios_ble_library │ │ ├── advertisementdata.json │ │ ├── advertisementdata │ │ ├── !=(_:_:).json │ │ ├── ==(_:_:).json │ │ ├── advertisedid().json │ │ ├── connectablemock.json │ │ ├── equatable-implementations.json │ │ ├── hash(into:).json │ │ ├── init().json │ │ ├── init(_:).json │ │ ├── isconnectable.json │ │ ├── localname.json │ │ ├── manufacturerdata.json │ │ ├── overflowserviceuuids.json │ │ ├── rawdata.json │ │ ├── servicedata.json │ │ ├── serviceuuids.json │ │ ├── solicitedserviceuuids.json │ │ ├── txpowerlevel.json │ │ └── unconnectablemock.json │ │ ├── asynccharacteristicdata.json │ │ ├── asynccharacteristicdata │ │ ├── allsatisfy(_:).json │ │ ├── asyncsequence-implementations.json │ │ ├── compactmap(_:)-3l977.json │ │ ├── compactmap(_:)-8kqp1.json │ │ ├── contains(_:).json │ │ ├── contains(where:).json │ │ ├── drop(while:).json │ │ ├── dropfirst(_:).json │ │ ├── element.json │ │ ├── filter(_:).json │ │ ├── first(where:).json │ │ ├── flatmap(_:)-50ncz.json │ │ ├── flatmap(_:)-8auld.json │ │ ├── makeasynciterator().json │ │ ├── map(_:)-70277.json │ │ ├── map(_:)-8x8iq.json │ │ ├── max(by:).json │ │ ├── min(by:).json │ │ ├── next().json │ │ ├── prefix(_:).json │ │ ├── prefix(while:).json │ │ ├── reduce(_:_:).json │ │ └── reduce(into:_:).json │ │ ├── asyncpublisher.json │ │ ├── asyncpublisher │ │ ├── allsatisfy(_:).json │ │ ├── asynciterator.json │ │ ├── asyncsequence-implementations.json │ │ ├── characters.json │ │ ├── compactmap(_:)-2ziwe.json │ │ ├── compactmap(_:)-746g3.json │ │ ├── contains(_:).json │ │ ├── contains(where:).json │ │ ├── drop(while:).json │ │ ├── dropfirst(_:).json │ │ ├── element.json │ │ ├── filter(_:).json │ │ ├── first(where:).json │ │ ├── flatmap(_:)-648jy.json │ │ ├── flatmap(_:)-9aeej.json │ │ ├── init(_:).json │ │ ├── iterator.json │ │ ├── iterator │ │ │ ├── element.json │ │ │ └── next().json │ │ ├── lines.json │ │ ├── makeasynciterator().json │ │ ├── map(_:)-155e0.json │ │ ├── map(_:)-1cjy6.json │ │ ├── max().json │ │ ├── max(by:).json │ │ ├── min().json │ │ ├── min(by:).json │ │ ├── prefix(_:).json │ │ ├── prefix(while:).json │ │ ├── reduce(_:_:).json │ │ ├── reduce(into:_:).json │ │ └── unicodescalars.json │ │ ├── asyncstreamvalue.json │ │ ├── asyncthrowingpublisher.json │ │ ├── asyncthrowingpublisher │ │ ├── allsatisfy(_:).json │ │ ├── asynciterator.json │ │ ├── asyncsequence-implementations.json │ │ ├── characters.json │ │ ├── compactmap(_:)-8it2j.json │ │ ├── compactmap(_:)-zh70.json │ │ ├── contains(_:).json │ │ ├── contains(where:).json │ │ ├── drop(while:).json │ │ ├── dropfirst(_:).json │ │ ├── element.json │ │ ├── filter(_:).json │ │ ├── first(where:).json │ │ ├── flatmap(_:)-36cmu.json │ │ ├── flatmap(_:)-39oak.json │ │ ├── init(_:).json │ │ ├── iterator.json │ │ ├── iterator │ │ │ ├── element.json │ │ │ └── next().json │ │ ├── lines.json │ │ ├── makeasynciterator().json │ │ ├── map(_:)-2gzj6.json │ │ ├── map(_:)-3wux3.json │ │ ├── max().json │ │ ├── max(by:).json │ │ ├── min().json │ │ ├── min(by:).json │ │ ├── prefix(_:).json │ │ ├── prefix(while:).json │ │ ├── reduce(_:_:).json │ │ ├── reduce(into:_:).json │ │ └── unicodescalars.json │ │ ├── centralmanager.json │ │ ├── centralmanager │ │ ├── cancelperipheralconnection(_:).json │ │ ├── centralmanager.json │ │ ├── centralmanagerdelegate.json │ │ ├── connect(_:options:).json │ │ ├── connectedperipheralchannel.json │ │ ├── disconnectedperipheralschannel.json │ │ ├── err.json │ │ ├── err │ │ │ ├── badstate(_:).json │ │ │ ├── localizeddescription.json │ │ │ ├── unknownerror.json │ │ │ └── wrongmanager.json │ │ ├── init(centralmanager:).json │ │ ├── init(centralmanagerdelegate:queue:options:).json │ │ ├── isscanningchannel.json │ │ ├── retrieveconnectedperipherals(withservices:).json │ │ ├── retrieveperipherals(withidentifiers:).json │ │ ├── scanforperipherals(withservices:).json │ │ ├── scanresultschannel.json │ │ ├── statechannel.json │ │ └── stopscan().json │ │ ├── combine.json │ │ ├── combine │ │ ├── publisher.json │ │ └── publisher │ │ │ └── value.json │ │ ├── corebluetooth.json │ │ ├── corebluetooth │ │ ├── cbmanagerstate.json │ │ └── cbmanagerstate │ │ │ ├── customdebugstringconvertible-implementations.json │ │ │ ├── customstringconvertible-implementations.json │ │ │ ├── debugdescription.json │ │ │ └── description.json │ │ ├── foundation.json │ │ ├── foundation │ │ ├── data.json │ │ └── data │ │ │ ├── hexencodedstring(options:separator:).json │ │ │ ├── hexencodingoptions.json │ │ │ └── hexencodingoptions │ │ │ ├── !=(_:_:).json │ │ │ ├── contains(_:).json │ │ │ ├── equatable-implementations.json │ │ │ ├── formintersection(_:).json │ │ │ ├── formsymmetricdifference(_:).json │ │ │ ├── formunion(_:).json │ │ │ ├── init().json │ │ │ ├── init(_:).json │ │ │ ├── init(arrayliteral:).json │ │ │ ├── init(rawvalue:).json │ │ │ ├── insert(_:).json │ │ │ ├── intersection(_:).json │ │ │ ├── isdisjoint(with:).json │ │ │ ├── isempty.json │ │ │ ├── isstrictsubset(of:).json │ │ │ ├── isstrictsuperset(of:).json │ │ │ ├── issubset(of:).json │ │ │ ├── issuperset(of:).json │ │ │ ├── optionset-implementations.json │ │ │ ├── rawvalue.json │ │ │ ├── remove(_:).json │ │ │ ├── reverseendianness.json │ │ │ ├── setalgebra-implementations.json │ │ │ ├── subtract(_:).json │ │ │ ├── subtracting(_:).json │ │ │ ├── symmetricdifference(_:).json │ │ │ ├── union(_:).json │ │ │ ├── update(with:).json │ │ │ └── uppercase.json │ │ ├── peripheral.json │ │ ├── peripheral │ │ ├── discovercharacteristics(_:for:).json │ │ ├── discoverdescriptors(for:).json │ │ ├── discoverincludedservices(_:for:).json │ │ ├── discoverservices(serviceuuids:).json │ │ ├── err.json │ │ ├── err │ │ │ ├── !=(_:_:).json │ │ │ ├── baddelegate.json │ │ │ ├── equatable-implementations.json │ │ │ ├── error-implementations.json │ │ │ └── localizeddescription.json │ │ ├── init(peripheral:delegate:).json │ │ ├── listenvalues(for:).json │ │ ├── name.json │ │ ├── peripheral.json │ │ ├── peripheraldelegate.json │ │ ├── peripheralstatechannel.json │ │ ├── readrssi().json │ │ ├── readvalue(for:)-880d.json │ │ ├── readvalue(for:)-8wwmb.json │ │ ├── services.json │ │ ├── setnotifyvalue(_:for:).json │ │ ├── writevalue(_:for:).json │ │ ├── writevaluewithoutresponse(_:for:).json │ │ └── writevaluewithresponse(_:for:).json │ │ ├── reactivecentralmanagerdelegate.json │ │ ├── reactivecentralmanagerdelegate │ │ ├── centralmanager(_:didconnect:).json │ │ ├── centralmanager(_:diddisconnectperipheral:error:).json │ │ ├── centralmanager(_:diddiscover:advertisementdata:rssi:).json │ │ ├── centralmanager(_:didfailtoconnect:error:).json │ │ └── centralmanagerdidupdatestate(_:).json │ │ ├── reactiveperipheraldelegate.json │ │ ├── reactiveperipheraldelegate │ │ ├── peripheral(_:diddiscovercharacteristicsfor:error:).json │ │ ├── peripheral(_:diddiscoverdescriptorsfor:error:).json │ │ ├── peripheral(_:diddiscoverservices:).json │ │ ├── peripheral(_:didmodifyservices:).json │ │ ├── peripheral(_:didreadrssi:error:).json │ │ ├── peripheral(_:didupdatenotificationstatefor:error:).json │ │ ├── peripheral(_:didupdatevaluefor:error:)-2btq1.json │ │ ├── peripheral(_:didupdatevaluefor:error:)-7o3t2.json │ │ ├── peripheral(_:didwritevaluefor:error:)-29s4r.json │ │ ├── peripheral(_:didwritevaluefor:error:)-2ei85.json │ │ ├── peripheraldidupdatename(_:).json │ │ └── peripheralisready(tosendwritewithoutresponse:).json │ │ ├── rssi.json │ │ ├── rssi │ │ ├── !=(_:_:).json │ │ ├── bad.json │ │ ├── equatable-implementations.json │ │ ├── good.json │ │ ├── init(integerliteral:).json │ │ ├── integerliteraltype.json │ │ ├── ok.json │ │ ├── outofrange.json │ │ ├── practicalworst.json │ │ ├── signal-swift.enum.json │ │ ├── signal-swift.enum │ │ │ ├── !=(_:_:).json │ │ │ ├── bad.json │ │ │ ├── equatable-implementations.json │ │ │ ├── good.json │ │ │ ├── ok.json │ │ │ ├── outofrange.json │ │ │ └── practicalworst.json │ │ ├── signal-swift.property.json │ │ └── value.json │ │ ├── scanresult.json │ │ └── scanresult │ │ ├── advertisementdata.json │ │ ├── name.json │ │ ├── peripheral.json │ │ └── rssi.json ├── developer-og-twitter.jpg ├── developer-og.jpg ├── documentation │ └── ios_ble_library │ │ ├── advertisementdata │ │ ├── !=(_:_:) │ │ │ └── index.html │ │ ├── ==(_:_:) │ │ │ └── index.html │ │ ├── advertisedid() │ │ │ └── index.html │ │ ├── connectablemock │ │ │ └── index.html │ │ ├── equatable-implementations │ │ │ └── index.html │ │ ├── hash(into:) │ │ │ └── index.html │ │ ├── index.html │ │ ├── init() │ │ │ └── index.html │ │ ├── init(_:) │ │ │ └── index.html │ │ ├── isconnectable │ │ │ └── index.html │ │ ├── localname │ │ │ └── index.html │ │ ├── manufacturerdata │ │ │ └── index.html │ │ ├── overflowserviceuuids │ │ │ └── index.html │ │ ├── rawdata │ │ │ └── index.html │ │ ├── servicedata │ │ │ └── index.html │ │ ├── serviceuuids │ │ │ └── index.html │ │ ├── solicitedserviceuuids │ │ │ └── index.html │ │ ├── txpowerlevel │ │ │ └── index.html │ │ └── unconnectablemock │ │ │ └── index.html │ │ ├── asynccharacteristicdata │ │ ├── allsatisfy(_:) │ │ │ └── index.html │ │ ├── asyncsequence-implementations │ │ │ └── index.html │ │ ├── compactmap(_:)-3l977 │ │ │ └── index.html │ │ ├── compactmap(_:)-8kqp1 │ │ │ └── index.html │ │ ├── contains(_:) │ │ │ └── index.html │ │ ├── contains(where:) │ │ │ └── index.html │ │ ├── drop(while:) │ │ │ └── index.html │ │ ├── dropfirst(_:) │ │ │ └── index.html │ │ ├── element │ │ │ └── index.html │ │ ├── filter(_:) │ │ │ └── index.html │ │ ├── first(where:) │ │ │ └── index.html │ │ ├── flatmap(_:)-50ncz │ │ │ └── index.html │ │ ├── flatmap(_:)-8auld │ │ │ └── index.html │ │ ├── index.html │ │ ├── makeasynciterator() │ │ │ └── index.html │ │ ├── map(_:)-70277 │ │ │ └── index.html │ │ ├── map(_:)-8x8iq │ │ │ └── index.html │ │ ├── max(by:) │ │ │ └── index.html │ │ ├── min(by:) │ │ │ └── index.html │ │ ├── next() │ │ │ └── index.html │ │ ├── prefix(_:) │ │ │ └── index.html │ │ ├── prefix(while:) │ │ │ └── index.html │ │ ├── reduce(_:_:) │ │ │ └── index.html │ │ └── reduce(into:_:) │ │ │ └── index.html │ │ ├── asyncpublisher │ │ ├── allsatisfy(_:) │ │ │ └── index.html │ │ ├── asynciterator │ │ │ └── index.html │ │ ├── asyncsequence-implementations │ │ │ └── index.html │ │ ├── characters │ │ │ └── index.html │ │ ├── compactmap(_:)-2ziwe │ │ │ └── index.html │ │ ├── compactmap(_:)-746g3 │ │ │ └── index.html │ │ ├── contains(_:) │ │ │ └── index.html │ │ ├── contains(where:) │ │ │ └── index.html │ │ ├── drop(while:) │ │ │ └── index.html │ │ ├── dropfirst(_:) │ │ │ └── index.html │ │ ├── element │ │ │ └── index.html │ │ ├── filter(_:) │ │ │ └── index.html │ │ ├── first(where:) │ │ │ └── index.html │ │ ├── flatmap(_:)-648jy │ │ │ └── index.html │ │ ├── flatmap(_:)-9aeej │ │ │ └── index.html │ │ ├── index.html │ │ ├── init(_:) │ │ │ └── index.html │ │ ├── iterator │ │ │ ├── element │ │ │ │ └── index.html │ │ │ ├── index.html │ │ │ └── next() │ │ │ │ └── index.html │ │ ├── lines │ │ │ └── index.html │ │ ├── makeasynciterator() │ │ │ └── index.html │ │ ├── map(_:)-155e0 │ │ │ └── index.html │ │ ├── map(_:)-1cjy6 │ │ │ └── index.html │ │ ├── max() │ │ │ └── index.html │ │ ├── max(by:) │ │ │ └── index.html │ │ ├── min() │ │ │ └── index.html │ │ ├── min(by:) │ │ │ └── index.html │ │ ├── prefix(_:) │ │ │ └── index.html │ │ ├── prefix(while:) │ │ │ └── index.html │ │ ├── reduce(_:_:) │ │ │ └── index.html │ │ ├── reduce(into:_:) │ │ │ └── index.html │ │ └── unicodescalars │ │ │ └── index.html │ │ ├── asyncstreamvalue │ │ └── index.html │ │ ├── asyncthrowingpublisher │ │ ├── allsatisfy(_:) │ │ │ └── index.html │ │ ├── asynciterator │ │ │ └── index.html │ │ ├── asyncsequence-implementations │ │ │ └── index.html │ │ ├── characters │ │ │ └── index.html │ │ ├── compactmap(_:)-8it2j │ │ │ └── index.html │ │ ├── compactmap(_:)-zh70 │ │ │ └── index.html │ │ ├── contains(_:) │ │ │ └── index.html │ │ ├── contains(where:) │ │ │ └── index.html │ │ ├── drop(while:) │ │ │ └── index.html │ │ ├── dropfirst(_:) │ │ │ └── index.html │ │ ├── element │ │ │ └── index.html │ │ ├── filter(_:) │ │ │ └── index.html │ │ ├── first(where:) │ │ │ └── index.html │ │ ├── flatmap(_:)-36cmu │ │ │ └── index.html │ │ ├── flatmap(_:)-39oak │ │ │ └── index.html │ │ ├── index.html │ │ ├── init(_:) │ │ │ └── index.html │ │ ├── iterator │ │ │ ├── element │ │ │ │ └── index.html │ │ │ ├── index.html │ │ │ └── next() │ │ │ │ └── index.html │ │ ├── lines │ │ │ └── index.html │ │ ├── makeasynciterator() │ │ │ └── index.html │ │ ├── map(_:)-2gzj6 │ │ │ └── index.html │ │ ├── map(_:)-3wux3 │ │ │ └── index.html │ │ ├── max() │ │ │ └── index.html │ │ ├── max(by:) │ │ │ └── index.html │ │ ├── min() │ │ │ └── index.html │ │ ├── min(by:) │ │ │ └── index.html │ │ ├── prefix(_:) │ │ │ └── index.html │ │ ├── prefix(while:) │ │ │ └── index.html │ │ ├── reduce(_:_:) │ │ │ └── index.html │ │ ├── reduce(into:_:) │ │ │ └── index.html │ │ └── unicodescalars │ │ │ └── index.html │ │ ├── centralmanager │ │ ├── cancelperipheralconnection(_:) │ │ │ └── index.html │ │ ├── centralmanager │ │ │ └── index.html │ │ ├── centralmanagerdelegate │ │ │ └── index.html │ │ ├── connect(_:options:) │ │ │ └── index.html │ │ ├── connectedperipheralchannel │ │ │ └── index.html │ │ ├── disconnectedperipheralschannel │ │ │ └── index.html │ │ ├── err │ │ │ ├── badstate(_:) │ │ │ │ └── index.html │ │ │ ├── index.html │ │ │ ├── localizeddescription │ │ │ │ └── index.html │ │ │ ├── unknownerror │ │ │ │ └── index.html │ │ │ └── wrongmanager │ │ │ │ └── index.html │ │ ├── index.html │ │ ├── init(centralmanager:) │ │ │ └── index.html │ │ ├── init(centralmanagerdelegate:queue:options:) │ │ │ └── index.html │ │ ├── isscanningchannel │ │ │ └── index.html │ │ ├── retrieveconnectedperipherals(withservices:) │ │ │ └── index.html │ │ ├── retrieveperipherals(withidentifiers:) │ │ │ └── index.html │ │ ├── scanforperipherals(withservices:) │ │ │ └── index.html │ │ ├── scanresultschannel │ │ │ └── index.html │ │ ├── statechannel │ │ │ └── index.html │ │ └── stopscan() │ │ │ └── index.html │ │ ├── combine │ │ ├── index.html │ │ └── publisher │ │ │ ├── index.html │ │ │ └── value │ │ │ └── index.html │ │ ├── corebluetooth │ │ ├── cbmanagerstate │ │ │ ├── customdebugstringconvertible-implementations │ │ │ │ └── index.html │ │ │ ├── customstringconvertible-implementations │ │ │ │ └── index.html │ │ │ ├── debugdescription │ │ │ │ └── index.html │ │ │ ├── description │ │ │ │ └── index.html │ │ │ └── index.html │ │ └── index.html │ │ ├── foundation │ │ ├── data │ │ │ ├── hexencodedstring(options:separator:) │ │ │ │ └── index.html │ │ │ ├── hexencodingoptions │ │ │ │ ├── !=(_:_:) │ │ │ │ │ └── index.html │ │ │ │ ├── contains(_:) │ │ │ │ │ └── index.html │ │ │ │ ├── equatable-implementations │ │ │ │ │ └── index.html │ │ │ │ ├── formintersection(_:) │ │ │ │ │ └── index.html │ │ │ │ ├── formsymmetricdifference(_:) │ │ │ │ │ └── index.html │ │ │ │ ├── formunion(_:) │ │ │ │ │ └── index.html │ │ │ │ ├── index.html │ │ │ │ ├── init() │ │ │ │ │ └── index.html │ │ │ │ ├── init(_:) │ │ │ │ │ └── index.html │ │ │ │ ├── init(arrayliteral:) │ │ │ │ │ └── index.html │ │ │ │ ├── init(rawvalue:) │ │ │ │ │ └── index.html │ │ │ │ ├── insert(_:) │ │ │ │ │ └── index.html │ │ │ │ ├── intersection(_:) │ │ │ │ │ └── index.html │ │ │ │ ├── isdisjoint(with:) │ │ │ │ │ └── index.html │ │ │ │ ├── isempty │ │ │ │ │ └── index.html │ │ │ │ ├── isstrictsubset(of:) │ │ │ │ │ └── index.html │ │ │ │ ├── isstrictsuperset(of:) │ │ │ │ │ └── index.html │ │ │ │ ├── issubset(of:) │ │ │ │ │ └── index.html │ │ │ │ ├── issuperset(of:) │ │ │ │ │ └── index.html │ │ │ │ ├── optionset-implementations │ │ │ │ │ └── index.html │ │ │ │ ├── rawvalue │ │ │ │ │ └── index.html │ │ │ │ ├── remove(_:) │ │ │ │ │ └── index.html │ │ │ │ ├── reverseendianness │ │ │ │ │ └── index.html │ │ │ │ ├── setalgebra-implementations │ │ │ │ │ └── index.html │ │ │ │ ├── subtract(_:) │ │ │ │ │ └── index.html │ │ │ │ ├── subtracting(_:) │ │ │ │ │ └── index.html │ │ │ │ ├── symmetricdifference(_:) │ │ │ │ │ └── index.html │ │ │ │ ├── union(_:) │ │ │ │ │ └── index.html │ │ │ │ ├── update(with:) │ │ │ │ │ └── index.html │ │ │ │ └── uppercase │ │ │ │ │ └── index.html │ │ │ └── index.html │ │ └── index.html │ │ ├── index.html │ │ ├── peripheral │ │ ├── discovercharacteristics(_:for:) │ │ │ └── index.html │ │ ├── discoverdescriptors(for:) │ │ │ └── index.html │ │ ├── discoverincludedservices(_:for:) │ │ │ └── index.html │ │ ├── discoverservices(serviceuuids:) │ │ │ └── index.html │ │ ├── err │ │ │ ├── !=(_:_:) │ │ │ │ └── index.html │ │ │ ├── baddelegate │ │ │ │ └── index.html │ │ │ ├── equatable-implementations │ │ │ │ └── index.html │ │ │ ├── error-implementations │ │ │ │ └── index.html │ │ │ ├── index.html │ │ │ └── localizeddescription │ │ │ │ └── index.html │ │ ├── index.html │ │ ├── init(peripheral:delegate:) │ │ │ └── index.html │ │ ├── listenvalues(for:) │ │ │ └── index.html │ │ ├── name │ │ │ └── index.html │ │ ├── peripheral │ │ │ └── index.html │ │ ├── peripheraldelegate │ │ │ └── index.html │ │ ├── peripheralstatechannel │ │ │ └── index.html │ │ ├── readrssi() │ │ │ └── index.html │ │ ├── readvalue(for:)-880d │ │ │ └── index.html │ │ ├── readvalue(for:)-8wwmb │ │ │ └── index.html │ │ ├── services │ │ │ └── index.html │ │ ├── setnotifyvalue(_:for:) │ │ │ └── index.html │ │ ├── writevalue(_:for:) │ │ │ └── index.html │ │ ├── writevaluewithoutresponse(_:for:) │ │ │ └── index.html │ │ └── writevaluewithresponse(_:for:) │ │ │ └── index.html │ │ ├── reactivecentralmanagerdelegate │ │ ├── centralmanager(_:didconnect:) │ │ │ └── index.html │ │ ├── centralmanager(_:diddisconnectperipheral:error:) │ │ │ └── index.html │ │ ├── centralmanager(_:diddiscover:advertisementdata:rssi:) │ │ │ └── index.html │ │ ├── centralmanager(_:didfailtoconnect:error:) │ │ │ └── index.html │ │ ├── centralmanagerdidupdatestate(_:) │ │ │ └── index.html │ │ └── index.html │ │ ├── reactiveperipheraldelegate │ │ ├── index.html │ │ ├── peripheral(_:diddiscovercharacteristicsfor:error:) │ │ │ └── index.html │ │ ├── peripheral(_:diddiscoverdescriptorsfor:error:) │ │ │ └── index.html │ │ ├── peripheral(_:diddiscoverservices:) │ │ │ └── index.html │ │ ├── peripheral(_:didmodifyservices:) │ │ │ └── index.html │ │ ├── peripheral(_:didreadrssi:error:) │ │ │ └── index.html │ │ ├── peripheral(_:didupdatenotificationstatefor:error:) │ │ │ └── index.html │ │ ├── peripheral(_:didupdatevaluefor:error:)-2btq1 │ │ │ └── index.html │ │ ├── peripheral(_:didupdatevaluefor:error:)-7o3t2 │ │ │ └── index.html │ │ ├── peripheral(_:didwritevaluefor:error:)-29s4r │ │ │ └── index.html │ │ ├── peripheral(_:didwritevaluefor:error:)-2ei85 │ │ │ └── index.html │ │ ├── peripheraldidupdatename(_:) │ │ │ └── index.html │ │ └── peripheralisready(tosendwritewithoutresponse:) │ │ │ └── index.html │ │ ├── rssi │ │ ├── !=(_:_:) │ │ │ └── index.html │ │ ├── bad │ │ │ └── index.html │ │ ├── equatable-implementations │ │ │ └── index.html │ │ ├── good │ │ │ └── index.html │ │ ├── index.html │ │ ├── init(integerliteral:) │ │ │ └── index.html │ │ ├── integerliteraltype │ │ │ └── index.html │ │ ├── ok │ │ │ └── index.html │ │ ├── outofrange │ │ │ └── index.html │ │ ├── practicalworst │ │ │ └── index.html │ │ ├── signal-swift.enum │ │ │ ├── !=(_:_:) │ │ │ │ └── index.html │ │ │ ├── bad │ │ │ │ └── index.html │ │ │ ├── equatable-implementations │ │ │ │ └── index.html │ │ │ ├── good │ │ │ │ └── index.html │ │ │ ├── index.html │ │ │ ├── ok │ │ │ │ └── index.html │ │ │ ├── outofrange │ │ │ │ └── index.html │ │ │ └── practicalworst │ │ │ │ └── index.html │ │ ├── signal-swift.property │ │ │ └── index.html │ │ └── value │ │ │ └── index.html │ │ └── scanresult │ │ ├── advertisementdata │ │ └── index.html │ │ ├── index.html │ │ ├── name │ │ └── index.html │ │ ├── peripheral │ │ └── index.html │ │ └── rssi │ │ └── index.html ├── favicon.ico ├── favicon.svg ├── img │ ├── added-icon.d6f7e47d.svg │ ├── deprecated-icon.015b4f17.svg │ ├── modified-icon.f496e73d.svg │ └── no-image@2x.df2a0a50.png ├── index.html ├── index │ └── index.json ├── js │ ├── chunk-2d0d3105.cd72cc8e.js │ ├── chunk-c0335d80.76a68cc5.js │ ├── chunk-vendors.ba2dd0cb.js │ ├── documentation-topic.57e91f8a.js │ ├── documentation-topic~topic.1679ec90.js │ ├── documentation-topic~topic~tutorials-overview.90c61522.js │ ├── highlight-js-bash.1b52852f.js │ ├── highlight-js-c.d1db3f17.js │ ├── highlight-js-cpp.eaddddbe.js │ ├── highlight-js-css.75eab1fe.js │ ├── highlight-js-custom-markdown.7cffc4b3.js │ ├── highlight-js-custom-swift.5cda5c20.js │ ├── highlight-js-diff.62d66733.js │ ├── highlight-js-http.163e45b6.js │ ├── highlight-js-java.8326d9d8.js │ ├── highlight-js-javascript.acb8a8eb.js │ ├── highlight-js-json.471128d2.js │ ├── highlight-js-llvm.6100b125.js │ ├── highlight-js-markdown.90077643.js │ ├── highlight-js-objectivec.bcdf5156.js │ ├── highlight-js-perl.757d7b6f.js │ ├── highlight-js-php.cc8d6c27.js │ ├── highlight-js-python.c214ed92.js │ ├── highlight-js-ruby.f889d392.js │ ├── highlight-js-scss.62ee18da.js │ ├── highlight-js-shell.dd7f411f.js │ ├── highlight-js-swift.84f3e88c.js │ ├── highlight-js-xml.9c3688c7.js │ ├── index.e8a5d294.js │ ├── topic.8cd0c0c4.js │ └── tutorials-overview.2a32cd6f.js └── metadata.json ├── format.swift-format └── res └── Screenshot-1.png /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | /.build 3 | /Packages 4 | /*.xcodeproj 5 | xcuserdata/ 6 | DerivedData/ 7 | .swiftpm/config/registries.json 8 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata 9 | .netrc 10 | .idea/ 11 | .vscode/ 12 | 13 | __pycache__ -------------------------------------------------------------------------------- /.swiftpm/xcode/xcshareddata/xcschemes/iOS-BLE-Library.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 11 | 14 | 15 | 16 | 17 | 18 | 24 | 30 | 31 | 32 | 33 | 34 | 40 | 41 | 51 | 52 | 58 | 59 | 65 | 66 | 67 | 68 | 70 | 71 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /.swiftpm/xcode/xcshareddata/xcschemes/iOS-BLE-LibraryTests.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 16 | 18 | 24 | 25 | 26 | 27 | 28 | 38 | 39 | 45 | 46 | 48 | 49 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'activesupport', '~> 7.0', '>= 7.0.8' 4 | gem 'cocoapods' 5 | -------------------------------------------------------------------------------- /IOS-BLE-Library-Mock.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'IOS-BLE-Library-Mock' 3 | s.swift_version = '5.0' 4 | s.version = ENV['LIB_VERSION'] 5 | s.summary = 'Extension for standard CoreBluetooth framework that is based on Combine and brings Reactive Approach. This version of the library uses CoreBluetoothMock for testing and running on simulator. But it can be usen on real devices and in production as well.' 6 | s.homepage = 'https://github.com/NordicSemiconductor/IOS-BLE-Library' 7 | s.license = { :type => 'BSD-3-Clause', :file => 'LICENSE' } 8 | s.author = { 'Nordic Semiconductor ASA' => 'mag@nordicsemi.no' } 9 | s.source = { :git => 'https://github.com/NordicSemiconductor/IOS-BLE-Library.git', :tag => s.version.to_s } 10 | s.platforms = { :ios => '13.0', :osx => '12' } 11 | s.source_files = 'Sources/iOS-BLE-Library-Mock/**/*' 12 | 13 | s.dependency 'CoreBluetoothMock', '~> 0.17.0' 14 | end -------------------------------------------------------------------------------- /IOS-BLE-Library.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'IOS-BLE-Library' 3 | s.swift_version = '5.0' 4 | s.version = ENV['LIB_VERSION'] 5 | s.summary = 'Extension for standard CoreBluetooth framework that is based on Combine and brings Reactive Approach.' 6 | s.homepage = 'https://github.com/NordicSemiconductor/IOS-BLE-Library' 7 | s.license = { :type => 'BSD-3-Clause', :file => 'LICENSE' } 8 | s.author = { 'Nordic Semiconductor ASA' => 'mag@nordicsemi.no' } 9 | s.source = { :git => 'https://github.com/NordicSemiconductor/IOS-BLE-Library.git', :tag => s.version.to_s } 10 | s.platforms = { :ios => '13.0', :osx => '12' } 11 | s.source_files = 'Sources/iOS-BLE-Library/**/*' 12 | end 13 | 14 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2023, Nordic Semiconductor 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this 9 | list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright notice, 12 | this list of conditions and the following disclaimer in the documentation 13 | and/or other materials provided with the distribution. 14 | 15 | 3. Neither the name of the copyright holder nor the names of its 16 | contributors may be used to endorse or promote products derived from 17 | this software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 23 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 25 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 26 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | -------------------------------------------------------------------------------- /Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "pins" : [ 3 | { 4 | "identity" : "corebluetoothmock-collection", 5 | "kind" : "remoteSourceControl", 6 | "location" : "https://github.com/NickKibish/CoreBluetoothMock-Collection.git", 7 | "state" : { 8 | "revision" : "91fc016e9345f37d0b4539f9fc6c270d6d5d6f75", 9 | "version" : "1.0.0" 10 | } 11 | }, 12 | { 13 | "identity" : "ios-bluetooth-numbers-database", 14 | "kind" : "remoteSourceControl", 15 | "location" : "https://github.com/NickKibish/iOS-Bluetooth-Numbers-Database.git", 16 | "state" : { 17 | "revision" : "40ae8d7050d16fc2603c314dd560a7992c35f56f", 18 | "version" : "1.0.0" 19 | } 20 | }, 21 | { 22 | "identity" : "ios-corebluetooth-mock", 23 | "kind" : "remoteSourceControl", 24 | "location" : "https://github.com/NordicSemiconductor/IOS-CoreBluetooth-Mock.git", 25 | "state" : { 26 | "revision" : "194863075520d244f710fddd66f4f111c21661ef", 27 | "version" : "0.17.0" 28 | } 29 | }, 30 | { 31 | "identity" : "swift-docc-plugin", 32 | "kind" : "remoteSourceControl", 33 | "location" : "https://github.com/apple/swift-docc-plugin", 34 | "state" : { 35 | "revision" : "26ac5758409154cc448d7ab82389c520fa8a8247", 36 | "version" : "1.3.0" 37 | } 38 | }, 39 | { 40 | "identity" : "swift-docc-symbolkit", 41 | "kind" : "remoteSourceControl", 42 | "location" : "https://github.com/apple/swift-docc-symbolkit", 43 | "state" : { 44 | "revision" : "b45d1f2ed151d057b54504d653e0da5552844e34", 45 | "version" : "1.0.0" 46 | } 47 | } 48 | ], 49 | "version" : 2 50 | } 51 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.6 2 | import PackageDescription 3 | 4 | let package = Package( 5 | name: "iOS-BLE-Library", 6 | platforms: [ 7 | .iOS(.v13), 8 | .macOS(.v10_15), 9 | .watchOS(.v6) 10 | ], 11 | products: [ 12 | .library(name: "iOS-BLE-Library", targets: ["iOS-BLE-Library"]), 13 | .library(name: "iOS-BLE-Library-Mock", targets: ["iOS-BLE-Library-Mock"]), 14 | ], 15 | dependencies: [ 16 | .package(url: "https://github.com/NordicSemiconductor/IOS-CoreBluetooth-Mock.git", from: "0.17.0"), 17 | .package(url: "https://github.com/NickKibish/CoreBluetoothMock-Collection.git", from: "1.0.0"), 18 | .package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0"), 19 | ], 20 | targets: [ 21 | .target(name: "iOS-BLE-Library"), 22 | .target(name: "iOS-BLE-Library-Mock", dependencies: ["iOS-BLE-Library", .product(name: "CoreBluetoothMock", package: "IOS-CoreBluetooth-Mock")]), 23 | .testTarget(name: "iOS-BLE-LibraryTests", dependencies: ["iOS-BLE-Library-Mock", .product(name: "CoreBluetoothMock-Collection", package: "CoreBluetoothMock-Collection")]), 24 | ] 25 | ) 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![Platforms](https://img.shields.io/badge/platforms-iOS%20|%20macOS-333333.svg) 2 | 3 | # iOS-BLE-Library 4 | 5 | This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework. 6 | 7 | # Library Versions 8 | 9 | This package contains two versions of the library: 10 | * `iOS-BLE-Library` - the library that uses the native CoreBluetooth API. 11 | * `iOS-BLE-Library-Mock` - the library that uses the [CoreBluetoothMock](https://github.com/NordicSemiconductor/IOS-CoreBluetooth-Mock) API. 12 | 13 | # Installation 14 | ## Swift Package Manager 15 | The library can be installed using Swift Package Manager. 16 | 17 | You can choose between two versions of the library: 18 | ![`iOS-BLE-Library`](res/Screenshot-1.png) 19 | 20 | Or you can add it as a dependency to your library: 21 | ```swift 22 | 23 | let package = Package( 24 | /// . . . 25 | dependencies: [ 26 | // Set the link to the library and choose the version 27 | .package(url: "https://github.com/NordicSemiconductor/IOS-BLE-Library.git", from: "0.3.1"), 28 | ], 29 | targets: [ 30 | .target( 31 | name: "MyLib", 32 | dependencies: [ 33 | // You can use "native" CoreBluetooth API 34 | .product(name: "iOS-BLE-Library", package: "iOS-BLE-Library") 35 | ] 36 | ), 37 | .testTarget( 38 | name: "MyLibTests", 39 | dependencies: [ 40 | "MyLib", 41 | // Or you can use the CoreBluetoothMock API 42 | .product(name: "iOS-BLE-Library-Mock", package: "iOS-BLE-Library") 43 | ] 44 | ), 45 | ] 46 | ) 47 | ``` 48 | 49 | ## CocoaPods 50 | The library can be installed using CocoaPods. 51 | 52 | Add the following line to your Podfile: 53 | ```ruby 54 | pod 'IOS-BLE-Library', '~> 0.3.2' 55 | ``` 56 | 57 | or 58 | ```ruby 59 | pod 'IOS-BLE-Library-Mock', '~> 0.3.2' 60 | ``` 61 | 62 | # Documentation & Examples 63 | Please check the [Documentation Page](https://nordicsemiconductor.github.io/IOS-BLE-Library/documentation/ios_ble_library/) to start using the library. 64 | 65 | Also you can check [iOS-nRF-Toolbox](https://github.com/NordicSemiconductor/IOS-nRF-Toolbox/tree/develop) to find more examples. 66 | 67 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/CentralManager/Model/ScanResult.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 19/04/2023. 6 | // 7 | 8 | import CoreBluetoothMock 9 | import Foundation 10 | 11 | public struct ScanResult { 12 | public let peripheral: CBPeripheral 13 | public let rssi: RSSI 14 | public let advertisementData: AdvertisementData 15 | 16 | init(peripheral: CBPeripheral, rssi: NSNumber, advertisementData: [String: Any]) { 17 | self.peripheral = peripheral 18 | self.rssi = RSSI(integerLiteral: rssi.intValue) 19 | self.advertisementData = AdvertisementData(advertisementData) 20 | } 21 | 22 | public var name: String? { 23 | peripheral.name ?? advertisementData.localName 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/CentralManager/ReactiveCentralManagerDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 18/04/2023. 6 | // 7 | 8 | import Combine 9 | import CoreBluetoothMock 10 | import Foundation 11 | 12 | // MARK: - ReactiveCentralManagerDelegate 13 | 14 | open class ReactiveCentralManagerDelegate: NSObject, CBCentralManagerDelegate { 15 | enum BluetoothError: Error { 16 | case failedToConnect 17 | } 18 | 19 | let stateSubject = CurrentValueSubject(.unknown) 20 | let scanResultSubject = PassthroughSubject() 21 | let connectedPeripheralSubject = PassthroughSubject<(CBPeripheral, Error?), Never>() 22 | let disconnectedPeripheralsSubject = PassthroughSubject<(CBPeripheral, Error?), Never>() 23 | let connectionEventSubject = PassthroughSubject<(CBPeripheral, CBConnectionEvent), Never>() 24 | 25 | // MARK: Monitoring Connections with Peripherals 26 | open func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) { 27 | connectedPeripheralSubject.send((peripheral, nil)) 28 | } 29 | 30 | open func centralManager( 31 | _ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, 32 | error: Error? 33 | ) { 34 | disconnectedPeripheralsSubject.send((peripheral, error)) 35 | } 36 | 37 | open func centralManager( 38 | _ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, 39 | error: Error? 40 | ) { 41 | connectedPeripheralSubject.send((peripheral, error)) 42 | } 43 | 44 | #if !os(macOS) 45 | open func centralManager( 46 | _ central: CBCentralManager, 47 | connectionEventDidOccur event: CBConnectionEvent, 48 | for peripheral: CBPeripheral 49 | ) { 50 | connectionEventSubject.send((peripheral, event)) 51 | } 52 | #endif 53 | 54 | // MARK: Discovering and Retrieving Peripherals 55 | 56 | open func centralManager( 57 | _ central: CBCentralManager, didDiscover peripheral: CBPeripheral, 58 | advertisementData: [String: Any], rssi RSSI: NSNumber 59 | ) { 60 | let scanResult = ScanResult( 61 | peripheral: peripheral, 62 | rssi: RSSI, 63 | advertisementData: advertisementData 64 | ) 65 | scanResultSubject.send(scanResult) 66 | } 67 | 68 | // MARK: Monitoring the Central Manager’s State 69 | 70 | open func centralManagerDidUpdateState(_ central: CBCentralManager) { 71 | stateSubject.send(central.state) 72 | } 73 | 74 | // MARK: Monitoring the Central Manager’s Authorization 75 | #if !os(macOS) 76 | public func centralManager( 77 | _ central: CBCentralManager, 78 | didUpdateANCSAuthorizationFor peripheral: CBPeripheral 79 | ) { 80 | unimplementedError() 81 | } 82 | #endif 83 | 84 | // MARK: Instance Methods 85 | // BETA 86 | // func centralManager(CBCentralManager, didDisconnectPeripheral: CBPeripheral, timestamp: CFAbsoluteTime, isReconnecting: Bool, error: Error?) 87 | } 88 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/Documentation.docc/CentralManager/CentralManager.md: -------------------------------------------------------------------------------- 1 | # ``iOS_BLE_Library/CentralManager`` 2 | 3 | ### Create a Central Manager 4 | 5 | ``CentralManager`` is merely a wrapper around `CBCentralManager` with an instance of it inside. 6 | 7 | The new instance of `CBCentralManager` can be created during initialization using ``init(centralManagerDelegate:queue:options:)``, or an existing instance can be passed using ``init(centralManager:)``. 8 | 9 | If you pass a central manager inside ``init(centralManager:)``, it should already have a delegate set. The delegate should be an instance of ``ReactiveCentralManagerDelegate``; otherwise, an error will be thrown. 10 | 11 | ### Channels 12 | 13 | Channels are used to pass through data from the `CBCentralManagerDelegate` methods. 14 | You can consider them as a reactive version of the `CBCentralManagerDelegate` methods. 15 | 16 | In most cases, you will not need to use them directly, as `centralManager`'s methods return proper publishers. However, if you need to handle the data differently (e.g., log all the events), you can subscribe to the channels directly. 17 | 18 | All channels have `Never` as their failure type because they never fail. Some channels, like `CentralManager/connectedPeripheralChannel` or `CentralManager/disconnectedPeripheralsChannel`, send tuples with the peripheral and the error, allowing you to handle errors if needed. Despite this, the failure type remains `Never`, so it will not complete even if an error occurs during the connection or disconnection of the peripheral. 19 | 20 | ```swift 21 | centralManager.connectedPeripheralChannel 22 | .sink { peripheral, error in 23 | if let error = error { 24 | print("Error: \(error)") 25 | } else { 26 | print("New peripheral connected: \(peripheral)" 27 | } 28 | } 29 | .store(in: &cancellables) 30 | ``` 31 | 32 | ## Topics 33 | 34 | ### Initializers 35 | 36 | - ``init(centralManagerDelegate:queue:)`` 37 | - ``init(centralManager:)`` 38 | 39 | ### Instance Properties 40 | 41 | - ``centralManager`` 42 | - ``centralManagerDelegate`` 43 | 44 | ### Scan 45 | 46 | - ``scanForPeripherals(withServices:)`` 47 | - ``stopScan()`` 48 | - ``retrievePeripherals(withIdentifiers:)`` 49 | 50 | ### Connection 51 | 52 | - ``connect(_:options:)`` 53 | - ``cancelPeripheralConnection(_:)`` 54 | - ``retrieveConnectedPeripherals(withServices:)`` 55 | 56 | ### Channels 57 | 58 | - ``stateChannel`` 59 | - ``isScanningChannel`` 60 | - ``scanResultsChannel`` 61 | - ``connectedPeripheralChannel`` 62 | - ``disconnectedPeripheralsChannel`` 63 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/Documentation.docc/CentralManager/CentralManager/connect.md: -------------------------------------------------------------------------------- 1 | # ``iOS_BLE_Library/CentralManager/connect(_:options:)`` 2 | 3 | ## See Also 4 | 5 | - ``CentralManager/connectedPeripheralChannel`` 6 | - ``CentralManager/disconnectedPeripheralsChannel`` 7 | 8 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/Documentation.docc/CentralManager/ReactiveCentralManagerDelegate.md: -------------------------------------------------------------------------------- 1 | # ``iOS_BLE_Library/ReactiveCentralManagerDelegate`` 2 | 3 | Implementation of the `CBCentralManagerDelegate`. 4 | 5 | `ReactiveCentralManagerDelegate` is a class that implements the `CBCentralManagerDelegate` and is an essential part of the ``CentralManager`` class. 6 | 7 | It brings a reactive programming approach, utilizing Combine publishers to seamlessly handle Bluetooth events and data. 8 | This class allows to monitor and respond to events such as peripheral connection, disconnection, and scanning for peripherals. 9 | 10 | It has all needed publishers that are used for handling Bluetooth events and data. 11 | 12 | ## Override 13 | 14 | It's possible to override the default implementation of the `ReactiveCentralManagerDelegate` by creating a new class that inherits from `ReactiveCentralManagerDelegate` and overriding the needed methods. 15 | 16 | However, it's important to call the `super` implementation of the method, otherwise it will break the `CentralManager` functionality. 17 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/Documentation.docc/Documentation.md: -------------------------------------------------------------------------------- 1 | # ``iOS_BLE_Library`` 2 | 3 | This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework. 4 | 5 | The library has been designed to have a simple API similar to the one provided by the CoreBluetooth framework. 6 | So if you are familiar with the CoreBluetooth framework, you will be able to use this library without any problem. 7 | 8 | ## Topics 9 | 10 | ### Central Manager 11 | - ``CentralManager`` 12 | - ``ReactiveCentralManagerDelegate`` 13 | 14 | ### Peripheral 15 | - ``Peripheral`` 16 | - ``ReactivePeripheralDelegate`` 17 | 18 | ### Essentials 19 | - ``iOS_BLE_Library/Combine/Publishers/BluetoothPublisher`` 20 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/Documentation.docc/Peripheral/Peripheral.md: -------------------------------------------------------------------------------- 1 | ``iOS_BLE_Library/Peripheral`` 2 | 3 | ### Create a Peripheral 4 | 5 | 6 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/Utilities/AsyncCharacteristicData.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AsyncCharacteristicData.swift 3 | // iOS-BLE-Library 4 | // 5 | // Created by Dinesh Harjani on 23/8/22. 6 | // 7 | 8 | import CoreBluetoothMock 9 | import Foundation 10 | 11 | public typealias AsyncStreamValue = (characteristic: CBCharacteristic, data: Data?) 12 | 13 | public struct AsyncCharacteristicData: AsyncSequence, AsyncIteratorProtocol { 14 | public typealias Element = Data? 15 | 16 | let serviceUUID: String 17 | let characteristicUUID: String 18 | let stream: AsyncThrowingStream 19 | 20 | public func makeAsyncIterator() -> AsyncCharacteristicData { 21 | self 22 | } 23 | 24 | mutating public func next() async throws -> Element? { 25 | for try await newValue in stream { 26 | guard newValue.characteristic.uuid.uuidString == characteristicUUID, 27 | let service = newValue.characteristic.service, 28 | service.uuid.uuidString == serviceUUID 29 | else { continue } 30 | return newValue.data 31 | } 32 | return nil 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/Utilities/CBManagerState.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CBManagerState.swift 3 | // 4 | // 5 | // Created by Dinesh Harjani on 23/8/22. 6 | // 7 | 8 | import CoreBluetoothMock 9 | import Foundation 10 | 11 | // MARK: - CBManagerState 12 | #if hasFeature(RetroactiveAttribute) 13 | @available(iOS 10.0, *) 14 | @available(macOS 10.13, *) 15 | extension CBManagerState: @retroactive CustomDebugStringConvertible, @retroactive 16 | CustomStringConvertible 17 | { 18 | 19 | public var debugDescription: String { 20 | return description 21 | } 22 | 23 | public var description: String { 24 | switch self { 25 | case .poweredOff: 26 | return "poweredOff" 27 | case .poweredOn: 28 | return "poweredOn" 29 | case .resetting: 30 | return "resetting" 31 | case .unauthorized: 32 | return "unauthorized" 33 | case .unsupported: 34 | return "unsupported" 35 | default: 36 | return "unknown" 37 | } 38 | } 39 | } 40 | #endif 41 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/Utilities/Extensions/CBManagerState+Ext.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 19/04/2023. 6 | // 7 | 8 | import CoreBluetoothMock 9 | import Foundation 10 | 11 | extension CBManagerState { 12 | 13 | var ready: Bool? { 14 | switch self { 15 | case .poweredOn: 16 | return true 17 | case .unknown, .resetting: 18 | return nil 19 | case .poweredOff, .unauthorized, .unsupported: 20 | return false 21 | default: 22 | return false 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/Utilities/Extensions/Data+Ext.swift.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Data.swift 3 | // 4 | // 5 | // Created by Dinesh Harjani on 18/8/22. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: - Data Extension 11 | 12 | extension Data { 13 | 14 | // MARK: HexEncodingOptions 15 | 16 | struct HexEncodingOptions: OptionSet { 17 | 18 | public static let upperCase = HexEncodingOptions(rawValue: 1) 19 | public static let reverseEndianness = HexEncodingOptions(rawValue: 2) 20 | 21 | public let rawValue: Int 22 | 23 | public init(rawValue: Int) { 24 | self.rawValue = rawValue << 0 25 | } 26 | } 27 | 28 | // MARK: hexEncodedString 29 | 30 | func hexEncodedString(options: HexEncodingOptions = [], separator: String = "") 31 | -> String 32 | { 33 | let format = options.contains(.upperCase) ? "%02hhX" : "%02hhx" 34 | 35 | var bytes = self 36 | if options.contains(.reverseEndianness) { 37 | bytes.reverse() 38 | } 39 | return 40 | bytes 41 | .map { String(format: format, $0) } 42 | .joined(separator: separator) 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/Utilities/Logger.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 20/01/2023. 6 | // 7 | 8 | import Foundation 9 | import os 10 | 11 | @available(iOS 14.0, macOS 11, watchOS 7.0, *) 12 | private struct Loggers { 13 | static var loggers: [UUID: Logger] = [:] 14 | } 15 | 16 | struct L { 17 | @inline(__always) 18 | static let enabled: Bool = false 19 | 20 | let subsystem: String 21 | let category: String 22 | 23 | private let shouldLog: Bool 24 | 25 | private let id = UUID() 26 | 27 | init( 28 | subsystem: String = "com.nordicsemi.ios_ble_library", category: String, 29 | enabled: Bool = Self.enabled 30 | ) { 31 | self.subsystem = subsystem 32 | self.category = category 33 | self.shouldLog = enabled 34 | 35 | if #available(iOS 14, macOS 11, watchOS 7, *) { 36 | Loggers.loggers[self.id] = Logger(subsystem: subsystem, category: category) 37 | } 38 | } 39 | 40 | func i(_ msg: String) { 41 | #if DEBUG 42 | if !shouldLog { return } 43 | 44 | if #available(iOS 14, macOS 11, watchOS 7, *) { 45 | Loggers.loggers[id]?.info("\(msg)") 46 | } else { 47 | os_log("%@", type: .info, msg) 48 | } 49 | 50 | #endif 51 | } 52 | 53 | func d(_ msg: String) { 54 | #if DEBUG 55 | if !shouldLog { return } 56 | if #available(iOS 14, macOS 11, watchOS 7, *) { 57 | Loggers.loggers[id]?.debug("\(msg)") 58 | } else { 59 | os_log("%@", type: .debug, msg) 60 | } 61 | #endif 62 | } 63 | 64 | func e(_ msg: String) { 65 | #if DEBUG 66 | if !shouldLog { return } 67 | if #available(iOS 14, macOS 11, watchOS 7, *) { 68 | Loggers.loggers[id]?.error("\(msg)") 69 | } else { 70 | os_log("%@", type: .error, msg) 71 | } 72 | #endif 73 | } 74 | 75 | func f(_ msg: String) { 76 | #if DEBUG 77 | if !shouldLog { return } 78 | if #available(iOS 14, macOS 11, watchOS 7, *) { 79 | Loggers.loggers[id]?.fault("\(msg)") 80 | } else { 81 | os_log("%@", type: .fault, msg) 82 | } 83 | #endif 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/Utilities/Publishers/ContinuationSubscriber.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 05/05/2023. 6 | // 7 | 8 | import Combine 9 | import Foundation 10 | 11 | class ContinuationSubscriber: Subscriber { 12 | 13 | typealias Input = Upstream.Output 14 | typealias Failure = Upstream.Failure 15 | 16 | private let continuation: CheckedContinuation 17 | private var state: State = .waitingForSubscription 18 | private var lock = NSLock() 19 | private var subscription: Subscription? 20 | 21 | enum State { 22 | case waitingForSubscription 23 | case receivedSubscription 24 | case terminated 25 | } 26 | 27 | init(continuation: CheckedContinuation) { 28 | self.continuation = continuation 29 | } 30 | 31 | func receive(subscription: Subscription) { 32 | lock.lock() 33 | guard case .waitingForSubscription = state else { 34 | lock.unlock() 35 | return 36 | } 37 | 38 | self.state = .receivedSubscription 39 | self.subscription = subscription 40 | lock.unlock() 41 | 42 | subscription.request(.max(1)) 43 | } 44 | 45 | func receive(_ input: Upstream.Output) -> Subscribers.Demand { 46 | lock.lock() 47 | guard case .receivedSubscription = state else { 48 | lock.unlock() 49 | return .none 50 | } 51 | self.state = .terminated 52 | continuation.resume(returning: input) 53 | 54 | self.subscription?.cancel() 55 | lock.unlock() 56 | 57 | return .none 58 | } 59 | 60 | func receive(completion: Subscribers.Completion) { 61 | lock.lock() 62 | guard case .receivedSubscription = state else { 63 | lock.unlock() 64 | return 65 | } 66 | 67 | self.state = .terminated 68 | 69 | switch completion { 70 | case .finished: 71 | break 72 | case .failure(let failure): 73 | continuation.resume(throwing: failure) 74 | } 75 | lock.unlock() 76 | } 77 | } 78 | 79 | extension ContinuationSubscriber { 80 | 81 | static func withCheckedContinuation(_ upstream: Upstream) async throws -> Input 82 | where Upstream.Output == Input, Upstream.Failure == Failure { 83 | 84 | try await withCheckedThrowingContinuation { c in 85 | upstream.subscribe(ContinuationSubscriber(continuation: c)) 86 | } 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/Utilities/Publishers/Publishers+Bluetooth.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 05/05/2023. 6 | // 7 | 8 | import Combine 9 | import Foundation 10 | 11 | extension Publisher { 12 | func bluetooth(_ fire: @escaping () -> Void) 13 | -> Publishers.BluetoothPublisher 14 | { 15 | Publishers.BluetoothPublisher(self, fire: fire) 16 | } 17 | } 18 | 19 | extension Publishers { 20 | 21 | /** 22 | A publisher that is used for most of the Bluetooth operations. 23 | 24 | # Overview 25 | This publisher conforms to the `ConnectablePublisher` protocol because most of the Bluetooth operations have to be set up before they can be used. 26 | 27 | It means that the publisher will not emit any values until it is connected. The connection is established by calling the `connect()` or `autoconnect()` methods. 28 | To learn more about the `ConnectablePublisher` protocol, see [Apple's documentation](https://developer.apple.com/documentation/combine/connectablepublisher). 29 | 30 | ```swift 31 | let publisher = centralManager.scanForPeripherals(withServices: nil) 32 | .autoconnect() 33 | // chain of publishers 34 | .sink { 35 | // . . . 36 | } 37 | .store(in: &cancellables) 38 | ``` 39 | */ 40 | class BluetoothPublisher: ConnectablePublisher { 41 | 42 | private let inner: BaseConnectable 43 | 44 | init( 45 | _ publisher: PublisherType, fire: @escaping () -> Void 46 | ) where Output == PublisherType.Output, Failure == PublisherType.Failure { 47 | self.inner = ClosureConnectablePublisher(upstream: publisher, fire: fire) 48 | } 49 | 50 | public func receive(subscriber: S) 51 | where S: Subscriber, Failure == S.Failure, Output == S.Input { 52 | inner.receive(subscriber: subscriber) 53 | } 54 | 55 | public func connect() -> Cancellable { 56 | return inner.connect() 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/Utilities/Publishers/Publishers+Connectable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 05/05/2023. 6 | // 7 | 8 | import Combine 9 | import Foundation 10 | 11 | class BaseConnectable: ConnectablePublisher { 12 | func connect() -> Cancellable { 13 | fatalError() 14 | } 15 | 16 | func receive(subscriber: Downstream) 17 | where Failure == Downstream.Failure, Output == Downstream.Input { 18 | fatalError() 19 | } 20 | } 21 | 22 | class ClosureConnectablePublisher: BaseConnectable< 23 | Upstream.Output, Upstream.Failure 24 | > 25 | { 26 | typealias Output = Upstream.Output 27 | typealias Failure = Upstream.Failure 28 | 29 | let upstream: Upstream 30 | let fire: () -> Void 31 | let onCancel: (() -> Void)? 32 | 33 | init(upstream: Upstream, fire: @escaping () -> Void, onCancel: (() -> Void)? = nil) { 34 | self.upstream = upstream 35 | self.fire = fire 36 | self.onCancel = onCancel 37 | } 38 | 39 | override func receive(subscriber: S) 40 | where S: Subscriber, Failure == S.Failure, Output == S.Input { 41 | upstream.subscribe(subscriber) 42 | } 43 | 44 | override func connect() -> Cancellable { 45 | fire() 46 | return Cancelator(onCancel: onCancel) 47 | } 48 | } 49 | 50 | extension ClosureConnectablePublisher { 51 | struct Cancelator: Cancellable { 52 | let onCancel: (() -> Void)? 53 | 54 | func cancel() { 55 | onCancel?() 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/Utilities/Publishers/Publishers+Peripheral.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 25/04/2023. 6 | // 7 | 8 | import Combine 9 | import CoreBluetoothMock 10 | import Foundation 11 | 12 | extension Publisher where Output == CBPeripheral, Failure == Error { 13 | func peripheral(_ fire: @escaping () -> Void) -> Publishers.Peripheral { 14 | Publishers.Peripheral(self, fire: fire) 15 | } 16 | } 17 | 18 | extension Publishers.Peripheral { 19 | var value: Output { 20 | get async throws { 21 | try await ContinuationSubscriber 22 | .withCheckedContinuation(self) 23 | } 24 | } 25 | } 26 | 27 | extension Publishers { 28 | public class Peripheral: ConnectablePublisher { 29 | public typealias Output = CBPeripheral 30 | public typealias Failure = Error 31 | 32 | private let inner: BaseConnectable 33 | 34 | init( 35 | _ publisher: PublisherType, fire: @escaping () -> Void 36 | ) where Output == PublisherType.Output, Failure == PublisherType.Failure { 37 | self.inner = ClosureConnectablePublisher(upstream: publisher, fire: fire) 38 | } 39 | 40 | public func receive(subscriber: S) 41 | where S: Subscriber, Failure == S.Failure, CBPeripheral == S.Input { 42 | inner.receive(subscriber: subscriber) 43 | } 44 | 45 | public func connect() -> Cancellable { 46 | return inner.connect() 47 | } 48 | } 49 | 50 | public class Service: ConnectablePublisher { 51 | public typealias Output = CBService 52 | public typealias Failure = Error 53 | 54 | private let inner: BaseConnectable 55 | 56 | init( 57 | _ publisher: PublisherType, fire: @escaping () -> Void 58 | ) where Output == PublisherType.Output, Failure == PublisherType.Failure { 59 | self.inner = ClosureConnectablePublisher(upstream: publisher, fire: fire) 60 | } 61 | 62 | public func receive(subscriber: S) 63 | where S: Subscriber, Failure == S.Failure, CBService == S.Input { 64 | inner.receive(subscriber: subscriber) 65 | } 66 | 67 | public func connect() -> Cancellable { 68 | return inner.connect() 69 | } 70 | } 71 | 72 | } 73 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/Utilities/Queue.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 03/11/2023. 6 | // 7 | 8 | import Foundation 9 | 10 | class Node { 11 | var value: T 12 | var next: Node? 13 | 14 | init(value: T) { 15 | self.value = value 16 | } 17 | } 18 | 19 | class Queue { 20 | private var front: Node? 21 | private var rear: Node? 22 | private let accessQueue = DispatchQueue(label: "com.ble-library.threadSafeQueue") 23 | 24 | var isEmpty: Bool { 25 | return front == nil 26 | } 27 | 28 | // Enqueue operation to add an element to the rear of the queue 29 | func enqueue(_ value: T) { 30 | accessQueue.sync { 31 | let newNode = Node(value: value) 32 | if isEmpty { 33 | front = newNode 34 | rear = newNode 35 | } else { 36 | rear?.next = newNode 37 | rear = newNode 38 | } 39 | } 40 | } 41 | 42 | // Dequeue operation to remove and return the element from the front of the queue 43 | func dequeue() -> T? { 44 | var element: T? 45 | accessQueue.sync { 46 | if let currentFront = front { 47 | front = currentFront.next 48 | if front == nil { 49 | rear = nil 50 | } 51 | element = currentFront.value 52 | } else { 53 | element = nil 54 | } 55 | } 56 | return element 57 | } 58 | 59 | // Peek operation to get the value at the front of the queue without removing it 60 | func peek() -> T? { 61 | return front?.value 62 | } 63 | } 64 | /* 65 | struct Queue { 66 | private var queue = [T]() 67 | private let accessQueue = DispatchQueue(label: "com.ble-library.threadSafeQueue") 68 | 69 | mutating func enqueue(_ element: T) { 70 | accessQueue.sync { 71 | queue.append(element) 72 | } 73 | } 74 | 75 | mutating func dequeue() -> T? { 76 | var element: T? 77 | accessQueue.sync { 78 | if !queue.isEmpty { 79 | element = queue.removeFirst() 80 | } 81 | } 82 | return element 83 | } 84 | 85 | var head: T? { 86 | var element: T? 87 | accessQueue.sync { 88 | element = queue.first 89 | } 90 | return element 91 | } 92 | 93 | var isEmpty: Bool { 94 | var empty = false 95 | accessQueue.sync { 96 | empty = queue.isEmpty 97 | } 98 | return empty 99 | } 100 | 101 | var count: Int { 102 | var queueCount = 0 103 | accessQueue.sync { 104 | queueCount = queue.count 105 | } 106 | return queueCount 107 | } 108 | } 109 | */ 110 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/Utilities/RSSI.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RSSI.swift 3 | // iOS-BLE-Library 4 | // 5 | // Created by Dinesh Harjani on 23/8/22. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: - RSSI 11 | 12 | private struct Const { 13 | public static let outOfRange = 127 14 | public static let practicalWorst = -100 15 | public static let bad = -90 16 | public static let ok = -80 17 | public static let good = 50 18 | } 19 | 20 | public struct RSSI: ExpressibleByIntegerLiteral, Equatable, Hashable { 21 | 22 | public enum Signal { 23 | case outOfRange 24 | case practicalWorst 25 | case bad 26 | case ok 27 | case good 28 | 29 | init(rssi: Int) { 30 | switch rssi { 31 | case let x where x == Const.outOfRange: self = .outOfRange 32 | case let x where x < Const.bad: self = .practicalWorst 33 | case let x where x < Const.ok: self = .bad 34 | case let x where x < Const.good: self = .ok 35 | default: self = .good 36 | } 37 | } 38 | } 39 | 40 | public typealias IntegerLiteralType = Int 41 | 42 | // MARK: Properties 43 | 44 | public let value: Int 45 | public let signal: Signal 46 | 47 | // MARK: Init 48 | 49 | public init(integerLiteral value: Int) { 50 | self.value = value 51 | self.signal = Signal(rssi: value) 52 | } 53 | } 54 | 55 | // MARK: - Constants 56 | 57 | extension RSSI { 58 | 59 | public static let outOfRange = RSSI(integerLiteral: Const.outOfRange) 60 | public static let practicalWorst = RSSI(integerLiteral: Const.practicalWorst) 61 | public static let bad = RSSI(integerLiteral: Const.bad) 62 | public static let ok = RSSI(integerLiteral: Const.ok) 63 | public static let good = RSSI(integerLiteral: Const.good) 64 | } 65 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library-Mock/Utilities/UnimplementedError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 16/08/2023. 6 | // 7 | 8 | import Foundation 9 | 10 | func unimplementedError() -> Never { 11 | fatalError("Unimplemented Method") 12 | } 13 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library/CentralManager/Model/ScanResult.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 19/04/2023. 6 | // 7 | 8 | //CG_REPLACE 9 | import CoreBluetooth 10 | //CG_WITH 11 | /* 12 | import CoreBluetoothMock 13 | */ 14 | //CG_END 15 | import Foundation 16 | 17 | public struct ScanResult { 18 | public let peripheral: CBPeripheral 19 | public let rssi: RSSI 20 | public let advertisementData: AdvertisementData 21 | 22 | init(peripheral: CBPeripheral, rssi: NSNumber, advertisementData: [String: Any]) { 23 | self.peripheral = peripheral 24 | self.rssi = RSSI(integerLiteral: rssi.intValue) 25 | self.advertisementData = AdvertisementData(advertisementData) 26 | } 27 | 28 | public var name: String? { 29 | peripheral.name ?? advertisementData.localName 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library/CentralManager/ReactiveCentralManagerDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 18/04/2023. 6 | // 7 | 8 | import Combine 9 | //CG_REPLACE 10 | import CoreBluetooth 11 | //CG_WITH 12 | /* 13 | import CoreBluetoothMock 14 | */ 15 | //CG_END 16 | import Foundation 17 | 18 | // MARK: - ReactiveCentralManagerDelegate 19 | 20 | open class ReactiveCentralManagerDelegate: NSObject, CBCentralManagerDelegate { 21 | enum BluetoothError: Error { 22 | case failedToConnect 23 | } 24 | 25 | let stateSubject = CurrentValueSubject(.unknown) 26 | let scanResultSubject = PassthroughSubject() 27 | let connectedPeripheralSubject = PassthroughSubject<(CBPeripheral, Error?), Never>() 28 | let disconnectedPeripheralsSubject = PassthroughSubject<(CBPeripheral, Error?), Never>() 29 | let connectionEventSubject = PassthroughSubject<(CBPeripheral, CBConnectionEvent), Never>() 30 | 31 | // MARK: Monitoring Connections with Peripherals 32 | open func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) { 33 | connectedPeripheralSubject.send((peripheral, nil)) 34 | } 35 | 36 | open func centralManager( 37 | _ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, 38 | error: Error? 39 | ) { 40 | disconnectedPeripheralsSubject.send((peripheral, error)) 41 | } 42 | 43 | open func centralManager( 44 | _ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, 45 | error: Error? 46 | ) { 47 | connectedPeripheralSubject.send((peripheral, error)) 48 | } 49 | 50 | #if !os(macOS) 51 | open func centralManager( 52 | _ central: CBCentralManager, 53 | connectionEventDidOccur event: CBConnectionEvent, 54 | for peripheral: CBPeripheral 55 | ) { 56 | connectionEventSubject.send((peripheral, event)) 57 | } 58 | #endif 59 | 60 | // MARK: Discovering and Retrieving Peripherals 61 | 62 | open func centralManager( 63 | _ central: CBCentralManager, didDiscover peripheral: CBPeripheral, 64 | advertisementData: [String: Any], rssi RSSI: NSNumber 65 | ) { 66 | let scanResult = ScanResult( 67 | peripheral: peripheral, 68 | rssi: RSSI, 69 | advertisementData: advertisementData 70 | ) 71 | scanResultSubject.send(scanResult) 72 | } 73 | 74 | // MARK: Monitoring the Central Manager’s State 75 | 76 | open func centralManagerDidUpdateState(_ central: CBCentralManager) { 77 | stateSubject.send(central.state) 78 | } 79 | 80 | // MARK: Monitoring the Central Manager’s Authorization 81 | #if !os(macOS) 82 | public func centralManager( 83 | _ central: CBCentralManager, 84 | didUpdateANCSAuthorizationFor peripheral: CBPeripheral 85 | ) { 86 | unimplementedError() 87 | } 88 | #endif 89 | 90 | // MARK: Instance Methods 91 | // BETA 92 | // func centralManager(CBCentralManager, didDisconnectPeripheral: CBPeripheral, timestamp: CFAbsoluteTime, isReconnecting: Bool, error: Error?) 93 | } 94 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library/Documentation.docc/CentralManager/CentralManager.md: -------------------------------------------------------------------------------- 1 | # ``iOS_BLE_Library/CentralManager`` 2 | 3 | ### Create a Central Manager 4 | 5 | ``CentralManager`` is merely a wrapper around `CBCentralManager` with an instance of it inside. 6 | 7 | The new instance of `CBCentralManager` can be created during initialization using ``init(centralManagerDelegate:queue:options:)``, or an existing instance can be passed using ``init(centralManager:)``. 8 | 9 | If you pass a central manager inside ``init(centralManager:)``, it should already have a delegate set. The delegate should be an instance of ``ReactiveCentralManagerDelegate``; otherwise, an error will be thrown. 10 | 11 | ### Channels 12 | 13 | Channels are used to pass through data from the `CBCentralManagerDelegate` methods. 14 | You can consider them as a reactive version of the `CBCentralManagerDelegate` methods. 15 | 16 | In most cases, you will not need to use them directly, as `centralManager`'s methods return proper publishers. However, if you need to handle the data differently (e.g., log all the events), you can subscribe to the channels directly. 17 | 18 | All channels have `Never` as their failure type because they never fail. Some channels, like `CentralManager/connectedPeripheralChannel` or `CentralManager/disconnectedPeripheralsChannel`, send tuples with the peripheral and the error, allowing you to handle errors if needed. Despite this, the failure type remains `Never`, so it will not complete even if an error occurs during the connection or disconnection of the peripheral. 19 | 20 | ```swift 21 | centralManager.connectedPeripheralChannel 22 | .sink { peripheral, error in 23 | if let error = error { 24 | print("Error: \(error)") 25 | } else { 26 | print("New peripheral connected: \(peripheral)" 27 | } 28 | } 29 | .store(in: &cancellables) 30 | ``` 31 | 32 | ## Topics 33 | 34 | ### Initializers 35 | 36 | - ``init(centralManagerDelegate:queue:)`` 37 | - ``init(centralManager:)`` 38 | 39 | ### Instance Properties 40 | 41 | - ``centralManager`` 42 | - ``centralManagerDelegate`` 43 | 44 | ### Scan 45 | 46 | - ``scanForPeripherals(withServices:)`` 47 | - ``stopScan()`` 48 | - ``retrievePeripherals(withIdentifiers:)`` 49 | 50 | ### Connection 51 | 52 | - ``connect(_:options:)`` 53 | - ``cancelPeripheralConnection(_:)`` 54 | - ``retrieveConnectedPeripherals(withServices:)`` 55 | 56 | ### Channels 57 | 58 | - ``stateChannel`` 59 | - ``isScanningChannel`` 60 | - ``scanResultsChannel`` 61 | - ``connectedPeripheralChannel`` 62 | - ``disconnectedPeripheralsChannel`` 63 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library/Documentation.docc/CentralManager/CentralManager/connect.md: -------------------------------------------------------------------------------- 1 | # ``iOS_BLE_Library/CentralManager/connect(_:options:)`` 2 | 3 | ## See Also 4 | 5 | - ``CentralManager/connectedPeripheralChannel`` 6 | - ``CentralManager/disconnectedPeripheralsChannel`` 7 | 8 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library/Documentation.docc/CentralManager/ReactiveCentralManagerDelegate.md: -------------------------------------------------------------------------------- 1 | # ``iOS_BLE_Library/ReactiveCentralManagerDelegate`` 2 | 3 | Implementation of the `CBCentralManagerDelegate`. 4 | 5 | `ReactiveCentralManagerDelegate` is a class that implements the `CBCentralManagerDelegate` and is an essential part of the ``CentralManager`` class. 6 | 7 | It brings a reactive programming approach, utilizing Combine publishers to seamlessly handle Bluetooth events and data. 8 | This class allows to monitor and respond to events such as peripheral connection, disconnection, and scanning for peripherals. 9 | 10 | It has all needed publishers that are used for handling Bluetooth events and data. 11 | 12 | ## Override 13 | 14 | It's possible to override the default implementation of the `ReactiveCentralManagerDelegate` by creating a new class that inherits from `ReactiveCentralManagerDelegate` and overriding the needed methods. 15 | 16 | However, it's important to call the `super` implementation of the method, otherwise it will break the `CentralManager` functionality. 17 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library/Documentation.docc/Documentation.md: -------------------------------------------------------------------------------- 1 | # ``iOS_BLE_Library`` 2 | 3 | This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework. 4 | 5 | The library has been designed to have a simple API similar to the one provided by the CoreBluetooth framework. 6 | So if you are familiar with the CoreBluetooth framework, you will be able to use this library without any problem. 7 | 8 | ## Topics 9 | 10 | ### Central Manager 11 | - ``CentralManager`` 12 | - ``ReactiveCentralManagerDelegate`` 13 | 14 | ### Peripheral 15 | - ``Peripheral`` 16 | - ``ReactivePeripheralDelegate`` 17 | 18 | ### Essentials 19 | - ``iOS_BLE_Library/Combine/Publishers/BluetoothPublisher`` 20 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library/Documentation.docc/Peripheral/Peripheral.md: -------------------------------------------------------------------------------- 1 | ``iOS_BLE_Library/Peripheral`` 2 | 3 | ### Create a Peripheral 4 | 5 | 6 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library/Utilities/AsyncCharacteristicData.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AsyncCharacteristicData.swift 3 | // iOS-BLE-Library 4 | // 5 | // Created by Dinesh Harjani on 23/8/22. 6 | // 7 | 8 | //CG_REPLACE 9 | import CoreBluetooth 10 | //CG_WITH 11 | /* 12 | import CoreBluetoothMock 13 | */ 14 | //CG_END 15 | import Foundation 16 | 17 | public typealias AsyncStreamValue = (characteristic: CBCharacteristic, data: Data?) 18 | 19 | public struct AsyncCharacteristicData: AsyncSequence, AsyncIteratorProtocol { 20 | public typealias Element = Data? 21 | 22 | let serviceUUID: String 23 | let characteristicUUID: String 24 | let stream: AsyncThrowingStream 25 | 26 | public func makeAsyncIterator() -> AsyncCharacteristicData { 27 | self 28 | } 29 | 30 | mutating public func next() async throws -> Element? { 31 | for try await newValue in stream { 32 | guard newValue.characteristic.uuid.uuidString == characteristicUUID, 33 | let service = newValue.characteristic.service, 34 | service.uuid.uuidString == serviceUUID 35 | else { continue } 36 | return newValue.data 37 | } 38 | return nil 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library/Utilities/CBManagerState.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CBManagerState.swift 3 | // 4 | // 5 | // Created by Dinesh Harjani on 23/8/22. 6 | // 7 | 8 | //CG_REPLACE 9 | import CoreBluetooth 10 | //CG_WITH 11 | /* 12 | import CoreBluetoothMock 13 | */ 14 | //CG_END 15 | import Foundation 16 | 17 | // MARK: - CBManagerState 18 | #if hasFeature(RetroactiveAttribute) 19 | @available(iOS 10.0, *) 20 | @available(macOS 10.13, *) 21 | extension CBManagerState: @retroactive CustomDebugStringConvertible, @retroactive CustomStringConvertible { 22 | 23 | public var debugDescription: String { 24 | return description 25 | } 26 | 27 | public var description: String { 28 | switch self { 29 | case .poweredOff: 30 | return "poweredOff" 31 | case .poweredOn: 32 | return "poweredOn" 33 | case .resetting: 34 | return "resetting" 35 | case .unauthorized: 36 | return "unauthorized" 37 | case .unsupported: 38 | return "unsupported" 39 | default: 40 | return "unknown" 41 | } 42 | } 43 | } 44 | #endif 45 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library/Utilities/Extensions/CBManagerState+Ext.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 19/04/2023. 6 | // 7 | 8 | //CG_REPLACE 9 | import CoreBluetooth 10 | //CG_WITH 11 | /* 12 | import CoreBluetoothMock 13 | */ 14 | //CG_END 15 | import Foundation 16 | 17 | extension CBManagerState { 18 | 19 | var ready: Bool? { 20 | switch self { 21 | case .poweredOn: 22 | return true 23 | case .unknown, .resetting: 24 | return nil 25 | case .poweredOff, .unauthorized, .unsupported: 26 | return false 27 | default: 28 | return false 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library/Utilities/Extensions/Data+Ext.swift.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Data.swift 3 | // 4 | // 5 | // Created by Dinesh Harjani on 18/8/22. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: - Data Extension 11 | 12 | extension Data { 13 | 14 | // MARK: HexEncodingOptions 15 | 16 | struct HexEncodingOptions: OptionSet { 17 | 18 | public static let upperCase = HexEncodingOptions(rawValue: 1) 19 | public static let reverseEndianness = HexEncodingOptions(rawValue: 2) 20 | 21 | public let rawValue: Int 22 | 23 | public init(rawValue: Int) { 24 | self.rawValue = rawValue << 0 25 | } 26 | } 27 | 28 | // MARK: hexEncodedString 29 | 30 | func hexEncodedString(options: HexEncodingOptions = [], separator: String = "") 31 | -> String 32 | { 33 | let format = options.contains(.upperCase) ? "%02hhX" : "%02hhx" 34 | 35 | var bytes = self 36 | if options.contains(.reverseEndianness) { 37 | bytes.reverse() 38 | } 39 | return 40 | bytes 41 | .map { String(format: format, $0) } 42 | .joined(separator: separator) 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library/Utilities/Logger.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 20/01/2023. 6 | // 7 | 8 | import Foundation 9 | import os 10 | 11 | @available(iOS 14.0, macOS 11, watchOS 7.0, *) 12 | private struct Loggers { 13 | static var loggers: [UUID : Logger] = [:] 14 | } 15 | 16 | struct L { 17 | @inline(__always) 18 | static let enabled: Bool = false 19 | 20 | let subsystem: String 21 | let category: String 22 | 23 | private let shouldLog: Bool 24 | 25 | private let id = UUID() 26 | 27 | init( 28 | subsystem: String = "com.nordicsemi.ios_ble_library", category: String, 29 | enabled: Bool = Self.enabled 30 | ) { 31 | self.subsystem = subsystem 32 | self.category = category 33 | self.shouldLog = enabled 34 | 35 | if #available(iOS 14, macOS 11, watchOS 7, *) { 36 | Loggers.loggers[self.id] = Logger(subsystem: subsystem, category: category) 37 | } 38 | } 39 | 40 | func i(_ msg: String) { 41 | #if DEBUG 42 | if !shouldLog { return } 43 | 44 | if #available(iOS 14, macOS 11, watchOS 7, *) { 45 | Loggers.loggers[id]?.info("\(msg)") 46 | } else { 47 | os_log("%@", type: .info, msg) 48 | } 49 | 50 | #endif 51 | } 52 | 53 | func d(_ msg: String) { 54 | #if DEBUG 55 | if !shouldLog { return } 56 | if #available(iOS 14, macOS 11, watchOS 7, *) { 57 | Loggers.loggers[id]?.debug("\(msg)") 58 | } else { 59 | os_log("%@", type: .debug, msg) 60 | } 61 | #endif 62 | } 63 | 64 | func e(_ msg: String) { 65 | #if DEBUG 66 | if !shouldLog { return } 67 | if #available(iOS 14, macOS 11, watchOS 7, *) { 68 | Loggers.loggers[id]?.error("\(msg)") 69 | } else { 70 | os_log("%@", type: .error, msg) 71 | } 72 | #endif 73 | } 74 | 75 | func f(_ msg: String) { 76 | #if DEBUG 77 | if !shouldLog { return } 78 | if #available(iOS 14, macOS 11, watchOS 7, *) { 79 | Loggers.loggers[id]?.fault("\(msg)") 80 | } else { 81 | os_log("%@", type: .fault, msg) 82 | } 83 | #endif 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library/Utilities/Publishers/ContinuationSubscriber.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 05/05/2023. 6 | // 7 | 8 | import Combine 9 | import Foundation 10 | 11 | class ContinuationSubscriber: Subscriber { 12 | 13 | typealias Input = Upstream.Output 14 | typealias Failure = Upstream.Failure 15 | 16 | private let continuation: CheckedContinuation 17 | private var state: State = .waitingForSubscription 18 | private var lock = NSLock() 19 | private var subscription: Subscription? 20 | 21 | enum State { 22 | case waitingForSubscription 23 | case receivedSubscription 24 | case terminated 25 | } 26 | 27 | init(continuation: CheckedContinuation) { 28 | self.continuation = continuation 29 | } 30 | 31 | func receive(subscription: Subscription) { 32 | lock.lock() 33 | guard case .waitingForSubscription = state else { 34 | lock.unlock() 35 | return 36 | } 37 | 38 | self.state = .receivedSubscription 39 | self.subscription = subscription 40 | lock.unlock() 41 | 42 | subscription.request(.max(1)) 43 | } 44 | 45 | func receive(_ input: Upstream.Output) -> Subscribers.Demand { 46 | lock.lock() 47 | guard case .receivedSubscription = state else { 48 | lock.unlock() 49 | return .none 50 | } 51 | self.state = .terminated 52 | continuation.resume(returning: input) 53 | 54 | self.subscription?.cancel() 55 | lock.unlock() 56 | 57 | return .none 58 | } 59 | 60 | func receive(completion: Subscribers.Completion) { 61 | lock.lock() 62 | guard case .receivedSubscription = state else { 63 | lock.unlock() 64 | return 65 | } 66 | 67 | self.state = .terminated 68 | 69 | switch completion { 70 | case .finished: 71 | break 72 | case .failure(let failure): 73 | continuation.resume(throwing: failure) 74 | } 75 | lock.unlock() 76 | } 77 | } 78 | 79 | extension ContinuationSubscriber { 80 | 81 | static func withCheckedContinuation(_ upstream: Upstream) async throws -> Input where Upstream.Output == Input, Upstream.Failure == Failure { 82 | 83 | try await withCheckedThrowingContinuation { c in 84 | upstream.subscribe(ContinuationSubscriber(continuation: c)) 85 | } 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library/Utilities/Publishers/Publishers+Bluetooth.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 05/05/2023. 6 | // 7 | 8 | import Combine 9 | import Foundation 10 | 11 | extension Publisher { 12 | func bluetooth(_ fire: @escaping () -> Void) 13 | -> Publishers.BluetoothPublisher 14 | { 15 | Publishers.BluetoothPublisher(self, fire: fire) 16 | } 17 | } 18 | 19 | extension Publishers { 20 | 21 | /** 22 | A publisher that is used for most of the Bluetooth operations. 23 | 24 | # Overview 25 | This publisher conforms to the `ConnectablePublisher` protocol because most of the Bluetooth operations have to be set up before they can be used. 26 | 27 | It means that the publisher will not emit any values until it is connected. The connection is established by calling the `connect()` or `autoconnect()` methods. 28 | To learn more about the `ConnectablePublisher` protocol, see [Apple's documentation](https://developer.apple.com/documentation/combine/connectablepublisher). 29 | 30 | ```swift 31 | let publisher = centralManager.scanForPeripherals(withServices: nil) 32 | .autoconnect() 33 | // chain of publishers 34 | .sink { 35 | // . . . 36 | } 37 | .store(in: &cancellables) 38 | ``` 39 | */ 40 | class BluetoothPublisher: ConnectablePublisher { 41 | 42 | private let inner: BaseConnectable 43 | 44 | init( 45 | _ publisher: PublisherType, fire: @escaping () -> Void 46 | ) where Output == PublisherType.Output, Failure == PublisherType.Failure { 47 | self.inner = ClosureConnectablePublisher(upstream: publisher, fire: fire) 48 | } 49 | 50 | public func receive(subscriber: S) 51 | where S: Subscriber, Failure == S.Failure, Output == S.Input { 52 | inner.receive(subscriber: subscriber) 53 | } 54 | 55 | public func connect() -> Cancellable { 56 | return inner.connect() 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library/Utilities/Publishers/Publishers+Connectable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 05/05/2023. 6 | // 7 | 8 | import Combine 9 | import Foundation 10 | 11 | class BaseConnectable: ConnectablePublisher { 12 | func connect() -> Cancellable { 13 | fatalError() 14 | } 15 | 16 | func receive(subscriber: Downstream) 17 | where Failure == Downstream.Failure, Output == Downstream.Input { 18 | fatalError() 19 | } 20 | } 21 | 22 | class ClosureConnectablePublisher: BaseConnectable< 23 | Upstream.Output, Upstream.Failure 24 | > 25 | { 26 | typealias Output = Upstream.Output 27 | typealias Failure = Upstream.Failure 28 | 29 | let upstream: Upstream 30 | let fire: () -> Void 31 | let onCancel: (() -> Void)? 32 | 33 | init(upstream: Upstream, fire: @escaping () -> Void, onCancel: (() -> Void)? = nil) { 34 | self.upstream = upstream 35 | self.fire = fire 36 | self.onCancel = onCancel 37 | } 38 | 39 | override func receive(subscriber: S) 40 | where S: Subscriber, Failure == S.Failure, Output == S.Input { 41 | upstream.subscribe(subscriber) 42 | } 43 | 44 | override func connect() -> Cancellable { 45 | fire() 46 | return Cancelator(onCancel: onCancel) 47 | } 48 | } 49 | 50 | extension ClosureConnectablePublisher { 51 | struct Cancelator: Cancellable { 52 | let onCancel: (() -> Void)? 53 | 54 | func cancel() { 55 | onCancel?() 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library/Utilities/Queue.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 03/11/2023. 6 | // 7 | 8 | import Foundation 9 | 10 | class Node { 11 | var value: T 12 | var next: Node? 13 | 14 | init(value: T) { 15 | self.value = value 16 | } 17 | } 18 | 19 | class Queue { 20 | private var front: Node? 21 | private var rear: Node? 22 | private let accessQueue = DispatchQueue(label: "com.ble-library.threadSafeQueue") 23 | 24 | var isEmpty: Bool { 25 | return front == nil 26 | } 27 | 28 | // Enqueue operation to add an element to the rear of the queue 29 | func enqueue(_ value: T) { 30 | accessQueue.sync { 31 | let newNode = Node(value: value) 32 | if isEmpty { 33 | front = newNode 34 | rear = newNode 35 | } else { 36 | rear?.next = newNode 37 | rear = newNode 38 | } 39 | } 40 | } 41 | 42 | // Dequeue operation to remove and return the element from the front of the queue 43 | func dequeue() -> T? { 44 | var element: T? 45 | accessQueue.sync { 46 | if let currentFront = front { 47 | front = currentFront.next 48 | if front == nil { 49 | rear = nil 50 | } 51 | element = currentFront.value 52 | } else { 53 | element = nil 54 | } 55 | } 56 | return element 57 | } 58 | 59 | // Peek operation to get the value at the front of the queue without removing it 60 | func peek() -> T? { 61 | return front?.value 62 | } 63 | } 64 | /* 65 | struct Queue { 66 | private var queue = [T]() 67 | private let accessQueue = DispatchQueue(label: "com.ble-library.threadSafeQueue") 68 | 69 | mutating func enqueue(_ element: T) { 70 | accessQueue.sync { 71 | queue.append(element) 72 | } 73 | } 74 | 75 | mutating func dequeue() -> T? { 76 | var element: T? 77 | accessQueue.sync { 78 | if !queue.isEmpty { 79 | element = queue.removeFirst() 80 | } 81 | } 82 | return element 83 | } 84 | 85 | var head: T? { 86 | var element: T? 87 | accessQueue.sync { 88 | element = queue.first 89 | } 90 | return element 91 | } 92 | 93 | var isEmpty: Bool { 94 | var empty = false 95 | accessQueue.sync { 96 | empty = queue.isEmpty 97 | } 98 | return empty 99 | } 100 | 101 | var count: Int { 102 | var queueCount = 0 103 | accessQueue.sync { 104 | queueCount = queue.count 105 | } 106 | return queueCount 107 | } 108 | } 109 | */ 110 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library/Utilities/RSSI.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RSSI.swift 3 | // iOS-BLE-Library 4 | // 5 | // Created by Dinesh Harjani on 23/8/22. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: - RSSI 11 | 12 | private struct Const { 13 | public static let outOfRange = 127 14 | public static let practicalWorst = -100 15 | public static let bad = -90 16 | public static let ok = -80 17 | public static let good = 50 18 | } 19 | 20 | public struct RSSI: ExpressibleByIntegerLiteral, Equatable, Hashable { 21 | 22 | public enum Signal { 23 | case outOfRange 24 | case practicalWorst 25 | case bad 26 | case ok 27 | case good 28 | 29 | init(rssi: Int) { 30 | switch rssi { 31 | case let x where x == Const.outOfRange: self = .outOfRange 32 | case let x where x < Const.bad: self = .practicalWorst 33 | case let x where x < Const.ok: self = .bad 34 | case let x where x < Const.good: self = .ok 35 | default: self = .good 36 | } 37 | } 38 | } 39 | 40 | public typealias IntegerLiteralType = Int 41 | 42 | // MARK: Properties 43 | 44 | public let value: Int 45 | public let signal: Signal 46 | 47 | // MARK: Init 48 | 49 | public init(integerLiteral value: Int) { 50 | self.value = value 51 | self.signal = Signal(rssi: value) 52 | } 53 | } 54 | 55 | // MARK: - Constants 56 | 57 | extension RSSI { 58 | 59 | public static let outOfRange = RSSI(integerLiteral: Const.outOfRange) 60 | public static let practicalWorst = RSSI(integerLiteral: Const.practicalWorst) 61 | public static let bad = RSSI(integerLiteral: Const.bad) 62 | public static let ok = RSSI(integerLiteral: Const.ok) 63 | public static let good = RSSI(integerLiteral: Const.good) 64 | } 65 | -------------------------------------------------------------------------------- /Sources/iOS-BLE-Library/Utilities/UnimplementedError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 16/08/2023. 6 | // 7 | 8 | import Foundation 9 | 10 | func unimplementedError() -> Never { 11 | fatalError("Unimplemented Method") 12 | } 13 | -------------------------------------------------------------------------------- /Tests/iOS-BLE-LibraryTests/CentralManagerStateTest.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CentralManagerStateTest.swift 3 | // 4 | // 5 | // Created by Nick Kibysh on 29/08/2023. 6 | // 7 | import XCTest 8 | @testable import iOS_BLE_Library_Mock 9 | import CoreBluetoothMock 10 | import Combine 11 | 12 | final class CentralManagerStateTest: XCTestCase { 13 | func testStateChanges() async throws { 14 | var cancelables = Set() 15 | 16 | CBMCentralManagerMock.simulateInitialState(.unknown) 17 | let cmd = ReactiveCentralManagerDelegate() 18 | let cm = CBCentralManagerFactory.instance(delegate: cmd, queue: .main, forceMock: true) 19 | let central = try CentralManager(centralManager: cm) 20 | 21 | let powerOffExp = expectation(description: "Power OFF state") 22 | let powerOnExp = expectation(description: "Power ON state") 23 | let authorizationExp = expectation(description: "Unauthorized state") 24 | let unknownStateExp = expectation(description: "Unknown State") 25 | 26 | central.stateChannel 27 | .scan(([], nil)) { // Distinct Values 28 | $0.0.contains($1) ? ($0.0, nil) : ($0.0 + [$1], $1) 29 | } 30 | .compactMap { $0.1 } 31 | .sink { state in 32 | switch state { 33 | case .poweredOff: powerOffExp.fulfill() 34 | case .poweredOn: powerOnExp.fulfill() 35 | case .unauthorized: authorizationExp.fulfill() 36 | case .resetting: XCTFail("Unexpected state") 37 | case .unknown: unknownStateExp.fulfill() 38 | case .unsupported: XCTFail("Unexpected state") 39 | } 40 | } 41 | .store(in: &cancelables) 42 | 43 | await fulfillment(of: [unknownStateExp], timeout: 1.0) 44 | 45 | CBMCentralManagerMock.simulatePowerOff() 46 | await fulfillment(of: [powerOffExp], timeout: 1.0) 47 | 48 | CBMCentralManagerMock.simulateAuthorization(.denied) 49 | await fulfillment(of: [authorizationExp], timeout: 1.0) 50 | 51 | CBMCentralManagerMock.simulateAuthorization(.allowedAlways) 52 | 53 | CBMCentralManagerMock.simulatePowerOn() 54 | await fulfillment(of: [powerOnExp], timeout: 1.0) 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /code_gen/code_gen.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import copy_files as cf 4 | import replace_code as rc 5 | 6 | if __name__ == '__main__': 7 | sources_dir = sys.argv[1] 8 | 9 | print('copying files...') 10 | source = os.path.join(sources_dir, 'iOS-BLE-Library') 11 | destination = os.path.join(sources_dir, 'iOS-BLE-Library-Mock') 12 | cf.copy_all_files(source, destination) 13 | 14 | script_path = os.path.join(os.getcwd(), sys.argv[0]) 15 | script_path = os.path.dirname(script_path) 16 | additional_files_dir = os.path.join(script_path, 'additional_files') 17 | 18 | additional_files_dir_destination = os.path.join(destination, 'Additional Files') 19 | cf.copy_all_files(additional_files_dir, destination) 20 | 21 | print('arg0: ' + sys.argv[0]) 22 | 23 | print('replacing code...') 24 | # modify all .swift files in the destination directory and its subdirectories 25 | modified_files = 0 26 | for root, dirs, files in os.walk(destination): 27 | for file in files: 28 | if file.endswith('.swift'): 29 | file_path = os.path.join(root, file) 30 | rc.modify_swift_file(file_path) 31 | modified_files += 1 32 | print('modified files: ' + str(modified_files)) 33 | 34 | -------------------------------------------------------------------------------- /code_gen/copy_files.py: -------------------------------------------------------------------------------- 1 | import os 2 | import shutil 3 | 4 | def copy_all_files(source, destination): 5 | ''' 6 | copy with replace all files and directories from source to destination 7 | ''' 8 | created_directories = 0 9 | created_files = 0 10 | for root, dirs, files in os.walk(source): 11 | for dir in dirs: 12 | source_dir = os.path.join(root, dir) 13 | destination_dir = source_dir.replace(source, destination) 14 | if not os.path.exists(destination_dir): 15 | os.makedirs(destination_dir) 16 | created_directories += 1 17 | for file in files: 18 | source_file = os.path.join(root, file) 19 | destination_file = source_file.replace(source, destination) 20 | if os.path.exists(destination_file): 21 | os.remove(destination_file) 22 | shutil.copy(source_file, destination_file) 23 | created_files += 1 24 | print('created directories: ' + str(created_directories)) 25 | print('created files: ' + str(created_files)) 26 | 27 | -------------------------------------------------------------------------------- /code_gen/replace_code.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | # Define a regular expression pattern to match the code blocks 4 | pattern = r"//CG_REPLACE\n(.*?)//CG_WITH\n(/\*.*?\*/\n)?//CG_END\n" 5 | 6 | # Function to modify code blocks in a Swift file 7 | def modify_swift_file(file_path): 8 | with open(file_path, 'r') as file: 9 | content = file.read() 10 | 11 | # Use re.DOTALL to match across multiple lines 12 | matches = re.findall(pattern, content, re.DOTALL) 13 | 14 | if not matches: 15 | return 16 | 17 | for match in matches: 18 | replace_block = match[0] 19 | with_block = match[1] 20 | 21 | # Remove the CG_REPLACE block and associated artifact code 22 | content = content.replace(f"//CG_REPLACE\n", "") 23 | content = content.replace(replace_block, "") 24 | content = content.replace(f"//CG_WITH\n", "") 25 | 26 | # Remove the CG_END block 27 | content = content.replace("//CG_END", "") 28 | 29 | # Comment out the code in CG_REPLACE 30 | content = content.replace(replace_block, f"/*\n{replace_block}*/\n") 31 | 32 | # Uncomment the code in CG_WITH if it exists 33 | if with_block: 34 | # Remove the /* and */ from the beginning and end of the block 35 | uncommented_block = with_block.strip('/*').strip() 36 | uncommented_block = uncommented_block.strip('*/').strip() 37 | content = content.replace(f"{with_block}", uncommented_block) 38 | 39 | # Write the modified content back to the file 40 | with open(file_path, 'w') as file: 41 | file.write(content) 42 | -------------------------------------------------------------------------------- /docs/css/documentation-topic~topic.b6287bcf.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * This source file is part of the Swift.org open source project 3 | * 4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors 5 | * Licensed under Apache License v2.0 with Runtime Library Exception 6 | * 7 | * See https://swift.org/LICENSE.txt for license information 8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors 9 | */.generic-modal[data-v-795f7b59]{position:fixed;top:0;left:0;right:0;bottom:0;margin:0;z-index:11000;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;background:none;overflow:auto}.modal-fullscreen[data-v-795f7b59]{align-items:stretch}.modal-fullscreen .container[data-v-795f7b59]{margin:0;flex:1;width:100%;height:100%;padding-top:env(safe-area-inset-top);padding-right:env(safe-area-inset-right);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left)}.modal-standard[data-v-795f7b59]{padding:20px}.modal-standard .container[data-v-795f7b59]{padding:60px;border-radius:var(--border-radius,4px)}@media screen{[data-color-scheme=dark] .modal-standard .container[data-v-795f7b59]{background:#1d1d1f}}@media screen and (prefers-color-scheme:dark){[data-color-scheme=auto] .modal-standard .container[data-v-795f7b59]{background:#1d1d1f}}@media only screen and (max-width:735px){.modal-standard[data-v-795f7b59]{padding:0;align-items:stretch}.modal-standard .container[data-v-795f7b59]{margin:20px 0 0;padding:50px 30px;flex:1;width:100%;border-bottom-left-radius:0;border-bottom-right-radius:0}}.backdrop[data-v-795f7b59]{overflow:auto;background:var(--backdrop-background,rgba(0,0,0,.4));-webkit-overflow-scrolling:touch;width:100%;height:100%;position:fixed}.container[data-v-795f7b59]{margin-left:auto;margin-right:auto;width:980px;background:var(--colors-generic-modal-background,var(--color-generic-modal-background));z-index:1;position:relative;overflow:auto;max-width:100%}@media only screen and (max-width:1250px){.container[data-v-795f7b59]{width:692px}}@media only screen and (max-width:735px){.container[data-v-795f7b59]{width:87.5%}}@media only screen and (max-width:320px){.container[data-v-795f7b59]{width:215px}}.close[data-v-795f7b59]{position:absolute;z-index:9999;top:22px;left:22px;width:17px;height:17px;color:#666;cursor:pointer;background:none;border:0;display:flex;align-items:center}.close .close-icon[data-v-795f7b59]{fill:currentColor;width:100%;height:100%}.theme-dark .container[data-v-795f7b59]{background:#000}.theme-dark .container .close[data-v-795f7b59]{color:#b0b0b0}.theme-code .container[data-v-795f7b59]{background-color:var(--code-background,var(--color-code-background))} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/advertisementdata/advertisedid().json: -------------------------------------------------------------------------------- 1 | {"sections":[],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/advertisedID()"},"kind":"symbol","metadata":{"role":"symbol","modules":[{"name":"iOS_BLE_Library"}],"roleHeading":"Instance Method","title":"advertisedID()","externalID":"s:15iOS_BLE_Library17AdvertisementDataV12advertisedIDSSSgyF","symbolKind":"method","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"text":"advertisedID","kind":"identifier"},{"text":"() -> ","kind":"text"},{"preciseIdentifier":"s:SS","kind":"typeIdentifier","text":"String"},{"kind":"text","text":"?"}]},"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData"]]},"schemaVersion":{"major":0,"minor":3,"patch":0},"primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"languages":["swift"],"tokens":[{"text":"func","kind":"keyword"},{"kind":"text","text":" "},{"kind":"identifier","text":"advertisedID"},{"text":"() -> ","kind":"text"},{"preciseIdentifier":"s:SS","kind":"typeIdentifier","text":"String"},{"text":"?","kind":"text"}]}]}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/advertisementdata\/advertisedid()"]}],"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData/advertisedID()":{"abstract":[],"url":"\/documentation\/ios_ble_library\/advertisementdata\/advertisedid()","kind":"symbol","role":"symbol","title":"advertisedID()","type":"topic","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/advertisedID()","fragments":[{"kind":"keyword","text":"func"},{"text":" ","kind":"text"},{"kind":"identifier","text":"advertisedID"},{"kind":"text","text":"() -> "},{"preciseIdentifier":"s:SS","kind":"typeIdentifier","text":"String"},{"kind":"text","text":"?"}]},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData":{"title":"AdvertisementData","navigatorTitle":[{"kind":"identifier","text":"AdvertisementData"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData","url":"\/documentation\/ios_ble_library\/advertisementdata","kind":"symbol","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"AdvertisementData","kind":"identifier"}],"type":"topic","abstract":[],"role":"symbol"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/advertisementdata/equatable-implementations.json: -------------------------------------------------------------------------------- 1 | {"kind":"article","identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/Equatable-Implementations","interfaceLanguage":"swift"},"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData"]]},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/!=(_:_:)"],"generated":true}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/advertisementdata\/equatable-implementations"]}],"sections":[],"schemaVersion":{"patch":0,"major":0,"minor":3},"metadata":{"role":"collectionGroup","title":"Equatable Implementations","modules":[{"name":"iOS_BLE_Library"}]},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData/!=(_:_:)":{"abstract":[],"url":"\/documentation\/ios_ble_library\/advertisementdata\/!=(_:_:)","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/!=(_:_:)","fragments":[{"text":"static","kind":"keyword"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"text":"!=","kind":"identifier"},{"text":" ","kind":"text"},{"text":"(","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":", ","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"text":") -> ","kind":"text"},{"kind":"typeIdentifier","preciseIdentifier":"s:Sb","text":"Bool"}],"type":"topic","role":"symbol","title":"!=(_:_:)","kind":"symbol"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData":{"title":"AdvertisementData","navigatorTitle":[{"kind":"identifier","text":"AdvertisementData"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData","url":"\/documentation\/ios_ble_library\/advertisementdata","kind":"symbol","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"AdvertisementData","kind":"identifier"}],"type":"topic","abstract":[],"role":"symbol"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/advertisementdata/init().json: -------------------------------------------------------------------------------- 1 | {"kind":"symbol","primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"tokens":[{"text":"init","kind":"keyword"},{"kind":"text","text":"()"}],"languages":["swift"]}]}],"variants":[{"paths":["\/documentation\/ios_ble_library\/advertisementdata\/init()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/init()","interfaceLanguage":"swift"},"sections":[],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData"]]},"schemaVersion":{"patch":0,"major":0,"minor":3},"metadata":{"role":"symbol","roleHeading":"Initializer","fragments":[{"text":"init","kind":"identifier"},{"text":"()","kind":"text"}],"modules":[{"name":"iOS_BLE_Library"}],"title":"init()","externalID":"s:15iOS_BLE_Library17AdvertisementDataVACycfc","symbolKind":"init"},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData/init()":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"()"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/init()","title":"init()","url":"\/documentation\/ios_ble_library\/advertisementdata\/init()","kind":"symbol","role":"symbol","abstract":[],"type":"topic"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData":{"title":"AdvertisementData","navigatorTitle":[{"kind":"identifier","text":"AdvertisementData"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData","url":"\/documentation\/ios_ble_library\/advertisementdata","kind":"symbol","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"AdvertisementData","kind":"identifier"}],"type":"topic","abstract":[],"role":"symbol"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/advertisementdata/init(_:).json: -------------------------------------------------------------------------------- 1 | {"schemaVersion":{"patch":0,"minor":3,"major":0},"sections":[],"metadata":{"fragments":[{"kind":"identifier","text":"init"},{"text":"([","kind":"text"},{"text":"String","kind":"typeIdentifier","preciseIdentifier":"s:SS"},{"kind":"text","text":" : "},{"kind":"keyword","text":"Any"},{"text":"])","kind":"text"}],"symbolKind":"init","modules":[{"name":"iOS_BLE_Library"}],"role":"symbol","roleHeading":"Initializer","title":"init(_:)","externalID":"s:15iOS_BLE_Library17AdvertisementDataVyACSDySSypGcfc"},"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/init(_:)","interfaceLanguage":"swift"},"primaryContentSections":[{"declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"text":" ","kind":"text"},{"kind":"internalParam","text":"advertisementData"},{"kind":"text","text":": ["},{"text":"String","preciseIdentifier":"s:SS","kind":"typeIdentifier"},{"text":" : ","kind":"text"},{"text":"Any","kind":"keyword"},{"kind":"text","text":"])"}],"languages":["swift"],"platforms":["macOS"]}],"kind":"declarations"}],"kind":"symbol","variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/advertisementdata\/init(_:)"]}],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData"]]},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData/init(_:)":{"fragments":[{"text":"init","kind":"identifier"},{"kind":"text","text":"(["},{"preciseIdentifier":"s:SS","kind":"typeIdentifier","text":"String"},{"kind":"text","text":" : "},{"text":"Any","kind":"keyword"},{"text":"])","kind":"text"}],"role":"symbol","title":"init(_:)","kind":"symbol","url":"\/documentation\/ios_ble_library\/advertisementdata\/init(_:)","abstract":[],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/init(_:)","type":"topic"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData":{"title":"AdvertisementData","navigatorTitle":[{"kind":"identifier","text":"AdvertisementData"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData","url":"\/documentation\/ios_ble_library\/advertisementdata","kind":"symbol","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"AdvertisementData","kind":"identifier"}],"type":"topic","abstract":[],"role":"symbol"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/advertisementdata/isconnectable.json: -------------------------------------------------------------------------------- 1 | {"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/isConnectable","interfaceLanguage":"swift"},"primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"languages":["swift"],"tokens":[{"text":"var","kind":"keyword"},{"kind":"text","text":" "},{"kind":"identifier","text":"isConnectable"},{"kind":"text","text":": "},{"text":"Bool","kind":"typeIdentifier","preciseIdentifier":"s:Sb"},{"kind":"text","text":"? { "},{"kind":"keyword","text":"get"},{"text":" }","kind":"text"}]}]}],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData"]]},"schemaVersion":{"minor":3,"patch":0,"major":0},"variants":[{"paths":["\/documentation\/ios_ble_library\/advertisementdata\/isconnectable"],"traits":[{"interfaceLanguage":"swift"}]}],"sections":[],"kind":"symbol","metadata":{"role":"symbol","modules":[{"name":"iOS_BLE_Library"}],"symbolKind":"property","fragments":[{"kind":"keyword","text":"var"},{"text":" ","kind":"text"},{"kind":"identifier","text":"isConnectable"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"},{"text":"?","kind":"text"}],"roleHeading":"Instance Property","title":"isConnectable","externalID":"s:15iOS_BLE_Library17AdvertisementDataV13isConnectableSbSgvp"},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData":{"title":"AdvertisementData","navigatorTitle":[{"kind":"identifier","text":"AdvertisementData"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData","url":"\/documentation\/ios_ble_library\/advertisementdata","kind":"symbol","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"AdvertisementData","kind":"identifier"}],"type":"topic","abstract":[],"role":"symbol"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData/isConnectable":{"abstract":[],"url":"\/documentation\/ios_ble_library\/advertisementdata\/isconnectable","kind":"symbol","role":"symbol","title":"isConnectable","type":"topic","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/isConnectable","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"isConnectable"},{"kind":"text","text":": "},{"text":"Bool","kind":"typeIdentifier","preciseIdentifier":"s:Sb"},{"kind":"text","text":"?"}]}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/advertisementdata/localname.json: -------------------------------------------------------------------------------- 1 | {"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData"]]},"sections":[],"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/localName","interfaceLanguage":"swift"},"schemaVersion":{"major":0,"minor":3,"patch":0},"kind":"symbol","variants":[{"paths":["\/documentation\/ios_ble_library\/advertisementdata\/localname"],"traits":[{"interfaceLanguage":"swift"}]}],"metadata":{"modules":[{"name":"iOS_BLE_Library"}],"fragments":[{"kind":"keyword","text":"var"},{"text":" ","kind":"text"},{"text":"localName","kind":"identifier"},{"kind":"text","text":": "},{"preciseIdentifier":"s:SS","kind":"typeIdentifier","text":"String"},{"text":"?","kind":"text"}],"role":"symbol","title":"localName","roleHeading":"Instance Property","externalID":"s:15iOS_BLE_Library17AdvertisementDataV9localNameSSSgvp","symbolKind":"property"},"primaryContentSections":[{"declarations":[{"platforms":["macOS"],"languages":["swift"],"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"localName"},{"text":": ","kind":"text"},{"preciseIdentifier":"s:SS","text":"String","kind":"typeIdentifier"},{"text":"? { ","kind":"text"},{"text":"get","kind":"keyword"},{"text":" }","kind":"text"}]}],"kind":"declarations"}],"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData/localName":{"abstract":[],"url":"\/documentation\/ios_ble_library\/advertisementdata\/localname","kind":"symbol","role":"symbol","title":"localName","type":"topic","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/localName","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"localName"},{"kind":"text","text":": "},{"text":"String","kind":"typeIdentifier","preciseIdentifier":"s:SS"},{"kind":"text","text":"?"}]},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData":{"title":"AdvertisementData","navigatorTitle":[{"kind":"identifier","text":"AdvertisementData"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData","url":"\/documentation\/ios_ble_library\/advertisementdata","kind":"symbol","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"AdvertisementData","kind":"identifier"}],"type":"topic","abstract":[],"role":"symbol"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/advertisementdata/manufacturerdata.json: -------------------------------------------------------------------------------- 1 | {"sections":[],"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/manufacturerData","interfaceLanguage":"swift"},"schemaVersion":{"patch":0,"minor":3,"major":0},"primaryContentSections":[{"declarations":[{"platforms":["macOS"],"languages":["swift"],"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"text":"manufacturerData","kind":"identifier"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Data","preciseIdentifier":"s:10Foundation4DataV"},{"text":"? { ","kind":"text"},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}]}],"kind":"declarations"}],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData"]]},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/advertisementdata\/manufacturerdata"]}],"kind":"symbol","metadata":{"title":"manufacturerData","role":"symbol","roleHeading":"Instance Property","fragments":[{"text":"var","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"manufacturerData"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Data","preciseIdentifier":"s:10Foundation4DataV"},{"kind":"text","text":"?"}],"modules":[{"name":"iOS_BLE_Library"}],"symbolKind":"property","externalID":"s:15iOS_BLE_Library17AdvertisementDataV012manufacturerE010Foundation0E0VSgvp"},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData":{"title":"AdvertisementData","navigatorTitle":[{"kind":"identifier","text":"AdvertisementData"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData","url":"\/documentation\/ios_ble_library\/advertisementdata","kind":"symbol","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"AdvertisementData","kind":"identifier"}],"type":"topic","abstract":[],"role":"symbol"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData/manufacturerData":{"kind":"symbol","title":"manufacturerData","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/manufacturerData","url":"\/documentation\/ios_ble_library\/advertisementdata\/manufacturerdata","type":"topic","abstract":[],"role":"symbol","fragments":[{"text":"var","kind":"keyword"},{"kind":"text","text":" "},{"text":"manufacturerData","kind":"identifier"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Data","preciseIdentifier":"s:10Foundation4DataV"},{"text":"?","kind":"text"}]}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/advertisementdata/overflowserviceuuids.json: -------------------------------------------------------------------------------- 1 | {"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/advertisementdata\/overflowserviceuuids"]}],"metadata":{"externalID":"s:15iOS_BLE_Library17AdvertisementDataV20overflowServiceUUIDsSaySo6CBUUIDCGSgvp","modules":[{"name":"iOS_BLE_Library"}],"fragments":[{"text":"var","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"overflowServiceUUIDs"},{"kind":"text","text":": ["},{"preciseIdentifier":"c:objc(cs)CBUUID","text":"CBUUID","kind":"typeIdentifier"},{"kind":"text","text":"]?"}],"title":"overflowServiceUUIDs","role":"symbol","roleHeading":"Instance Property","symbolKind":"property"},"kind":"symbol","identifier":{"interfaceLanguage":"swift","url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/overflowServiceUUIDs"},"sections":[],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData"]]},"schemaVersion":{"patch":0,"minor":3,"major":0},"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"text":"var","kind":"keyword"},{"text":" ","kind":"text"},{"text":"overflowServiceUUIDs","kind":"identifier"},{"text":": [","kind":"text"},{"preciseIdentifier":"c:objc(cs)CBUUID","text":"CBUUID","kind":"typeIdentifier"},{"kind":"text","text":"]? { "},{"text":"get","kind":"keyword"},{"text":" }","kind":"text"}],"platforms":["macOS"],"languages":["swift"]}]}],"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData/overflowServiceUUIDs":{"type":"topic","abstract":[],"title":"overflowServiceUUIDs","fragments":[{"text":"var","kind":"keyword"},{"kind":"text","text":" "},{"text":"overflowServiceUUIDs","kind":"identifier"},{"text":": [","kind":"text"},{"kind":"typeIdentifier","preciseIdentifier":"c:objc(cs)CBUUID","text":"CBUUID"},{"text":"]?","kind":"text"}],"kind":"symbol","url":"\/documentation\/ios_ble_library\/advertisementdata\/overflowserviceuuids","role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/overflowServiceUUIDs"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData":{"title":"AdvertisementData","navigatorTitle":[{"kind":"identifier","text":"AdvertisementData"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData","url":"\/documentation\/ios_ble_library\/advertisementdata","kind":"symbol","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"AdvertisementData","kind":"identifier"}],"type":"topic","abstract":[],"role":"symbol"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/advertisementdata/rawdata.json: -------------------------------------------------------------------------------- 1 | {"schemaVersion":{"major":0,"minor":3,"patch":0},"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/rawData","interfaceLanguage":"swift"},"primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"languages":["swift"],"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"text":"rawData","kind":"identifier"},{"text":": [","kind":"text"},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"text":" : ","kind":"text"},{"kind":"keyword","text":"Any"},{"text":"]","kind":"text"}]}]}],"sections":[],"metadata":{"role":"symbol","roleHeading":"Instance Property","modules":[{"name":"iOS_BLE_Library"}],"symbolKind":"property","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"rawData"},{"kind":"text","text":": ["},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" : "},{"text":"Any","kind":"keyword"},{"kind":"text","text":"]"}],"externalID":"s:15iOS_BLE_Library17AdvertisementDataV03rawE0SDySSypGvp","title":"rawData"},"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData"]]},"kind":"symbol","variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/advertisementdata\/rawdata"]}],"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData":{"title":"AdvertisementData","navigatorTitle":[{"kind":"identifier","text":"AdvertisementData"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData","url":"\/documentation\/ios_ble_library\/advertisementdata","kind":"symbol","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"AdvertisementData","kind":"identifier"}],"type":"topic","abstract":[],"role":"symbol"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData/rawData":{"type":"topic","kind":"symbol","fragments":[{"text":"let","kind":"keyword"},{"kind":"text","text":" "},{"text":"rawData","kind":"identifier"},{"kind":"text","text":": ["},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":" : "},{"kind":"keyword","text":"Any"},{"text":"]","kind":"text"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/rawData","title":"rawData","role":"symbol","url":"\/documentation\/ios_ble_library\/advertisementdata\/rawdata","abstract":[]},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/advertisementdata/serviceuuids.json: -------------------------------------------------------------------------------- 1 | {"sections":[],"primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"tokens":[{"kind":"keyword","text":"var"},{"text":" ","kind":"text"},{"kind":"identifier","text":"serviceUUIDs"},{"kind":"text","text":": ["},{"kind":"typeIdentifier","preciseIdentifier":"c:objc(cs)CBUUID","text":"CBUUID"},{"kind":"text","text":"]? { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"]}]}],"variants":[{"paths":["\/documentation\/ios_ble_library\/advertisementdata\/serviceuuids"],"traits":[{"interfaceLanguage":"swift"}]}],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData"]]},"metadata":{"fragments":[{"kind":"keyword","text":"var"},{"text":" ","kind":"text"},{"kind":"identifier","text":"serviceUUIDs"},{"kind":"text","text":": ["},{"text":"CBUUID","kind":"typeIdentifier","preciseIdentifier":"c:objc(cs)CBUUID"},{"text":"]?","kind":"text"}],"symbolKind":"property","role":"symbol","modules":[{"name":"iOS_BLE_Library"}],"externalID":"s:15iOS_BLE_Library17AdvertisementDataV12serviceUUIDsSaySo6CBUUIDCGSgvp","roleHeading":"Instance Property","title":"serviceUUIDs"},"kind":"symbol","identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/serviceUUIDs","interfaceLanguage":"swift"},"schemaVersion":{"patch":0,"minor":3,"major":0},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData/serviceUUIDs":{"fragments":[{"text":"var","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"serviceUUIDs"},{"text":": [","kind":"text"},{"preciseIdentifier":"c:objc(cs)CBUUID","kind":"typeIdentifier","text":"CBUUID"},{"kind":"text","text":"]?"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/serviceUUIDs","title":"serviceUUIDs","url":"\/documentation\/ios_ble_library\/advertisementdata\/serviceuuids","kind":"symbol","role":"symbol","abstract":[],"type":"topic"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData":{"title":"AdvertisementData","navigatorTitle":[{"kind":"identifier","text":"AdvertisementData"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData","url":"\/documentation\/ios_ble_library\/advertisementdata","kind":"symbol","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"AdvertisementData","kind":"identifier"}],"type":"topic","abstract":[],"role":"symbol"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/advertisementdata/txpowerlevel.json: -------------------------------------------------------------------------------- 1 | {"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData"]]},"primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"tokens":[{"text":"var","kind":"keyword"},{"text":" ","kind":"text"},{"text":"txPowerLevel","kind":"identifier"},{"kind":"text","text":": "},{"preciseIdentifier":"s:Si","text":"Int","kind":"typeIdentifier"},{"text":"? { ","kind":"text"},{"kind":"keyword","text":"get"},{"text":" }","kind":"text"}],"languages":["swift"]}]}],"kind":"symbol","metadata":{"externalID":"s:15iOS_BLE_Library17AdvertisementDataV12txPowerLevelSiSgvp","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"txPowerLevel"},{"text":": ","kind":"text"},{"text":"Int","kind":"typeIdentifier","preciseIdentifier":"s:Si"},{"text":"?","kind":"text"}],"modules":[{"name":"iOS_BLE_Library"}],"symbolKind":"property","role":"symbol","title":"txPowerLevel","roleHeading":"Instance Property"},"sections":[],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/advertisementdata\/txpowerlevel"]}],"schemaVersion":{"patch":0,"major":0,"minor":3},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/txPowerLevel"},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData/txPowerLevel":{"abstract":[],"url":"\/documentation\/ios_ble_library\/advertisementdata\/txpowerlevel","kind":"symbol","role":"symbol","title":"txPowerLevel","type":"topic","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData\/txPowerLevel","fragments":[{"kind":"keyword","text":"var"},{"text":" ","kind":"text"},{"kind":"identifier","text":"txPowerLevel"},{"kind":"text","text":": "},{"preciseIdentifier":"s:Si","kind":"typeIdentifier","text":"Int"},{"kind":"text","text":"?"}]},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AdvertisementData":{"title":"AdvertisementData","navigatorTitle":[{"kind":"identifier","text":"AdvertisementData"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AdvertisementData","url":"\/documentation\/ios_ble_library\/advertisementdata","kind":"symbol","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"text":"AdvertisementData","kind":"identifier"}],"type":"topic","abstract":[],"role":"symbol"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/asynccharacteristicdata/element.json: -------------------------------------------------------------------------------- 1 | {"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncCharacteristicData\/Element"},"metadata":{"fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"Element"}],"modules":[{"name":"iOS_BLE_Library"}],"externalID":"s:15iOS_BLE_Library23AsyncCharacteristicDataV7Elementa","title":"AsyncCharacteristicData.Element","role":"symbol","roleHeading":"Type Alias","symbolKind":"typealias","navigatorTitle":[{"kind":"identifier","text":"Element"}]},"sections":[],"primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"tokens":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"Element"},{"kind":"text","text":" = "},{"kind":"typeIdentifier","preciseIdentifier":"s:10Foundation4DataV","text":"Data"},{"text":"?","kind":"text"}],"languages":["swift"]}]}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/asynccharacteristicdata\/element"]}],"kind":"symbol","schemaVersion":{"patch":0,"major":0,"minor":3},"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncCharacteristicData"]]},"abstract":[{"text":"Inherited from ","type":"text"},{"type":"codeVoice","code":"AsyncSequence.Element"},{"text":".","type":"text"}],"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AsyncCharacteristicData/Element":{"role":"symbol","fragments":[{"kind":"keyword","text":"typealias"},{"text":" ","kind":"text"},{"kind":"identifier","text":"Element"}],"navigatorTitle":[{"text":"Element","kind":"identifier"}],"abstract":[],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncCharacteristicData\/Element","type":"topic","title":"AsyncCharacteristicData.Element","kind":"symbol","url":"\/documentation\/ios_ble_library\/asynccharacteristicdata\/element"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AsyncCharacteristicData":{"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"AsyncCharacteristicData"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncCharacteristicData","abstract":[],"kind":"symbol","title":"AsyncCharacteristicData","role":"symbol","navigatorTitle":[{"text":"AsyncCharacteristicData","kind":"identifier"}],"url":"\/documentation\/ios_ble_library\/asynccharacteristicdata","type":"topic"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/asyncpublisher/element.json: -------------------------------------------------------------------------------- 1 | {"kind":"symbol","identifier":{"interfaceLanguage":"swift","url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncPublisher\/Element"},"variants":[{"paths":["\/documentation\/ios_ble_library\/asyncpublisher\/element"],"traits":[{"interfaceLanguage":"swift"}]}],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncPublisher"]]},"sections":[],"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"text":"typealias","kind":"keyword"},{"kind":"text","text":" "},{"text":"Element","kind":"identifier"},{"kind":"text","text":" = "},{"kind":"typeIdentifier","text":"Upstream"},{"text":".","kind":"text"},{"kind":"typeIdentifier","text":"Output"}],"platforms":["macOS"],"languages":["swift"]}]}],"schemaVersion":{"patch":0,"minor":3,"major":0},"metadata":{"role":"symbol","modules":[{"name":"iOS_BLE_Library"}],"symbolKind":"typealias","externalID":"s:15iOS_BLE_Library14AsyncPublisherV7Elementa","roleHeading":"Type Alias","title":"AsyncPublisher.Element","fragments":[{"text":"typealias","kind":"keyword"},{"kind":"text","text":" "},{"kind":"identifier","text":"Element"}],"navigatorTitle":[{"text":"Element","kind":"identifier"}]},"abstract":[{"text":"Inherited from ","type":"text"},{"code":"AsyncSequence.Element","type":"codeVoice"},{"text":".","type":"text"}],"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AsyncPublisher/Element":{"role":"symbol","abstract":[],"kind":"symbol","fragments":[{"text":"typealias","kind":"keyword"},{"kind":"text","text":" "},{"text":"Element","kind":"identifier"}],"title":"AsyncPublisher.Element","navigatorTitle":[{"text":"Element","kind":"identifier"}],"type":"topic","url":"\/documentation\/ios_ble_library\/asyncpublisher\/element","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncPublisher\/Element"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AsyncPublisher":{"title":"AsyncPublisher","abstract":[],"type":"topic","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncPublisher","fragments":[{"text":"struct","kind":"keyword"},{"kind":"text","text":" "},{"text":"AsyncPublisher","kind":"identifier"}],"role":"symbol","navigatorTitle":[{"text":"AsyncPublisher","kind":"identifier"}],"url":"\/documentation\/ios_ble_library\/asyncpublisher","kind":"symbol"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/asyncpublisher/init(_:).json: -------------------------------------------------------------------------------- 1 | {"sections":[],"metadata":{"symbolKind":"init","title":"init(_:)","modules":[{"name":"iOS_BLE_Library"}],"fragments":[{"kind":"identifier","text":"init"},{"text":"(","kind":"text"},{"text":"Upstream","kind":"typeIdentifier"},{"kind":"text","text":")"}],"roleHeading":"Initializer","role":"symbol","externalID":"s:15iOS_BLE_Library14AsyncPublisherVyACyxGxcfc"},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/asyncpublisher\/init(_:)"]}],"kind":"symbol","hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncPublisher"]]},"primaryContentSections":[{"declarations":[{"tokens":[{"text":"init","kind":"keyword"},{"text":"(","kind":"text"},{"text":"_","kind":"externalParam"},{"kind":"text","text":" "},{"text":"publisher","kind":"internalParam"},{"text":": ","kind":"text"},{"text":"Upstream","kind":"typeIdentifier"},{"kind":"text","text":")"}],"platforms":["macOS"],"languages":["swift"]}],"kind":"declarations"}],"schemaVersion":{"minor":3,"major":0,"patch":0},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncPublisher\/init(_:)"},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AsyncPublisher":{"title":"AsyncPublisher","abstract":[],"type":"topic","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncPublisher","fragments":[{"text":"struct","kind":"keyword"},{"kind":"text","text":" "},{"text":"AsyncPublisher","kind":"identifier"}],"role":"symbol","navigatorTitle":[{"text":"AsyncPublisher","kind":"identifier"}],"url":"\/documentation\/ios_ble_library\/asyncpublisher","kind":"symbol"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AsyncPublisher/init(_:)":{"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncPublisher\/init(_:)","abstract":[],"kind":"symbol","title":"init(_:)","url":"\/documentation\/ios_ble_library\/asyncpublisher\/init(_:)","role":"symbol","fragments":[{"text":"init","kind":"identifier"},{"kind":"text","text":"("},{"text":"Upstream","kind":"typeIdentifier"},{"text":")","kind":"text"}],"type":"topic"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/asyncstreamvalue.json: -------------------------------------------------------------------------------- 1 | {"schemaVersion":{"patch":0,"minor":3,"major":0},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/asyncstreamvalue"]}],"metadata":{"role":"symbol","externalID":"s:15iOS_BLE_Library16AsyncStreamValuea","modules":[{"name":"iOS_BLE_Library"}],"title":"AsyncStreamValue","roleHeading":"Type Alias","symbolKind":"typealias","fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"text":"AsyncStreamValue","kind":"identifier"}],"navigatorTitle":[{"text":"AsyncStreamValue","kind":"identifier"}]},"primaryContentSections":[{"kind":"declarations","declarations":[{"languages":["swift"],"tokens":[{"text":"typealias","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"AsyncStreamValue"},{"kind":"text","text":" = (characteristic"},{"kind":"text","text":": "},{"preciseIdentifier":"c:objc(cs)CBCharacteristic","text":"CBCharacteristic","kind":"typeIdentifier"},{"kind":"text","text":", data"},{"text":": ","kind":"text"},{"kind":"typeIdentifier","preciseIdentifier":"s:10Foundation4DataV","text":"Data"},{"text":"?)","kind":"text"}],"platforms":["macOS"]}]}],"kind":"symbol","identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncStreamValue","interfaceLanguage":"swift"},"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library"]]},"sections":[],"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AsyncStreamValue":{"fragments":[{"text":"typealias","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"AsyncStreamValue"}],"abstract":[],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncStreamValue","navigatorTitle":[{"text":"AsyncStreamValue","kind":"identifier"}],"role":"symbol","type":"topic","title":"AsyncStreamValue","url":"\/documentation\/ios_ble_library\/asyncstreamvalue","kind":"symbol"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/asyncthrowingpublisher/element.json: -------------------------------------------------------------------------------- 1 | {"metadata":{"title":"AsyncThrowingPublisher.Element","role":"symbol","modules":[{"name":"iOS_BLE_Library"}],"roleHeading":"Type Alias","symbolKind":"typealias","fragments":[{"text":"typealias","kind":"keyword"},{"kind":"text","text":" "},{"kind":"identifier","text":"Element"}],"externalID":"s:15iOS_BLE_Library22AsyncThrowingPublisherV7Elementa","navigatorTitle":[{"kind":"identifier","text":"Element"}]},"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncThrowingPublisher\/Element","interfaceLanguage":"swift"},"sections":[],"schemaVersion":{"minor":3,"patch":0,"major":0},"kind":"symbol","primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"tokens":[{"kind":"keyword","text":"typealias"},{"text":" ","kind":"text"},{"text":"Element","kind":"identifier"},{"kind":"text","text":" = "},{"kind":"typeIdentifier","text":"Upstream"},{"text":".","kind":"text"},{"kind":"typeIdentifier","text":"Output"}],"languages":["swift"]}]}],"abstract":[{"text":"Inherited from ","type":"text"},{"code":"AsyncSequence.Element","type":"codeVoice"},{"text":".","type":"text"}],"variants":[{"paths":["\/documentation\/ios_ble_library\/asyncthrowingpublisher\/element"],"traits":[{"interfaceLanguage":"swift"}]}],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncThrowingPublisher"]]},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AsyncThrowingPublisher/Element":{"kind":"symbol","url":"\/documentation\/ios_ble_library\/asyncthrowingpublisher\/element","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncThrowingPublisher\/Element","role":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Element"}],"title":"AsyncThrowingPublisher.Element","abstract":[],"fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"text":"Element","kind":"identifier"}]},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AsyncThrowingPublisher":{"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncThrowingPublisher","type":"topic","title":"AsyncThrowingPublisher","role":"symbol","url":"\/documentation\/ios_ble_library\/asyncthrowingpublisher","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"kind":"identifier","text":"AsyncThrowingPublisher"}],"kind":"symbol","abstract":[],"navigatorTitle":[{"text":"AsyncThrowingPublisher","kind":"identifier"}]}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/asyncthrowingpublisher/init(_:).json: -------------------------------------------------------------------------------- 1 | {"variants":[{"paths":["\/documentation\/ios_ble_library\/asyncthrowingpublisher\/init(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"metadata":{"modules":[{"name":"iOS_BLE_Library"}],"roleHeading":"Initializer","fragments":[{"text":"init","kind":"identifier"},{"text":"(","kind":"text"},{"text":"Upstream","kind":"typeIdentifier"},{"text":")","kind":"text"}],"title":"init(_:)","symbolKind":"init","externalID":"s:15iOS_BLE_Library22AsyncThrowingPublisherVyACyxGxcfc","role":"symbol"},"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncThrowingPublisher\/init(_:)","interfaceLanguage":"swift"},"primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"tokens":[{"text":"init","kind":"keyword"},{"kind":"text","text":"("},{"text":"_","kind":"externalParam"},{"kind":"text","text":" "},{"text":"publisher","kind":"internalParam"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Upstream"},{"kind":"text","text":")"}],"languages":["swift"]}]}],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncThrowingPublisher"]]},"sections":[],"kind":"symbol","schemaVersion":{"major":0,"minor":3,"patch":0},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AsyncThrowingPublisher/init(_:)":{"url":"\/documentation\/ios_ble_library\/asyncthrowingpublisher\/init(_:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Upstream"},{"kind":"text","text":")"}],"title":"init(_:)","type":"topic","abstract":[],"kind":"symbol","role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncThrowingPublisher\/init(_:)"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/AsyncThrowingPublisher":{"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/AsyncThrowingPublisher","type":"topic","title":"AsyncThrowingPublisher","role":"symbol","url":"\/documentation\/ios_ble_library\/asyncthrowingpublisher","fragments":[{"kind":"keyword","text":"struct"},{"text":" ","kind":"text"},{"kind":"identifier","text":"AsyncThrowingPublisher"}],"kind":"symbol","abstract":[],"navigatorTitle":[{"text":"AsyncThrowingPublisher","kind":"identifier"}]}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/combine.json: -------------------------------------------------------------------------------- 1 | {"schemaVersion":{"patch":0,"minor":3,"major":0},"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Combine","interfaceLanguage":"swift"},"topicSections":[{"title":"Extended Protocols","identifiers":["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Combine\/Publisher"]}],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library"]]},"kind":"symbol","sections":[],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/combine"]}],"metadata":{"role":"collection","externalID":"s:m:s:e:s:7Combine9PublisherP15iOS_BLE_LibraryE5value6OutputQzvp","roleHeading":"Extended Module","title":"Combine","symbolKind":"extension","modules":[{"name":"iOS_BLE_Library"}]},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Combine":{"kind":"symbol","url":"\/documentation\/ios_ble_library\/combine","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Combine","type":"topic","role":"collection","abstract":[],"title":"Combine"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Combine/Publisher":{"kind":"symbol","abstract":[],"url":"\/documentation\/ios_ble_library\/combine\/publisher","role":"symbol","fragments":[{"kind":"keyword","text":"extension"},{"text":" ","kind":"text"},{"text":"Publisher","kind":"identifier","preciseIdentifier":"s:7Combine9PublisherP"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Combine\/Publisher","navigatorTitle":[{"text":"Publisher","kind":"identifier"}],"type":"topic","title":"Publisher"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/corebluetooth.json: -------------------------------------------------------------------------------- 1 | {"topicSections":[{"title":"Extended Enumerations","identifiers":["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/CoreBluetooth\/CBManagerState"]}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/corebluetooth"]}],"sections":[],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/CoreBluetooth"},"kind":"symbol","hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library"]]},"schemaVersion":{"patch":0,"minor":3,"major":0},"metadata":{"title":"CoreBluetooth","externalID":"s:m:s:e:s:So14CBManagerStateV15iOS_BLE_LibraryE16debugDescriptionSSvp","modules":[{"name":"iOS_BLE_Library"}],"role":"collection","roleHeading":"Extended Module","symbolKind":"extension"},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/CoreBluetooth/CBManagerState":{"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/CoreBluetooth\/CBManagerState","kind":"symbol","type":"topic","abstract":[],"fragments":[{"text":"extension","kind":"keyword"},{"text":" ","kind":"text"},{"text":"CBManagerState","kind":"identifier","preciseIdentifier":"c:@E@CBManagerState"}],"role":"symbol","url":"\/documentation\/ios_ble_library\/corebluetooth\/cbmanagerstate","navigatorTitle":[{"kind":"identifier","text":"CBManagerState"}],"title":"CBManagerState"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/CoreBluetooth":{"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/CoreBluetooth","title":"CoreBluetooth","role":"collection","kind":"symbol","type":"topic","url":"\/documentation\/ios_ble_library\/corebluetooth","abstract":[]}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/corebluetooth/cbmanagerstate/customdebugstringconvertible-implementations.json: -------------------------------------------------------------------------------- 1 | {"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/CoreBluetooth","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/CoreBluetooth\/CBManagerState"]]},"metadata":{"modules":[{"name":"iOS_BLE_Library"}],"title":"CustomDebugStringConvertible Implementations","role":"collectionGroup"},"sections":[],"topicSections":[{"title":"Instance Properties","identifiers":["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/CoreBluetooth\/CBManagerState\/debugDescription"],"generated":true}],"variants":[{"paths":["\/documentation\/ios_ble_library\/corebluetooth\/cbmanagerstate\/customdebugstringconvertible-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/CoreBluetooth\/CBManagerState\/CustomDebugStringConvertible-Implementations","interfaceLanguage":"swift"},"kind":"article","schemaVersion":{"major":0,"minor":3,"patch":0},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/CoreBluetooth":{"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/CoreBluetooth","title":"CoreBluetooth","role":"collection","kind":"symbol","type":"topic","url":"\/documentation\/ios_ble_library\/corebluetooth","abstract":[]},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/CoreBluetooth/CBManagerState":{"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/CoreBluetooth\/CBManagerState","kind":"symbol","type":"topic","abstract":[],"fragments":[{"text":"extension","kind":"keyword"},{"text":" ","kind":"text"},{"text":"CBManagerState","kind":"identifier","preciseIdentifier":"c:@E@CBManagerState"}],"role":"symbol","url":"\/documentation\/ios_ble_library\/corebluetooth\/cbmanagerstate","navigatorTitle":[{"kind":"identifier","text":"CBManagerState"}],"title":"CBManagerState"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/CoreBluetooth/CBManagerState/debugDescription":{"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/CoreBluetooth\/CBManagerState\/debugDescription","kind":"symbol","abstract":[],"type":"topic","fragments":[{"kind":"keyword","text":"var"},{"text":" ","kind":"text"},{"text":"debugDescription","kind":"identifier"},{"text":": ","kind":"text"},{"text":"String","kind":"typeIdentifier","preciseIdentifier":"s:SS"}],"role":"symbol","url":"\/documentation\/ios_ble_library\/corebluetooth\/cbmanagerstate\/debugdescription","title":"debugDescription"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/corebluetooth/cbmanagerstate/customstringconvertible-implementations.json: -------------------------------------------------------------------------------- 1 | {"metadata":{"title":"CustomStringConvertible Implementations","modules":[{"name":"iOS_BLE_Library"}],"role":"collectionGroup"},"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/CoreBluetooth","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/CoreBluetooth\/CBManagerState"]]},"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/CoreBluetooth\/CBManagerState\/CustomStringConvertible-Implementations","interfaceLanguage":"swift"},"sections":[],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/corebluetooth\/cbmanagerstate\/customstringconvertible-implementations"]}],"schemaVersion":{"minor":3,"major":0,"patch":0},"topicSections":[{"generated":true,"title":"Instance Properties","identifiers":["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/CoreBluetooth\/CBManagerState\/description"]}],"kind":"article","references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/CoreBluetooth/CBManagerState":{"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/CoreBluetooth\/CBManagerState","kind":"symbol","type":"topic","abstract":[],"fragments":[{"text":"extension","kind":"keyword"},{"text":" ","kind":"text"},{"text":"CBManagerState","kind":"identifier","preciseIdentifier":"c:@E@CBManagerState"}],"role":"symbol","url":"\/documentation\/ios_ble_library\/corebluetooth\/cbmanagerstate","navigatorTitle":[{"kind":"identifier","text":"CBManagerState"}],"title":"CBManagerState"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/CoreBluetooth/CBManagerState/description":{"title":"description","abstract":[],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/CoreBluetooth\/CBManagerState\/description","type":"topic","url":"\/documentation\/ios_ble_library\/corebluetooth\/cbmanagerstate\/description","kind":"symbol","role":"symbol","fragments":[{"kind":"keyword","text":"var"},{"text":" ","kind":"text"},{"kind":"identifier","text":"description"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"}]},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/CoreBluetooth":{"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/CoreBluetooth","title":"CoreBluetooth","role":"collection","kind":"symbol","type":"topic","url":"\/documentation\/ios_ble_library\/corebluetooth","abstract":[]}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/foundation.json: -------------------------------------------------------------------------------- 1 | {"schemaVersion":{"major":0,"minor":3,"patch":0},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/foundation"]}],"metadata":{"externalID":"s:m:s:e:s:10Foundation4DataV15iOS_BLE_LibraryE18HexEncodingOptionsV","title":"Foundation","modules":[{"name":"iOS_BLE_Library"}],"roleHeading":"Extended Module","role":"collection","symbolKind":"extension"},"sections":[],"kind":"symbol","topicSections":[{"title":"Extended Structures","identifiers":["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Foundation\/Data"]}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Foundation"},"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library"]]},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Foundation":{"abstract":[],"title":"Foundation","kind":"symbol","role":"collection","url":"\/documentation\/ios_ble_library\/foundation","type":"topic","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Foundation"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Foundation/Data":{"abstract":[],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Foundation\/Data","type":"topic","role":"symbol","kind":"symbol","navigatorTitle":[{"kind":"identifier","text":"Data"}],"fragments":[{"text":"extension","kind":"keyword"},{"text":" ","kind":"text"},{"text":"Data","preciseIdentifier":"s:10Foundation4DataV","kind":"identifier"}],"title":"Data","url":"\/documentation\/ios_ble_library\/foundation\/data"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/peripheral/err/baddelegate.json: -------------------------------------------------------------------------------- 1 | {"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/Err"]]},"sections":[],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/peripheral\/err\/baddelegate"]}],"kind":"symbol","metadata":{"symbolKind":"case","title":"Peripheral.Err.badDelegate","fragments":[{"kind":"keyword","text":"case"},{"text":" ","kind":"text"},{"kind":"identifier","text":"badDelegate"}],"modules":[{"name":"iOS_BLE_Library"}],"externalID":"s:15iOS_BLE_Library10PeripheralC3ErrO11badDelegateyA2EmF","roleHeading":"Case","role":"symbol"},"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"text":"case","kind":"keyword"},{"kind":"text","text":" "},{"kind":"identifier","text":"badDelegate"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/Err\/badDelegate"},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Peripheral/Err/badDelegate":{"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/Err\/badDelegate","role":"symbol","url":"\/documentation\/ios_ble_library\/peripheral\/err\/baddelegate","fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"text":"badDelegate","kind":"identifier"}],"type":"topic","title":"Peripheral.Err.badDelegate","abstract":[],"kind":"symbol"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Peripheral":{"type":"topic","kind":"symbol","role":"symbol","navigatorTitle":[{"kind":"identifier","text":"Peripheral"}],"title":"Peripheral","abstract":[],"url":"\/documentation\/ios_ble_library\/peripheral","fragments":[{"text":"class","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"Peripheral"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Peripheral/Err":{"kind":"symbol","url":"\/documentation\/ios_ble_library\/peripheral\/err","fragments":[{"kind":"keyword","text":"enum"},{"text":" ","kind":"text"},{"kind":"identifier","text":"Err"}],"navigatorTitle":[{"text":"Err","kind":"identifier"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/Err","title":"Peripheral.Err","role":"symbol","type":"topic","abstract":[{"text":"I’m Errr from Omicron Persei 8","type":"text"}]}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/peripheral/err/equatable-implementations.json: -------------------------------------------------------------------------------- 1 | {"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/peripheral\/err\/equatable-implementations"]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/Err"]]},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/Err\/Equatable-Implementations"},"topicSections":[{"title":"Operators","generated":true,"identifiers":["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/Err\/!=(_:_:)"]}],"kind":"article","metadata":{"modules":[{"name":"iOS_BLE_Library"}],"title":"Equatable Implementations","role":"collectionGroup"},"sections":[],"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Peripheral/Err":{"kind":"symbol","url":"\/documentation\/ios_ble_library\/peripheral\/err","fragments":[{"kind":"keyword","text":"enum"},{"text":" ","kind":"text"},{"kind":"identifier","text":"Err"}],"navigatorTitle":[{"text":"Err","kind":"identifier"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/Err","title":"Peripheral.Err","role":"symbol","type":"topic","abstract":[{"text":"I’m Errr from Omicron Persei 8","type":"text"}]},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Peripheral/Err/!=(_:_:)":{"role":"symbol","abstract":[],"title":"!=(_:_:)","url":"\/documentation\/ios_ble_library\/peripheral\/err\/!=(_:_:)","kind":"symbol","fragments":[{"text":"static","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"keyword","text":"func"},{"text":" ","kind":"text"},{"text":"!=","kind":"identifier"},{"text":" ","kind":"text"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"type":"topic","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/Err\/!=(_:_:)"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Peripheral":{"type":"topic","kind":"symbol","role":"symbol","navigatorTitle":[{"kind":"identifier","text":"Peripheral"}],"title":"Peripheral","abstract":[],"url":"\/documentation\/ios_ble_library\/peripheral","fragments":[{"text":"class","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"Peripheral"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/peripheral/err/error-implementations.json: -------------------------------------------------------------------------------- 1 | {"sections":[],"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/Err\/Error-Implementations","interfaceLanguage":"swift"},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/peripheral\/err\/error-implementations"]}],"schemaVersion":{"patch":0,"major":0,"minor":3},"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/Err"]]},"metadata":{"modules":[{"name":"iOS_BLE_Library"}],"role":"collectionGroup","title":"Error Implementations"},"topicSections":[{"identifiers":["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/Err\/localizedDescription"],"generated":true,"title":"Instance Properties"}],"kind":"article","references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Peripheral/Err/localizedDescription":{"role":"symbol","url":"\/documentation\/ios_ble_library\/peripheral\/err\/localizeddescription","type":"topic","fragments":[{"text":"var","kind":"keyword"},{"kind":"text","text":" "},{"kind":"identifier","text":"localizedDescription"},{"text":": ","kind":"text"},{"preciseIdentifier":"s:SS","text":"String","kind":"typeIdentifier"}],"abstract":[],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/Err\/localizedDescription","title":"localizedDescription","kind":"symbol"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Peripheral/Err":{"kind":"symbol","url":"\/documentation\/ios_ble_library\/peripheral\/err","fragments":[{"kind":"keyword","text":"enum"},{"text":" ","kind":"text"},{"kind":"identifier","text":"Err"}],"navigatorTitle":[{"text":"Err","kind":"identifier"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/Err","title":"Peripheral.Err","role":"symbol","type":"topic","abstract":[{"text":"I’m Errr from Omicron Persei 8","type":"text"}]},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Peripheral":{"type":"topic","kind":"symbol","role":"symbol","navigatorTitle":[{"kind":"identifier","text":"Peripheral"}],"title":"Peripheral","abstract":[],"url":"\/documentation\/ios_ble_library\/peripheral","fragments":[{"text":"class","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"Peripheral"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/peripheral/name.json: -------------------------------------------------------------------------------- 1 | {"primaryContentSections":[{"declarations":[{"languages":["swift"],"tokens":[{"text":"var","kind":"keyword"},{"kind":"text","text":" "},{"kind":"identifier","text":"name"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"String","preciseIdentifier":"s:SS"},{"kind":"text","text":"? { "},{"text":"get","kind":"keyword"},{"kind":"text","text":" }"}],"platforms":["macOS"]}],"kind":"declarations"}],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral"]]},"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/name","interfaceLanguage":"swift"},"metadata":{"modules":[{"name":"iOS_BLE_Library"}],"fragments":[{"text":"var","kind":"keyword"},{"text":" ","kind":"text"},{"text":"name","kind":"identifier"},{"kind":"text","text":": "},{"text":"String","kind":"typeIdentifier","preciseIdentifier":"s:SS"},{"text":"?","kind":"text"}],"title":"name","roleHeading":"Instance Property","role":"symbol","externalID":"s:15iOS_BLE_Library10PeripheralC4nameSSSgvp","symbolKind":"property"},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/peripheral\/name"]}],"kind":"symbol","abstract":[{"type":"text","text":"The name of the peripheral."}],"sections":[],"schemaVersion":{"minor":3,"major":0,"patch":0},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Peripheral/name":{"url":"\/documentation\/ios_ble_library\/peripheral\/name","kind":"symbol","abstract":[{"type":"text","text":"The name of the peripheral."}],"fragments":[{"text":"var","kind":"keyword"},{"text":" ","kind":"text"},{"text":"name","kind":"identifier"},{"text":": ","kind":"text"},{"kind":"typeIdentifier","preciseIdentifier":"s:SS","text":"String"},{"text":"?","kind":"text"}],"title":"name","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/name","role":"symbol","type":"topic"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Peripheral":{"type":"topic","kind":"symbol","role":"symbol","navigatorTitle":[{"kind":"identifier","text":"Peripheral"}],"title":"Peripheral","abstract":[],"url":"\/documentation\/ios_ble_library\/peripheral","fragments":[{"text":"class","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"Peripheral"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/peripheral/peripheral.json: -------------------------------------------------------------------------------- 1 | {"schemaVersion":{"major":0,"patch":0,"minor":3},"metadata":{"title":"peripheral","externalID":"s:15iOS_BLE_Library10PeripheralC10peripheralSo12CBPeripheralCvp","roleHeading":"Instance Property","symbolKind":"property","fragments":[{"kind":"keyword","text":"let"},{"text":" ","kind":"text"},{"kind":"identifier","text":"peripheral"},{"text":": ","kind":"text"},{"text":"CBPeripheral","kind":"typeIdentifier","preciseIdentifier":"c:objc(cs)CBPeripheral"}],"role":"symbol","modules":[{"name":"iOS_BLE_Library"}]},"abstract":[{"type":"text","text":"The underlying CBPeripheral instance."}],"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"text":"let","kind":"keyword"},{"kind":"text","text":" "},{"kind":"identifier","text":"peripheral"},{"text":": ","kind":"text"},{"text":"CBPeripheral","preciseIdentifier":"c:objc(cs)CBPeripheral","kind":"typeIdentifier"}],"languages":["swift"],"platforms":["macOS"]}]}],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral"]]},"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/peripheral","interfaceLanguage":"swift"},"kind":"symbol","sections":[],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/peripheral\/peripheral"]}],"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Peripheral/peripheral":{"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/peripheral","url":"\/documentation\/ios_ble_library\/peripheral\/peripheral","type":"topic","role":"symbol","kind":"symbol","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"peripheral","kind":"identifier"},{"text":": ","kind":"text"},{"text":"CBPeripheral","kind":"typeIdentifier","preciseIdentifier":"c:objc(cs)CBPeripheral"}],"title":"peripheral","abstract":[{"text":"The underlying CBPeripheral instance.","type":"text"}]},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Peripheral":{"type":"topic","kind":"symbol","role":"symbol","navigatorTitle":[{"kind":"identifier","text":"Peripheral"}],"title":"Peripheral","abstract":[],"url":"\/documentation\/ios_ble_library\/peripheral","fragments":[{"text":"class","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"Peripheral"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/peripheral/services.json: -------------------------------------------------------------------------------- 1 | {"schemaVersion":{"major":0,"minor":3,"patch":0},"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"text":"var","kind":"keyword"},{"text":" ","kind":"text"},{"text":"services","kind":"identifier"},{"kind":"text","text":": ["},{"text":"CBService","kind":"typeIdentifier","preciseIdentifier":"c:objc(cs)CBService"},{"kind":"text","text":"]? { "},{"text":"get","kind":"keyword"},{"kind":"text","text":" }"}],"platforms":["macOS"],"languages":["swift"]}]}],"sections":[],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral"]]},"kind":"symbol","identifier":{"interfaceLanguage":"swift","url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/services"},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/peripheral\/services"]}],"abstract":[{"type":"text","text":"A list of a peripheral’s discovered services."}],"metadata":{"title":"services","extendedModule":"iOS_BLE_Library","role":"symbol","externalID":"s:15iOS_BLE_Library10PeripheralC8servicesSaySo9CBServiceCGSgvp","symbolKind":"property","fragments":[{"text":"var","kind":"keyword"},{"kind":"text","text":" "},{"text":"services","kind":"identifier"},{"text":": [","kind":"text"},{"preciseIdentifier":"c:objc(cs)CBService","text":"CBService","kind":"typeIdentifier"},{"text":"]?","kind":"text"}],"modules":[{"name":"iOS_BLE_Library"}],"roleHeading":"Instance Property"},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Peripheral":{"type":"topic","kind":"symbol","role":"symbol","navigatorTitle":[{"kind":"identifier","text":"Peripheral"}],"title":"Peripheral","abstract":[],"url":"\/documentation\/ios_ble_library\/peripheral","fragments":[{"text":"class","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"Peripheral"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/Peripheral/services":{"type":"topic","abstract":[{"text":"A list of a peripheral’s discovered services.","type":"text"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/Peripheral\/services","title":"services","role":"symbol","url":"\/documentation\/ios_ble_library\/peripheral\/services","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"text":"services","kind":"identifier"},{"text":": [","kind":"text"},{"kind":"typeIdentifier","preciseIdentifier":"c:objc(cs)CBService","text":"CBService"},{"text":"]?","kind":"text"}],"kind":"symbol"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/rssi/bad.json: -------------------------------------------------------------------------------- 1 | {"sections":[],"metadata":{"roleHeading":"Type Property","externalID":"s:15iOS_BLE_Library4RSSIV3badACvpZ","symbolKind":"property","fragments":[{"text":"static","kind":"keyword"},{"kind":"text","text":" "},{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"bad","kind":"identifier"},{"text":": ","kind":"text"},{"kind":"typeIdentifier","text":"RSSI","preciseIdentifier":"s:15iOS_BLE_Library4RSSIV"}],"title":"bad","modules":[{"name":"iOS_BLE_Library"}],"role":"symbol","extendedModule":"iOS_BLE_Library"},"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"text":"static","kind":"keyword"},{"text":" ","kind":"text"},{"text":"let","kind":"keyword"},{"kind":"text","text":" "},{"text":"bad","kind":"identifier"},{"kind":"text","text":": "},{"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","text":"RSSI","kind":"typeIdentifier","preciseIdentifier":"s:15iOS_BLE_Library4RSSIV"}],"languages":["swift"],"platforms":["macOS"]}]}],"variants":[{"paths":["\/documentation\/ios_ble_library\/rssi\/bad"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"minor":3,"patch":0,"major":0},"kind":"symbol","identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/bad","interfaceLanguage":"swift"},"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI"]]},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI":{"role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"RSSI"}],"type":"topic","navigatorTitle":[{"kind":"identifier","text":"RSSI"}],"title":"RSSI","abstract":[],"kind":"symbol","url":"\/documentation\/ios_ble_library\/rssi"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/bad":{"title":"bad","type":"topic","kind":"symbol","fragments":[{"text":"static","kind":"keyword"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"text":"bad","kind":"identifier"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"RSSI","preciseIdentifier":"s:15iOS_BLE_Library4RSSIV"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/bad","role":"symbol","url":"\/documentation\/ios_ble_library\/rssi\/bad","abstract":[]},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/rssi/equatable-implementations.json: -------------------------------------------------------------------------------- 1 | {"topicSections":[{"title":"Operators","generated":true,"identifiers":["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/!=(_:_:)"]}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/rssi\/equatable-implementations"]}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Equatable-Implementations"},"metadata":{"title":"Equatable Implementations","modules":[{"name":"iOS_BLE_Library"}],"role":"collectionGroup"},"sections":[],"kind":"article","hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI"]]},"schemaVersion":{"minor":3,"patch":0,"major":0},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/!=(_:_:)":{"role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"text":" ","kind":"text"},{"text":"func","kind":"keyword"},{"kind":"text","text":" "},{"text":"!=","kind":"identifier"},{"text":" ","kind":"text"},{"text":"(","kind":"text"},{"text":"Self","kind":"typeIdentifier"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"text":") -> ","kind":"text"},{"text":"Bool","preciseIdentifier":"s:Sb","kind":"typeIdentifier"}],"type":"topic","title":"!=(_:_:)","abstract":[],"kind":"symbol","url":"\/documentation\/ios_ble_library\/rssi\/!=(_:_:)"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI":{"role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"RSSI"}],"type":"topic","navigatorTitle":[{"kind":"identifier","text":"RSSI"}],"title":"RSSI","abstract":[],"kind":"symbol","url":"\/documentation\/ios_ble_library\/rssi"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/rssi/good.json: -------------------------------------------------------------------------------- 1 | {"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/good"},"sections":[],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/rssi\/good"]}],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI"]]},"schemaVersion":{"patch":0,"minor":3,"major":0},"kind":"symbol","primaryContentSections":[{"declarations":[{"languages":["swift"],"platforms":["macOS"],"tokens":[{"kind":"keyword","text":"static"},{"text":" ","kind":"text"},{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"good","kind":"identifier"},{"kind":"text","text":": "},{"preciseIdentifier":"s:15iOS_BLE_Library4RSSIV","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","text":"RSSI","kind":"typeIdentifier"}]}],"kind":"declarations"}],"metadata":{"roleHeading":"Type Property","fragments":[{"text":"static","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"keyword","text":"let"},{"text":" ","kind":"text"},{"kind":"identifier","text":"good"},{"kind":"text","text":": "},{"text":"RSSI","kind":"typeIdentifier","preciseIdentifier":"s:15iOS_BLE_Library4RSSIV"}],"role":"symbol","title":"good","modules":[{"name":"iOS_BLE_Library"}],"symbolKind":"property","externalID":"s:15iOS_BLE_Library4RSSIV4goodACvpZ","extendedModule":"iOS_BLE_Library"},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI":{"role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"RSSI"}],"type":"topic","navigatorTitle":[{"kind":"identifier","text":"RSSI"}],"title":"RSSI","abstract":[],"kind":"symbol","url":"\/documentation\/ios_ble_library\/rssi"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/good":{"kind":"symbol","fragments":[{"kind":"keyword","text":"static"},{"text":" ","kind":"text"},{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"good"},{"kind":"text","text":": "},{"text":"RSSI","kind":"typeIdentifier","preciseIdentifier":"s:15iOS_BLE_Library4RSSIV"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/good","role":"symbol","title":"good","url":"\/documentation\/ios_ble_library\/rssi\/good","abstract":[],"type":"topic"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/rssi/init(integerliteral:).json: -------------------------------------------------------------------------------- 1 | {"schemaVersion":{"major":0,"minor":3,"patch":0},"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI"]]},"metadata":{"role":"symbol","externalID":"s:15iOS_BLE_Library4RSSIV14integerLiteralACSi_tcfc","modules":[{"name":"iOS_BLE_Library"}],"title":"init(integerLiteral:)","roleHeading":"Initializer","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"integerLiteral"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"},{"kind":"text","text":")"}],"symbolKind":"init"},"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/init(integerLiteral:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"ExpressibleByIntegerLiteral.init(integerLiteral:)"},{"text":".","type":"text"}],"sections":[],"variants":[{"paths":["\/documentation\/ios_ble_library\/rssi\/init(integerliteral:)"],"traits":[{"interfaceLanguage":"swift"}]}],"kind":"symbol","primaryContentSections":[{"declarations":[{"languages":["swift"],"platforms":["macOS"],"tokens":[{"text":"init","kind":"keyword"},{"kind":"text","text":"("},{"kind":"externalParam","text":"integerLiteral"},{"text":" ","kind":"text"},{"text":"value","kind":"internalParam"},{"kind":"text","text":": "},{"text":"Int","kind":"typeIdentifier","preciseIdentifier":"s:Si"},{"kind":"text","text":")"}]}],"kind":"declarations"}],"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI":{"role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"RSSI"}],"type":"topic","navigatorTitle":[{"kind":"identifier","text":"RSSI"}],"title":"RSSI","abstract":[],"kind":"symbol","url":"\/documentation\/ios_ble_library\/rssi"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/init(integerLiteral:)":{"title":"init(integerLiteral:)","kind":"symbol","type":"topic","fragments":[{"kind":"identifier","text":"init"},{"text":"(","kind":"text"},{"kind":"externalParam","text":"integerLiteral"},{"kind":"text","text":": "},{"preciseIdentifier":"s:Si","kind":"typeIdentifier","text":"Int"},{"text":")","kind":"text"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/init(integerLiteral:)","role":"symbol","url":"\/documentation\/ios_ble_library\/rssi\/init(integerliteral:)","abstract":[]}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/rssi/integerliteraltype.json: -------------------------------------------------------------------------------- 1 | {"sections":[],"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/IntegerLiteralType","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"title":"RSSI.IntegerLiteralType","externalID":"s:15iOS_BLE_Library4RSSIV18IntegerLiteralTypea","navigatorTitle":[{"text":"IntegerLiteralType","kind":"identifier"}],"fragments":[{"text":"typealias","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"IntegerLiteralType"}],"symbolKind":"typealias","modules":[{"name":"iOS_BLE_Library"}],"roleHeading":"Type Alias","role":"symbol"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"ExpressibleByIntegerLiteral.IntegerLiteralType"},{"text":".","type":"text"}],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI"]]},"schemaVersion":{"minor":3,"patch":0,"major":0},"primaryContentSections":[{"declarations":[{"platforms":["macOS"],"tokens":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"text":"IntegerLiteralType","kind":"identifier"},{"text":" = ","kind":"text"},{"preciseIdentifier":"s:Si","text":"Int","kind":"typeIdentifier"}],"languages":["swift"]}],"kind":"declarations"}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/rssi\/integerliteraltype"]}],"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/IntegerLiteralType":{"title":"RSSI.IntegerLiteralType","url":"\/documentation\/ios_ble_library\/rssi\/integerliteraltype","type":"topic","fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"IntegerLiteralType"}],"navigatorTitle":[{"text":"IntegerLiteralType","kind":"identifier"}],"abstract":[],"kind":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/IntegerLiteralType","role":"symbol"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI":{"role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"RSSI"}],"type":"topic","navigatorTitle":[{"kind":"identifier","text":"RSSI"}],"title":"RSSI","abstract":[],"kind":"symbol","url":"\/documentation\/ios_ble_library\/rssi"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/rssi/ok.json: -------------------------------------------------------------------------------- 1 | {"kind":"symbol","metadata":{"title":"ok","externalID":"s:15iOS_BLE_Library4RSSIV2okACvpZ","roleHeading":"Type Property","role":"symbol","symbolKind":"property","fragments":[{"text":"static","kind":"keyword"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"text":"ok","kind":"identifier"},{"kind":"text","text":": "},{"text":"RSSI","kind":"typeIdentifier","preciseIdentifier":"s:15iOS_BLE_Library4RSSIV"}],"extendedModule":"iOS_BLE_Library","modules":[{"name":"iOS_BLE_Library"}]},"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/ok"},"primaryContentSections":[{"declarations":[{"platforms":["macOS"],"tokens":[{"kind":"keyword","text":"static"},{"text":" ","kind":"text"},{"kind":"keyword","text":"let"},{"text":" ","kind":"text"},{"kind":"identifier","text":"ok"},{"kind":"text","text":": "},{"preciseIdentifier":"s:15iOS_BLE_Library4RSSIV","kind":"typeIdentifier","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","text":"RSSI"}],"languages":["swift"]}],"kind":"declarations"}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/rssi\/ok"]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI"]]},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/ok":{"title":"ok","type":"topic","role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/ok","kind":"symbol","fragments":[{"text":"static","kind":"keyword"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"text":" ","kind":"text"},{"text":"ok","kind":"identifier"},{"kind":"text","text":": "},{"preciseIdentifier":"s:15iOS_BLE_Library4RSSIV","kind":"typeIdentifier","text":"RSSI"}],"abstract":[],"url":"\/documentation\/ios_ble_library\/rssi\/ok"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI":{"role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"RSSI"}],"type":"topic","navigatorTitle":[{"kind":"identifier","text":"RSSI"}],"title":"RSSI","abstract":[],"kind":"symbol","url":"\/documentation\/ios_ble_library\/rssi"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/rssi/outofrange.json: -------------------------------------------------------------------------------- 1 | {"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/rssi\/outofrange"]}],"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/outOfRange","interfaceLanguage":"swift"},"metadata":{"externalID":"s:15iOS_BLE_Library4RSSIV10outOfRangeACvpZ","role":"symbol","modules":[{"name":"iOS_BLE_Library"}],"fragments":[{"text":"static","kind":"keyword"},{"kind":"text","text":" "},{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"outOfRange"},{"text":": ","kind":"text"},{"preciseIdentifier":"s:15iOS_BLE_Library4RSSIV","kind":"typeIdentifier","text":"RSSI"}],"roleHeading":"Type Property","extendedModule":"iOS_BLE_Library","symbolKind":"property","title":"outOfRange"},"schemaVersion":{"patch":0,"major":0,"minor":3},"primaryContentSections":[{"declarations":[{"tokens":[{"text":"static","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"keyword","text":"let"},{"text":" ","kind":"text"},{"kind":"identifier","text":"outOfRange"},{"kind":"text","text":": "},{"text":"RSSI","kind":"typeIdentifier","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","preciseIdentifier":"s:15iOS_BLE_Library4RSSIV"}],"languages":["swift"],"platforms":["macOS"]}],"kind":"declarations"}],"sections":[],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI"]]},"kind":"symbol","references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI":{"role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"RSSI"}],"type":"topic","navigatorTitle":[{"kind":"identifier","text":"RSSI"}],"title":"RSSI","abstract":[],"kind":"symbol","url":"\/documentation\/ios_ble_library\/rssi"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/outOfRange":{"kind":"symbol","role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/outOfRange","fragments":[{"text":"static","kind":"keyword"},{"kind":"text","text":" "},{"text":"let","kind":"keyword"},{"kind":"text","text":" "},{"kind":"identifier","text":"outOfRange"},{"text":": ","kind":"text"},{"kind":"typeIdentifier","preciseIdentifier":"s:15iOS_BLE_Library4RSSIV","text":"RSSI"}],"abstract":[],"url":"\/documentation\/ios_ble_library\/rssi\/outofrange","type":"topic","title":"outOfRange"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/rssi/practicalworst.json: -------------------------------------------------------------------------------- 1 | {"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI"]]},"sections":[],"metadata":{"symbolKind":"property","externalID":"s:15iOS_BLE_Library4RSSIV14practicalWorstACvpZ","modules":[{"name":"iOS_BLE_Library"}],"role":"symbol","title":"practicalWorst","extendedModule":"iOS_BLE_Library","fragments":[{"kind":"keyword","text":"static"},{"text":" ","kind":"text"},{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"practicalWorst"},{"text":": ","kind":"text"},{"text":"RSSI","kind":"typeIdentifier","preciseIdentifier":"s:15iOS_BLE_Library4RSSIV"}],"roleHeading":"Type Property"},"schemaVersion":{"major":0,"minor":3,"patch":0},"primaryContentSections":[{"kind":"declarations","declarations":[{"languages":["swift"],"tokens":[{"kind":"keyword","text":"static"},{"text":" ","kind":"text"},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"text":"practicalWorst","kind":"identifier"},{"kind":"text","text":": "},{"preciseIdentifier":"s:15iOS_BLE_Library4RSSIV","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","text":"RSSI","kind":"typeIdentifier"}],"platforms":["macOS"]}]}],"kind":"symbol","variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/rssi\/practicalworst"]}],"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/practicalWorst"},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/practicalWorst":{"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/practicalWorst","kind":"symbol","abstract":[],"type":"topic","role":"symbol","url":"\/documentation\/ios_ble_library\/rssi\/practicalworst","title":"practicalWorst","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"practicalWorst"},{"text":": ","kind":"text"},{"preciseIdentifier":"s:15iOS_BLE_Library4RSSIV","kind":"typeIdentifier","text":"RSSI"}]},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI":{"role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"RSSI"}],"type":"topic","navigatorTitle":[{"kind":"identifier","text":"RSSI"}],"title":"RSSI","abstract":[],"kind":"symbol","url":"\/documentation\/ios_ble_library\/rssi"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/rssi/signal-swift.enum/bad.json: -------------------------------------------------------------------------------- 1 | {"schemaVersion":{"major":0,"patch":0,"minor":3},"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum"]]},"primaryContentSections":[{"declarations":[{"tokens":[{"text":"case","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"bad"}],"languages":["swift"],"platforms":["macOS"]}],"kind":"declarations"}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/rssi\/signal-swift.enum\/bad"]}],"metadata":{"modules":[{"name":"iOS_BLE_Library"}],"role":"symbol","fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"bad"}],"roleHeading":"Case","title":"RSSI.Signal.bad","externalID":"s:15iOS_BLE_Library4RSSIV6SignalO3badyA2EmF","symbolKind":"case"},"kind":"symbol","identifier":{"interfaceLanguage":"swift","url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum\/bad"},"sections":[],"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI":{"role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"RSSI"}],"type":"topic","navigatorTitle":[{"kind":"identifier","text":"RSSI"}],"title":"RSSI","abstract":[],"kind":"symbol","url":"\/documentation\/ios_ble_library\/rssi"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/Signal-swift.enum/bad":{"title":"RSSI.Signal.bad","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum\/bad","abstract":[],"type":"topic","role":"symbol","url":"\/documentation\/ios_ble_library\/rssi\/signal-swift.enum\/bad","fragments":[{"text":"case","kind":"keyword"},{"kind":"text","text":" "},{"kind":"identifier","text":"bad"}],"kind":"symbol"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/Signal-swift.enum":{"type":"topic","url":"\/documentation\/ios_ble_library\/rssi\/signal-swift.enum","role":"symbol","abstract":[],"fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"text":"Signal","kind":"identifier"}],"navigatorTitle":[{"kind":"identifier","text":"Signal"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum","kind":"symbol","title":"RSSI.Signal"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/rssi/signal-swift.enum/equatable-implementations.json: -------------------------------------------------------------------------------- 1 | {"identifier":{"interfaceLanguage":"swift","url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum\/Equatable-Implementations"},"metadata":{"role":"collectionGroup","modules":[{"name":"iOS_BLE_Library"}],"title":"Equatable Implementations"},"kind":"article","schemaVersion":{"minor":3,"major":0,"patch":0},"topicSections":[{"identifiers":["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum\/!=(_:_:)"],"generated":true,"title":"Operators"}],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum"]]},"sections":[],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/rssi\/signal-swift.enum\/equatable-implementations"]}],"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/Signal-swift.enum/!=(_:_:)":{"url":"\/documentation\/ios_ble_library\/rssi\/signal-swift.enum\/!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"text":"func","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"text":"Self","kind":"typeIdentifier"},{"text":", ","kind":"text"},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum\/!=(_:_:)","title":"!=(_:_:)","type":"topic","kind":"symbol","abstract":[],"role":"symbol"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/Signal-swift.enum":{"type":"topic","url":"\/documentation\/ios_ble_library\/rssi\/signal-swift.enum","role":"symbol","abstract":[],"fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"text":"Signal","kind":"identifier"}],"navigatorTitle":[{"kind":"identifier","text":"Signal"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum","kind":"symbol","title":"RSSI.Signal"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI":{"role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"RSSI"}],"type":"topic","navigatorTitle":[{"kind":"identifier","text":"RSSI"}],"title":"RSSI","abstract":[],"kind":"symbol","url":"\/documentation\/ios_ble_library\/rssi"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/rssi/signal-swift.enum/good.json: -------------------------------------------------------------------------------- 1 | {"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum"]]},"metadata":{"externalID":"s:15iOS_BLE_Library4RSSIV6SignalO4goodyA2EmF","roleHeading":"Case","symbolKind":"case","fragments":[{"text":"case","kind":"keyword"},{"kind":"text","text":" "},{"text":"good","kind":"identifier"}],"role":"symbol","modules":[{"name":"iOS_BLE_Library"}],"title":"RSSI.Signal.good"},"sections":[],"kind":"symbol","schemaVersion":{"patch":0,"minor":3,"major":0},"primaryContentSections":[{"kind":"declarations","declarations":[{"languages":["swift"],"platforms":["macOS"],"tokens":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"text":"good","kind":"identifier"}]}]}],"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/rssi\/signal-swift.enum\/good"]}],"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum\/good","interfaceLanguage":"swift"},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/Signal-swift.enum":{"type":"topic","url":"\/documentation\/ios_ble_library\/rssi\/signal-swift.enum","role":"symbol","abstract":[],"fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"text":"Signal","kind":"identifier"}],"navigatorTitle":[{"kind":"identifier","text":"Signal"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum","kind":"symbol","title":"RSSI.Signal"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI":{"role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"RSSI"}],"type":"topic","navigatorTitle":[{"kind":"identifier","text":"RSSI"}],"title":"RSSI","abstract":[],"kind":"symbol","url":"\/documentation\/ios_ble_library\/rssi"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/Signal-swift.enum/good":{"title":"RSSI.Signal.good","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum\/good","abstract":[],"type":"topic","role":"symbol","url":"\/documentation\/ios_ble_library\/rssi\/signal-swift.enum\/good","fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"text":"good","kind":"identifier"}],"kind":"symbol"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/rssi/signal-swift.enum/ok.json: -------------------------------------------------------------------------------- 1 | {"kind":"symbol","variants":[{"paths":["\/documentation\/ios_ble_library\/rssi\/signal-swift.enum\/ok"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum\/ok","interfaceLanguage":"swift"},"schemaVersion":{"minor":3,"patch":0,"major":0},"metadata":{"role":"symbol","roleHeading":"Case","modules":[{"name":"iOS_BLE_Library"}],"externalID":"s:15iOS_BLE_Library4RSSIV6SignalO2okyA2EmF","fragments":[{"text":"case","kind":"keyword"},{"text":" ","kind":"text"},{"text":"ok","kind":"identifier"}],"title":"RSSI.Signal.ok","symbolKind":"case"},"primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"tokens":[{"text":"case","kind":"keyword"},{"text":" ","kind":"text"},{"text":"ok","kind":"identifier"}],"languages":["swift"]}]}],"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum"]]},"sections":[],"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/Signal-swift.enum":{"type":"topic","url":"\/documentation\/ios_ble_library\/rssi\/signal-swift.enum","role":"symbol","abstract":[],"fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"text":"Signal","kind":"identifier"}],"navigatorTitle":[{"kind":"identifier","text":"Signal"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum","kind":"symbol","title":"RSSI.Signal"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/Signal-swift.enum/ok":{"title":"RSSI.Signal.ok","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum\/ok","abstract":[],"type":"topic","role":"symbol","url":"\/documentation\/ios_ble_library\/rssi\/signal-swift.enum\/ok","fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"text":"ok","kind":"identifier"}],"kind":"symbol"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI":{"role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"RSSI"}],"type":"topic","navigatorTitle":[{"kind":"identifier","text":"RSSI"}],"title":"RSSI","abstract":[],"kind":"symbol","url":"\/documentation\/ios_ble_library\/rssi"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/rssi/signal-swift.enum/outofrange.json: -------------------------------------------------------------------------------- 1 | {"kind":"symbol","metadata":{"externalID":"s:15iOS_BLE_Library4RSSIV6SignalO10outOfRangeyA2EmF","roleHeading":"Case","modules":[{"name":"iOS_BLE_Library"}],"role":"symbol","title":"RSSI.Signal.outOfRange","symbolKind":"case","fragments":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"outOfRange"}]},"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum"]]},"sections":[],"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum\/outOfRange","interfaceLanguage":"swift"},"variants":[{"paths":["\/documentation\/ios_ble_library\/rssi\/signal-swift.enum\/outofrange"],"traits":[{"interfaceLanguage":"swift"}]}],"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"outOfRange"}],"platforms":["macOS"],"languages":["swift"]}]}],"schemaVersion":{"patch":0,"minor":3,"major":0},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/Signal-swift.enum":{"type":"topic","url":"\/documentation\/ios_ble_library\/rssi\/signal-swift.enum","role":"symbol","abstract":[],"fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"text":"Signal","kind":"identifier"}],"navigatorTitle":[{"kind":"identifier","text":"Signal"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum","kind":"symbol","title":"RSSI.Signal"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/Signal-swift.enum/outOfRange":{"title":"RSSI.Signal.outOfRange","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum\/outOfRange","abstract":[],"type":"topic","role":"symbol","url":"\/documentation\/ios_ble_library\/rssi\/signal-swift.enum\/outofrange","fragments":[{"text":"case","kind":"keyword"},{"kind":"text","text":" "},{"kind":"identifier","text":"outOfRange"}],"kind":"symbol"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI":{"role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"RSSI"}],"type":"topic","navigatorTitle":[{"kind":"identifier","text":"RSSI"}],"title":"RSSI","abstract":[],"kind":"symbol","url":"\/documentation\/ios_ble_library\/rssi"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/rssi/signal-swift.enum/practicalworst.json: -------------------------------------------------------------------------------- 1 | {"sections":[],"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum\/practicalWorst","interfaceLanguage":"swift"},"schemaVersion":{"major":0,"minor":3,"patch":0},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/rssi\/signal-swift.enum\/practicalworst"]}],"metadata":{"role":"symbol","externalID":"s:15iOS_BLE_Library4RSSIV6SignalO14practicalWorstyA2EmF","fragments":[{"text":"case","kind":"keyword"},{"text":" ","kind":"text"},{"text":"practicalWorst","kind":"identifier"}],"roleHeading":"Case","modules":[{"name":"iOS_BLE_Library"}],"title":"RSSI.Signal.practicalWorst","symbolKind":"case"},"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum"]]},"kind":"symbol","primaryContentSections":[{"kind":"declarations","declarations":[{"languages":["swift"],"platforms":["macOS"],"tokens":[{"kind":"keyword","text":"case"},{"kind":"text","text":" "},{"kind":"identifier","text":"practicalWorst"}]}]}],"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI":{"role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"RSSI"}],"type":"topic","navigatorTitle":[{"kind":"identifier","text":"RSSI"}],"title":"RSSI","abstract":[],"kind":"symbol","url":"\/documentation\/ios_ble_library\/rssi"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/Signal-swift.enum/practicalWorst":{"type":"topic","url":"\/documentation\/ios_ble_library\/rssi\/signal-swift.enum\/practicalworst","role":"symbol","abstract":[],"fragments":[{"text":"case","kind":"keyword"},{"kind":"text","text":" "},{"kind":"identifier","text":"practicalWorst"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum\/practicalWorst","kind":"symbol","title":"RSSI.Signal.practicalWorst"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/Signal-swift.enum":{"type":"topic","url":"\/documentation\/ios_ble_library\/rssi\/signal-swift.enum","role":"symbol","abstract":[],"fragments":[{"kind":"keyword","text":"enum"},{"kind":"text","text":" "},{"text":"Signal","kind":"identifier"}],"navigatorTitle":[{"kind":"identifier","text":"Signal"}],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/Signal-swift.enum","kind":"symbol","title":"RSSI.Signal"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/rssi/value.json: -------------------------------------------------------------------------------- 1 | {"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/value","interfaceLanguage":"swift"},"schemaVersion":{"major":0,"minor":3,"patch":0},"kind":"symbol","variants":[{"paths":["\/documentation\/ios_ble_library\/rssi\/value"],"traits":[{"interfaceLanguage":"swift"}]}],"sections":[],"primaryContentSections":[{"declarations":[{"platforms":["macOS"],"languages":["swift"],"tokens":[{"kind":"keyword","text":"let"},{"text":" ","kind":"text"},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"text":"Int","preciseIdentifier":"s:Si","kind":"typeIdentifier"}]}],"kind":"declarations"}],"metadata":{"externalID":"s:15iOS_BLE_Library4RSSIV5valueSivp","role":"symbol","modules":[{"name":"iOS_BLE_Library"}],"roleHeading":"Instance Property","title":"value","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"text":"value","kind":"identifier"},{"text":": ","kind":"text"},{"text":"Int","preciseIdentifier":"s:Si","kind":"typeIdentifier"}],"symbolKind":"property"},"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI"]]},"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI/value":{"type":"topic","abstract":[],"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI\/value","title":"value","role":"symbol","url":"\/documentation\/ios_ble_library\/rssi\/value","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"text":"value","kind":"identifier"},{"text":": ","kind":"text"},{"kind":"typeIdentifier","text":"Int","preciseIdentifier":"s:Si"}],"kind":"symbol"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/RSSI":{"role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/RSSI","fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"RSSI"}],"type":"topic","navigatorTitle":[{"kind":"identifier","text":"RSSI"}],"title":"RSSI","abstract":[],"kind":"symbol","url":"\/documentation\/ios_ble_library\/rssi"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/scanresult/name.json: -------------------------------------------------------------------------------- 1 | {"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/ScanResult"]]},"schemaVersion":{"minor":3,"patch":0,"major":0},"variants":[{"traits":[{"interfaceLanguage":"swift"}],"paths":["\/documentation\/ios_ble_library\/scanresult\/name"]}],"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/ScanResult\/name","interfaceLanguage":"swift"},"metadata":{"role":"symbol","symbolKind":"property","title":"name","externalID":"s:15iOS_BLE_Library10ScanResultV4nameSSSgvp","modules":[{"name":"iOS_BLE_Library"}],"roleHeading":"Instance Property","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"text":"name","kind":"identifier"},{"text":": ","kind":"text"},{"text":"String","kind":"typeIdentifier","preciseIdentifier":"s:SS"},{"text":"?","kind":"text"}]},"sections":[],"primaryContentSections":[{"declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"text":" ","kind":"text"},{"kind":"identifier","text":"name"},{"text":": ","kind":"text"},{"text":"String","kind":"typeIdentifier","preciseIdentifier":"s:SS"},{"kind":"text","text":"? { "},{"text":"get","kind":"keyword"},{"text":" }","kind":"text"}],"platforms":["macOS"],"languages":["swift"]}],"kind":"declarations"}],"kind":"symbol","references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/ScanResult/name":{"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/ScanResult\/name","kind":"symbol","title":"name","fragments":[{"text":"var","kind":"keyword"},{"kind":"text","text":" "},{"text":"name","kind":"identifier"},{"kind":"text","text":": "},{"preciseIdentifier":"s:SS","text":"String","kind":"typeIdentifier"},{"text":"?","kind":"text"}],"url":"\/documentation\/ios_ble_library\/scanresult\/name","type":"topic","role":"symbol","abstract":[]},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/ScanResult":{"title":"ScanResult","kind":"symbol","abstract":[],"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"ScanResult"}],"navigatorTitle":[{"text":"ScanResult","kind":"identifier"}],"type":"topic","url":"\/documentation\/ios_ble_library\/scanresult","role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/ScanResult"}}} -------------------------------------------------------------------------------- /docs/data/documentation/ios_ble_library/scanresult/peripheral.json: -------------------------------------------------------------------------------- 1 | {"metadata":{"symbolKind":"property","title":"peripheral","modules":[{"name":"iOS_BLE_Library"}],"role":"symbol","roleHeading":"Instance Property","externalID":"s:15iOS_BLE_Library10ScanResultV10peripheralSo12CBPeripheralCvp","fragments":[{"text":"let","kind":"keyword"},{"kind":"text","text":" "},{"text":"peripheral","kind":"identifier"},{"kind":"text","text":": "},{"preciseIdentifier":"c:objc(cs)CBPeripheral","text":"CBPeripheral","kind":"typeIdentifier"}]},"identifier":{"url":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/ScanResult\/peripheral","interfaceLanguage":"swift"},"schemaVersion":{"patch":0,"minor":3,"major":0},"hierarchy":{"paths":[["doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/ScanResult"]]},"sections":[],"kind":"symbol","primaryContentSections":[{"kind":"declarations","declarations":[{"platforms":["macOS"],"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"peripheral"},{"text":": ","kind":"text"},{"text":"CBPeripheral","kind":"typeIdentifier","preciseIdentifier":"c:objc(cs)CBPeripheral"}],"languages":["swift"]}]}],"variants":[{"paths":["\/documentation\/ios_ble_library\/scanresult\/peripheral"],"traits":[{"interfaceLanguage":"swift"}]}],"references":{"doc://iOS-BLE-Library/documentation/iOS_BLE_Library":{"title":"iOS_BLE_Library","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library","url":"\/documentation\/ios_ble_library","kind":"symbol","type":"topic","abstract":[{"type":"text","text":"This library is a wrapper around the CoreBluetooth framework which provides a modern async API based on Combine Framework."}],"role":"collection"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/ScanResult":{"title":"ScanResult","kind":"symbol","abstract":[],"fragments":[{"text":"struct","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"ScanResult"}],"navigatorTitle":[{"text":"ScanResult","kind":"identifier"}],"type":"topic","url":"\/documentation\/ios_ble_library\/scanresult","role":"symbol","identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/ScanResult"},"doc://iOS-BLE-Library/documentation/iOS_BLE_Library/ScanResult/peripheral":{"identifier":"doc:\/\/iOS-BLE-Library\/documentation\/iOS_BLE_Library\/ScanResult\/peripheral","kind":"symbol","title":"peripheral","fragments":[{"text":"let","kind":"keyword"},{"text":" ","kind":"text"},{"kind":"identifier","text":"peripheral"},{"text":": ","kind":"text"},{"preciseIdentifier":"c:objc(cs)CBPeripheral","kind":"typeIdentifier","text":"CBPeripheral"}],"url":"\/documentation\/ios_ble_library\/scanresult\/peripheral","type":"topic","role":"symbol","abstract":[]}}} -------------------------------------------------------------------------------- /docs/developer-og-twitter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicSemiconductor/IOS-BLE-Library/fcaee0c6e0f697e1d455d20e64fb6a13ed4b1f09/docs/developer-og-twitter.jpg -------------------------------------------------------------------------------- /docs/developer-og.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicSemiconductor/IOS-BLE-Library/fcaee0c6e0f697e1d455d20e64fb6a13ed4b1f09/docs/developer-og.jpg -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicSemiconductor/IOS-BLE-Library/fcaee0c6e0f697e1d455d20e64fb6a13ed4b1f09/docs/favicon.ico -------------------------------------------------------------------------------- /docs/favicon.svg: -------------------------------------------------------------------------------- 1 | 10 | 11 | -------------------------------------------------------------------------------- /docs/img/added-icon.d6f7e47d.svg: -------------------------------------------------------------------------------- 1 | 10 | 11 | -------------------------------------------------------------------------------- /docs/img/deprecated-icon.015b4f17.svg: -------------------------------------------------------------------------------- 1 | 10 | 11 | -------------------------------------------------------------------------------- /docs/img/modified-icon.f496e73d.svg: -------------------------------------------------------------------------------- 1 | 10 | 11 | -------------------------------------------------------------------------------- /docs/img/no-image@2x.df2a0a50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicSemiconductor/IOS-BLE-Library/fcaee0c6e0f697e1d455d20e64fb6a13ed4b1f09/docs/img/no-image@2x.df2a0a50.png -------------------------------------------------------------------------------- /docs/js/highlight-js-diff.62d66733.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This source file is part of the Swift.org open source project 3 | * 4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors 5 | * Licensed under Apache License v2.0 with Runtime Library Exception 6 | * 7 | * See https://swift.org/LICENSE.txt for license information 8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors 9 | */ 10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-diff"],{"48b8":function(e,n){function a(e){const n=e.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:n.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:n.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}e.exports=a}}]); -------------------------------------------------------------------------------- /docs/js/highlight-js-http.163e45b6.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This source file is part of the Swift.org open source project 3 | * 4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors 5 | * Licensed under Apache License v2.0 with Runtime Library Exception 6 | * 7 | * See https://swift.org/LICENSE.txt for license information 8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors 9 | */ 10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-http"],{c01d:function(e,n){function a(e){const n=e.regex,a="HTTP/(2|1\\.[01])",s=/[A-Za-z][A-Za-z0-9-]*/,t={className:"attribute",begin:n.concat("^",s,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},i=[t,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+a+" \\d{3})",end:/$/,contains:[{className:"meta",begin:a},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:i}},{begin:"(?=^[A-Z]+ (.*?) "+a+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:a},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:i}},e.inherit(t,{relevance:0})]}}e.exports=a}}]); -------------------------------------------------------------------------------- /docs/js/highlight-js-java.8326d9d8.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This source file is part of the Swift.org open source project 3 | * 4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors 5 | * Licensed under Apache License v2.0 with Runtime Library Exception 6 | * 7 | * See https://swift.org/LICENSE.txt for license information 8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors 9 | */ 10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-java"],{"332f":function(e,a){var n="[0-9](_*[0-9])*",s=`\\.(${n})`,i="[0-9a-fA-F](_*[0-9a-fA-F])*",t={className:"number",variants:[{begin:`(\\b(${n})((${s})|\\.)?|(${s}))[eE][+-]?(${n})[fFdD]?\\b`},{begin:`\\b(${n})((${s})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${s})[fFdD]?\\b`},{begin:`\\b(${n})[fFdD]\\b`},{begin:`\\b0[xX]((${i})\\.?|(${i})?\\.(${i}))[pP][+-]?(${n})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${i})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function r(e,a,n){return-1===n?"":e.replace(a,s=>r(e,a,n-1))}function c(e){e.regex;const a="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",n=a+r("(?:<"+a+"~~~(?:\\s*,\\s*"+a+"~~~)*>)?",/~~~/g,2),s=["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do"],i=["super","this"],c=["false","true","null"],l=["char","boolean","long","float","int","byte","short","double"],o={keyword:s,literal:c,type:l,built_in:i},b={className:"meta",begin:"@"+a,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},_={className:"params",begin:/\(/,end:/\)/,keywords:o,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:"Java",aliases:["jsp"],keywords:o,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:"string",contains:[e.BACKSLASH_ESCAPE]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,a],className:{1:"keyword",3:"title.class"}},{begin:[a,/\s+/,a,/\s+/,/=/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,a],className:{1:"keyword",3:"title.class"},contains:[_,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+n+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:o,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:o,relevance:0,contains:[b,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,t,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},t,b]}}e.exports=c}}]); -------------------------------------------------------------------------------- /docs/js/highlight-js-json.471128d2.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This source file is part of the Swift.org open source project 3 | * 4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors 5 | * Licensed under Apache License v2.0 with Runtime Library Exception 6 | * 7 | * See https://swift.org/LICENSE.txt for license information 8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors 9 | */ 10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-json"],{"5ad2":function(n,e){function a(n){const e={className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},a={match:/[{}[\],:]/,className:"punctuation",relevance:0},s={beginKeywords:["true","false","null"].join(" ")};return{name:"JSON",contains:[e,a,n.QUOTE_STRING_MODE,s,n.C_NUMBER_MODE,n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}n.exports=a}}]); -------------------------------------------------------------------------------- /docs/js/highlight-js-llvm.6100b125.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This source file is part of the Swift.org open source project 3 | * 4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors 5 | * Licensed under Apache License v2.0 with Runtime Library Exception 6 | * 7 | * See https://swift.org/LICENSE.txt for license information 8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors 9 | */ 10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-llvm"],{"7c30":function(e,n){function a(e){const n=e.regex,a=/([-a-zA-Z$._][\w$.-]*)/,t={className:"type",begin:/\bi\d+(?=\s|\b)/},i={className:"operator",relevance:0,begin:/=/},c={className:"punctuation",relevance:0,begin:/,/},l={className:"number",variants:[{begin:/0[xX][a-fA-F0-9]+/},{begin:/-?\d+(?:[.]\d+)?(?:[eE][-+]?\d+(?:[.]\d+)?)?/}],relevance:0},r={className:"symbol",variants:[{begin:/^\s*[a-z]+:/}],relevance:0},s={className:"variable",variants:[{begin:n.concat(/%/,a)},{begin:/%\d+/},{begin:/#\d+/}]},o={className:"title",variants:[{begin:n.concat(/@/,a)},{begin:/@\d+/},{begin:n.concat(/!/,a)},{begin:n.concat(/!\d+/,a)},{begin:/!\d+/}]};return{name:"LLVM IR",keywords:"begin end true false declare define global constant private linker_private internal available_externally linkonce linkonce_odr weak weak_odr appending dllimport dllexport common default hidden protected extern_weak external thread_local zeroinitializer undef null to tail target triple datalayout volatile nuw nsw nnan ninf nsz arcp fast exact inbounds align addrspace section alias module asm sideeffect gc dbg linker_private_weak attributes blockaddress initialexec localdynamic localexec prefix unnamed_addr ccc fastcc coldcc x86_stdcallcc x86_fastcallcc arm_apcscc arm_aapcscc arm_aapcs_vfpcc ptx_device ptx_kernel intel_ocl_bicc msp430_intrcc spir_func spir_kernel x86_64_sysvcc x86_64_win64cc x86_thiscallcc cc c signext zeroext inreg sret nounwind noreturn noalias nocapture byval nest readnone readonly inlinehint noinline alwaysinline optsize ssp sspreq noredzone noimplicitfloat naked builtin cold nobuiltin noduplicate nonlazybind optnone returns_twice sanitize_address sanitize_memory sanitize_thread sspstrong uwtable returned type opaque eq ne slt sgt sle sge ult ugt ule uge oeq one olt ogt ole oge ord uno ueq une x acq_rel acquire alignstack atomic catch cleanup filter inteldialect max min monotonic nand personality release seq_cst singlethread umax umin unordered xchg add fadd sub fsub mul fmul udiv sdiv fdiv urem srem frem shl lshr ashr and or xor icmp fcmp phi call trunc zext sext fptrunc fpext uitofp sitofp fptoui fptosi inttoptr ptrtoint bitcast addrspacecast select va_arg ret br switch invoke unwind unreachable indirectbr landingpad resume malloc alloca free load store getelementptr extractelement insertelement shufflevector getresult extractvalue insertvalue atomicrmw cmpxchg fence argmemonly double",contains:[t,e.COMMENT(/;\s*$/,null,{relevance:0}),e.COMMENT(/;/,/$/),e.QUOTE_STRING_MODE,{className:"string",variants:[{begin:/"/,end:/[^\\]"/}]},o,c,i,s,r,l]}}e.exports=a}}]); -------------------------------------------------------------------------------- /docs/js/highlight-js-markdown.90077643.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This source file is part of the Swift.org open source project 3 | * 4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors 5 | * Licensed under Apache License v2.0 with Runtime Library Exception 6 | * 7 | * See https://swift.org/LICENSE.txt for license information 8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors 9 | */ 10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-markdown"],{"04b0":function(n,e){function a(n){const e=n.regex,a={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},i={begin:"^[-\\*]{3,}",end:"$"},s={className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},c={className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},t={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},g=/[A-Za-z][A-Za-z0-9+.-]*/,d={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:e.concat(/\[.+?\]\(/,g,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},l={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},o={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]};l.contains.push(o),o.contains.push(l);let b=[a,d];l.contains=l.contains.concat(b),o.contains=o.contains.concat(b),b=b.concat(l,o);const r={className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:b},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:b}]}]},m={className:"quote",begin:"^>\\s+",contains:b,end:"$"};return{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[r,a,c,l,o,m,s,i,d,t]}}n.exports=a}}]); -------------------------------------------------------------------------------- /docs/js/highlight-js-shell.dd7f411f.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This source file is part of the Swift.org open source project 3 | * 4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors 5 | * Licensed under Apache License v2.0 with Runtime Library Exception 6 | * 7 | * See https://swift.org/LICENSE.txt for license information 8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors 9 | */ 10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-shell"],{b65b:function(s,n){function e(s){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}s.exports=e}}]); -------------------------------------------------------------------------------- /docs/js/highlight-js-xml.9c3688c7.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * This source file is part of the Swift.org open source project 3 | * 4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors 5 | * Licensed under Apache License v2.0 with Runtime Library Exception 6 | * 7 | * See https://swift.org/LICENSE.txt for license information 8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors 9 | */ 10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-xml"],{"8dcb":function(e,n){function a(e){const n=e.regex,a=n.concat(/[A-Z_]/,n.optional(/[A-Z0-9_.-]*:/),/[A-Z0-9_.-]*/),s=/[A-Za-z0-9._:-]+/,t={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},i={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},c=e.inherit(i,{begin:/\(/,end:/\)/}),l=e.inherit(e.APOS_STRING_MODE,{className:"string"}),r=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),g={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin://,relevance:10,contains:[i,r,l,c,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[i,c,r,l]}]}]},e.COMMENT(//,{relevance:10}),{begin://,relevance:10},t,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[g],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[g],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:n.concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:a,relevance:0,starts:g}]},{className:"tag",begin:n.concat(/<\//,n.lookahead(n.concat(a,/>/))),contains:[{className:"name",begin:a,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}e.exports=a}}]); -------------------------------------------------------------------------------- /docs/metadata.json: -------------------------------------------------------------------------------- 1 | {"bundleIdentifier":"iOS-BLE-Library","schemaVersion":{"major":0,"patch":0,"minor":1},"bundleDisplayName":"iOS-BLE-Library"} -------------------------------------------------------------------------------- /format.swift-format: -------------------------------------------------------------------------------- 1 | { 2 | "fileScopedDeclarationPrivacy" : { 3 | "accessLevel" : "private" 4 | }, 5 | "indentation" : { 6 | "tabs" : 1 7 | }, 8 | "indentConditionalCompilationBlocks" : true, 9 | "indentSwitchCaseLabels" : false, 10 | "lineBreakAroundMultilineExpressionChainComponents" : false, 11 | "lineBreakBeforeControlFlowKeywords" : false, 12 | "lineBreakBeforeEachArgument" : false, 13 | "lineBreakBeforeEachGenericRequirement" : false, 14 | "lineLength" : 100, 15 | "maximumBlankLines" : 1, 16 | "prioritizeKeepingFunctionOutputTogether" : false, 17 | "respectsExistingLineBreaks" : true, 18 | "rules" : { 19 | "AllPublicDeclarationsHaveDocumentation" : false, 20 | "AlwaysUseLowerCamelCase" : true, 21 | "AmbiguousTrailingClosureOverload" : true, 22 | "BeginDocumentationCommentWithOneLineSummary" : false, 23 | "DoNotUseSemicolons" : true, 24 | "DontRepeatTypeInStaticProperties" : true, 25 | "FileScopedDeclarationPrivacy" : true, 26 | "FullyIndirectEnum" : true, 27 | "GroupNumericLiterals" : true, 28 | "IdentifiersMustBeASCII" : true, 29 | "NeverForceUnwrap" : false, 30 | "NeverUseForceTry" : false, 31 | "NeverUseImplicitlyUnwrappedOptionals" : false, 32 | "NoAccessLevelOnExtensionDeclaration" : true, 33 | "NoBlockComments" : true, 34 | "NoCasesWithOnlyFallthrough" : true, 35 | "NoEmptyTrailingClosureParentheses" : true, 36 | "NoLabelsInCasePatterns" : true, 37 | "NoLeadingUnderscores" : false, 38 | "NoParensAroundConditions" : true, 39 | "NoVoidReturnOnFunctionSignature" : true, 40 | "OneCasePerLine" : true, 41 | "OneVariableDeclarationPerLine" : true, 42 | "OnlyOneTrailingClosureArgument" : true, 43 | "OrderedImports" : true, 44 | "ReturnVoidInsteadOfEmptyTuple" : true, 45 | "UseEarlyExits" : false, 46 | "UseLetInEveryBoundCaseVariable" : true, 47 | "UseShorthandTypeNames" : true, 48 | "UseSingleLinePropertyGetter" : true, 49 | "UseSynthesizedInitializer" : true, 50 | "UseTripleSlashForDocumentationComments" : true, 51 | "UseWhereClausesInForLoops" : false, 52 | "ValidateDocumentationComments" : false 53 | }, 54 | "tabWidth" : 8, 55 | "version" : 1 56 | } 57 | -------------------------------------------------------------------------------- /res/Screenshot-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicSemiconductor/IOS-BLE-Library/fcaee0c6e0f697e1d455d20e64fb6a13ed4b1f09/res/Screenshot-1.png --------------------------------------------------------------------------------