All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Add setting to broadcast errors sent to cancelEverything to all listeners
= Fix not building properly on Xcode 13 / iOS 15
- Fix problem with timeouts in writeAndAssemble not working as expected if partial data is received- Fix problem with the queue not restarting after transferring states back to Bluejay
- Replace direct use of XCGLogger with a logging callback interface
- Fix problem with the queue not restarting after transferring states back to Bluejay
- Added support for Swift Package Manager
- Bumped iOS target to 11 and recommended Xcode to 11.3.1
- Updated source and dependencies to support Swift 5
- Fixed a crash when making a Bluejay call right after an explicit disconnect
- Fixed disconnection clean up not working and crashing when it's caused by an unpairing attempt
- Added initial support for did modify services delegation
- Fixed and improved Carthage instruction
- XCGLogger, and APIs for logging to a file and monitoring log file changes
- Dittojay demo app as a virtual Bluetooth LE heart rate sensor
- Also allows testing background state restoration
- Migrate to Swift 4.2
- Dropped support for iOS 9
- Removed outdated or soon-to-be-replaced demo projects and documentation
- Redo, clean up, and improve Bluejay demo app to work with Dittojay demo.
- Restrict public access to
Peripheral
- Background and listen restoration callbacks
- Multiple listen crash by allowing trapping or replacing an existing listen
- Order of queueing when discovering services and characteristics
- Thread-related crashes by adding main thread safety checks to important Bluejay API calls
- Add SwiftLint
- Add custom SwiftLint yaml with minor alterations
- Conform all files to SwiftLint suggestions
- Add StartMode to better encapsulate CBCentralManager initialization options
- Add WarningOptions to better encapsulate connect warning options
- Fix handling of expected and unexpected disconnections
- Add disconnect handler to handle auto-reconnect
- Remove all cancellation callbacks; use existing failure blocks and look for BluejayError.cancelled instead if you need to differentiate between a failure caused by cancellation versus a failure caused by other errors
- Return Bluejay Peripheral instead of CBPeripheral for connect, disconnect, and RSSI observer callbacks; so that you don't have to import CoreBluetooth in many of your files anymore, and you can also get a "better/more suitable" peripheral object to work with
- Fix a scan crash caused by not clearing the scan request's global timer
- Remove set privileges on all public Bluejay instance variables; they are all supposed to be read only from the get go, but a few were settable and that was dangerous
- Added an option to
scan
to change the threshold for ignoring discoveries based on insignificant changes to RSSI
- Added warnings against using
scan
withserviceIdentifiers
set tonil
or empty.
- Add API to check whether a peripheral is listening to a characteristic
- Allow disabling auto-reconnect when using cancelEverything
- Expose auto-reconnect variable
- Update readme, changelog, and documentation
- Fix podspec
- Fix all Xcode 9.3 warnings
- Add a new API to allow shutting down Bluejay and transfer the CoreBluetooth manager and delegate to another library or code
- We weren't using the correct key name to access the listen cache, so listen restoration was broken. This should now be fixed.
- There was a subtle true/false reversal mistake that we didn't catch when bringing in the new error enums. This was causing the second connection request to cancel the first ongoing connection request.
- Prevent indefinite flush listen
- Add missing cancellation handling for flush listen
- Dedup listen semaphore signals in flush listen
- Add missing semaphore signal for end listen for flush listen
- Use timeout enum in flush listen
- Add timeout to synchronized listen, which allows handling stale or stuck listens when using the run background task.
- Expose peripheral maximum write size API. Useful when EDL is needed and the maximum write size is unknown.
- Connecting immediately after a disconnect wasn't possible due to a strict and slightly incorrect double connect protection. This has been fixed now.
- Better management of semaphore locks and releases for write and assemble
- Better usage of end listen for write and assemble
- Allow failing write and assemble if bluetooth becomes unavailable or if there's a disconnection after both the read and listen have been setup correctly
- Use
isBluetoothStateUpdateImminent
to check whether the central manager state is unknown or resetting
- Allow certain end listen calls in the writeAndListen API to propagate disconnect errors back to the synchronized peripheral correctly.
- If there is a disconnect while a background task is running, defer the disconnection clean up it to the end of the background task to allow proper tear down of the Bluejay states
- Fix auto reconnect states to allow proper reconnection when expected
- Improve handling and exiting the locks in write and listen for synchronized peripheral
- Improve handling of end listen completion for synchronized peripheral
- Improve handling of state restoration for the connecting and disconnecting states
- Fix connection timeout not working as expected
- Make specifying a connection timeout required
- Migrate to Swift 4
- Use Xcode 9 settings
- Use Codable to encode and decode ListenCache
- Specify Swift 4 for CocoaPods
- Update documentation
- Make Receivable and Data+Extractable throwable
- Support iOS 9.3 again
- Support Carthage
- Improve disconnection and auto reconnect
- Add more documentation
- Fix caching of listens
- Support iOS 10 and above only
- Initial public release