CoreBluetooth: -didWriteValueForCharacteristic:error: is called after writing to notifiable characteristic without response, sometimes with an error

Originator:zmicier.zaleznicenka
Number:rdar://28361753 Date Originated:19-Sep-2016
Status:Duplicate Resolved:
Product:iOS Product Version:10
Classification:Bluetooth Reproducible:Always
 
Closed as duplicate of 28170671 (Closed)

Area:
Bluetooth

Summary:
According to CoreBluetooth specification, writing to a notifiable characteristic configured without response shouldn't trigger -didWriteValueForCharacteristic:error: callback. In iOS9 this seems to work according to the spec, the callback is triggered only after the writes requiring a response. In iOS10, every single write to a notifiable characteristic configured to not requiring a response leads to -didWriteValueForCharacteristic:error: being called. Mostly it fires without an error, but sometimes, after the link is fully utilized, this callback returns with the following error.

Error Domain=CBATTErrorDomain Code=114 "Unknown ATT error." UserInfo={NSLocalizedDescription=Unknown ATT error.}

Steps to Reproduce:
Configure a BLE connection to a peripheral device. 
Start writing to a notifiable characteristic without response. 
Observe -didWriteValueForCharacteristic:error: delegate method triggered after every write. 

Expected Results:
No callback should be triggered if writing without response.

Actual Results:
After every write, -didWriteValueForCharacteristic:error: is triggered.

Version:
iOS 10.0.1

Notes:


Configuration:
iPhone 5S, BLE peripheral based on Android 5.1

Comments


Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!