Closed t-girniak closed 4 years ago
Same code works for iPhone 6s with iOS 13.3, but does not work for iPhone X, yes? What's the system version on X? Could you check the permission flags on that characteristic (isWritableWithResponse
, isWritableWithoutResponse
)?
Yes, the same code works on iPhone 6s (iOS 13.3) and any Android device, but doesn't on iPhone X (iOS 13.4). The characteristic is "WRITE_NO_RESPONSE". I use the following code:
Future<Characteristic> writeRfidControl(Peripheral peripheral, List<int> intList) async {
return await peripheral.writeCharacteristic(
StargateAttributes.RFID_SERVICE, StargateAttributes.CONTROL, toBytes(intList), false);
}
Here's nRF connect screenshot:
Are you using the newest version of the library?
I think I forgot to release a new version with a fix to this. Can you try using github dependency to branch develop and see if it's fixed?
Yes, I am using the latest version (flutter_ble_lib: ^2.2.3). I'd just tested develop branch ref, but still, iPhone X can't write the characteristic :(
Are both iPhones running the same OS?
The error occurs in step 4 or 5 of your stacktrace (safeWriteCharacteristicForDevice or subscribe). The one mentioned in the selected object leads to Multiplatform BLE Adapter and somewhere here: https://github.com/Polidea/MultiPlatformBleAdapter/blob/master/iOS/RxBluetoothKit/RxCBPeripheral.swift#L306
Could you try setting logs to verbose in FlutterBleLib and see if there's any more useful information there?
I don't have access to iPhone X for the foreseeable future, so you'll have to help me if you want it fixed. ;)
Of course, I will try help :) iPhone 6s currently runs on iOS 13.4.1, while iPhone X is on iOS 13.4. I will have access to the iPhone 6S in a day or two so I can debug app personally on it and see if the issue lies in the iPhone, in iOS version or in something else
Start with verbose logs, if possible.
That's all I managed to track in Xcode, all the rest is leading to your RxBluetooth library. Unfortunately, I can't send you more data from our app logs. Also, the same codebase suddenly stopped working on iPhone 6S. I am trying to figure out why.
@mikolak I have iphonex and Iphone 11 both are throwing the same error @t-girniak listed,how can I help?
I can provide all logs needed, I tried setting verbose, will those logs appear as flutter stdout or in xcode?
I updated to the latest 2.2.4 and I'm able to connect now. But we still have the characteristic error. @mikolak Some notable things I see in verbose logging are
[CoreBluetooth] API MISUSE: <CBCentralManager: 0x282b54e00> has no restore identifier but the delegate implements the centralManager:willRestoreState: method. Restoring will not be supported
2020-05-22 11:40:25.051587-0500 Runner[3463:1262593] User granted permissions
[RxBLEKit|DEBG|16:40:25.058]: CentralManager(10782854656) didUpdateState(state: poweredOn)
--- SCanning
RxBLEKit|DEBG|16:41:40.743]: CentralManager(10782854656) scanForPeripherals(
withServices: Optional("[]"),
options: Optional([:]))
[RxBLEKit|VERB|16:41:40.860]: CentralManager(10782854656) didDiscover(peripheral: Peripheral(uuid: 1BBD8B5E-6750-97E5-976D-4091C853E05B, name: Optional("Apple TV")),
rssi: -45)
[RxBLEKit|VERB|16:41:40.939]: CentralManager(10782854656) didDiscover(peripheral: Peripheral(uuid: 54478E68-FE26-468E-2FF1-63B7F0C1681A, name: Optional("iPhone")),
rssi: -36)
[RxBLEKit|VERB|16:41:40.940]: CentralManager(10782854656) didDiscover(peripheral: Peripheral(uuid: 4EE3DA7B-6B8A-2EB5-813B-D295C9F37020, name: nil),
rssi: -61)
[RxBLEKit|VERB|16:41:40.951]: CentralManager(10782854656) didDiscover(peripheral: Peripheral(uuid: 26D3D08E-F5DF-C588-B5FB-63687DCDD9A6, name: nil),
rssi: -43)
[RxBLEKit|VERB|16:41:40.993]: CentralManager(10782854656) didDiscover(peripheral: Peripheral(uuid: C6053FA9-EFB8-C450-315B-84C289024130, name: nil),
rssi: -58)
[RxBLEKit|VERB|16:41:41.055]: CentralManager(10782854656) didDiscover(peripheral: Peripheral(uuid: 22A78875-CF5A-4BEE-9EF8-AB94A1DB6C57, name: Optional("Austin’s Apple Watch")),
rssi: -37)
[RxBLEKit|VERB|16:41:41.137]: CentralManager(10782854656) didDiscover(peripheral: Peripheral(uuid: 4A31F525-52A1-7AEA-ED97-C1B5F88C6392, name: Optional("stargate-sg1-4")),
rssi: -48)
2020-05-22 11:41:41.182437-0500 Runner[3463:1262781] flutter: Error caught by Crashlytics plugin <recordError>:
2020-05-22 11:41:41.200333-0500 Runner[3463:1262781] flutter: firebase_crashlytics: Error reported to Crashlytics.
[RxBLEKit|VERB|16:41:41.290]: CentralManager(10782854656) didDiscover(peripheral: Peripheral(uuid: D47F84DD-2DDF-D70D-F963-1026979C1537, name: nil),
rssi: -86)
[RxBLEKit|VERB|16:41:41.331]: CentralManager(10782854656) didDiscover(peripheral: Peripheral(uuid: 2587ED2D-2847-B5B6-BC18-9AA95EE3F502, name: Optional("LE-reserved_c")),
rssi: -84)
[RxBLEKit|VERB|16:41:41.617]: CentralManager(10782854656) didDiscover(peripheral: Peripheral(uuid: 5F84AF58-8F75-B8A3-0475-F5F79DB8B162, name: Optional("LE-booty buds")),
rssi: -82)
[RxBLEKit|VERB|16:41:43.035]: CentralManager(10782854656) didDiscover(peripheral: Peripheral(uuid: 7F66D055-D1A9-E09F-A329-67B1C55A0901, name: Optional("LE-brains !!")),
rssi: -52)
[RxBLEKit|VERB|16:41:43.721]: CentralManager(10782854656) didDiscover(peripheral: Peripheral(uuid: D47F84DD-2DDF-D70D-F963-1026979C1537, name: nil),
rssi: -90)
[RxBLEKit|VERB|16:41:54.102]: CentralManager(10782854656) didDiscover(peripheral: Peripheral(uuid: D47F84DD-2DDF-D70D-F963-1026979C1537, name: nil),
rssi: -90)
-----------------------------
[RxBLEKit|DEBG|16:49:06.178]: Peripheral(uuid: 4A31F525-52A1-7AEA-ED97-C1B5F88C6392, name: Optional("stargate-sg1-4")) writeValue(
data: 935e32cef5b745f2b9b9d0d00d0bee7b,
for: Characteristic(uuid: 3FD70402-709E-4D96-9F81-3D37FC17E86D, id: 10802232704),
type: withoutResponse)
**2020-05-22 11:49:06.178609-0500 Runner[3484:1266477] [CoreBluetooth] WARNING: Characteristic <CBCharacteristic: 0x283dcfd80, UUID = 3FD70402-709E-4D96-9F81-3D37FC17E86D, properties = 0x8A, value = (null), notifying = NO> does not specify the "Write Without Response" property - ignoring response-less write**
[RxBLEKit|DEBG|16:49:08.832]: Peripheral(uuid: 4A31F525-52A1-7AEA-ED97-C1B5F88C6392, name: Optional("stargate-sg1-4")) didUpdateValueFor(for:Characteristic(uuid: 3FD70202-709E-4D96-9F81-3D37FC17E86D, id: 10801973216),
value: Optional("1c"),
error: nil)
[RxBLEKit|DEBG|16:49:10.076]: Peripheral(uuid: 4A31F525-52A1-7AEA-ED97-C1B5F88C6392, name: Optional("stargate-sg1-4")) didUpdateValueFor(for:Characteristic(uuid: Battery Level, id: 10802030144),
value: Optional("2c"),
error: nil)
[RxBLEKit|DEBG|16:49:15.835]: Peripheral(uuid: 4A31F525-52A1-7AEA-ED97-C1B5F88C6392, name: Optional("stargate-sg1-4")) didUpdateValueFor(for:Characteristic(uuid: 3FD70202-709E-4D96-9F81-3D37FC17E86D, id: 10801973216),
value: Optional("1c"),
error: nil)
[RxBLEKit|DEBG|16:49:20.104]: Peripheral(uuid: 4A31F525-52A1-7AEA-ED97-C1B5F88C6392, name: Optional("stargate-sg1-4")) didUpdateValueFor(for:Characteristic(uuid: Battery Level, id: 10802030144),
value: Optional("2c"),
error: nil)
[RxBLEKit|DEBG|16:49:22.834]: Peripheral(uuid: 4A31F525-52A1-7AEA-ED97-C1B5F88C6392, name: Optional("stargate-sg1-4")) didUpdateValueFor(for:Characteristic(uuid: 3FD70202-709E-4D96-9F81-3D37FC17E86D, id: 10801973216),
value: Optional("1c"),
error: nil)
2020-05-22 11:49:06.178609-0500 Runner[3484:1266477] [CoreBluetooth] WARNING: Characteristic <CBCharacteristic: 0x283dcfd80, UUID = 3FD70402-709E-4D96-9F81-3D37FC17E86D, properties = 0x8A, value = (null), notifying = NO> does not specify the "Write Without Response" property - ignoring response-less writ
After setting a required response on a few characteristics I was abel to get back to the original issue in 2.2.4
[RxBLEKit|DEBG|17:15:12.591]: Peripheral(uuid: 4A31F525-52A1-7AEA-ED97-C1B5F88C6392, name: Optional("stargate-sg1-4")) didWriteValueFor(for:Characteristic(uuid: 3FD70303-709E-4D96-9F81-3D37FC17E86D, id: 10760690144),
value: nil,
error: Optional(Error Domain=CBATTErrorDomain Code=3 "Writing is not permitted." UserInfo={NSLocalizedDescription=Writing is not permitted.}))
@t-girniak @mikolak I changed something in the device firmware to allow the WRITE no response cmd flag and it seems to allow those characteristics to be written to again.
Hi, @austbot! Thanks for following up! I think system might cache attributes of a peripheral, so perhaps something changed in the firmware prior to this?
There was an issue fixed in 2.2.3 where withResponse
flag was ignored on iOS (always had the same value, true I think), but it was fixed in 2.2.4.
Let me know if the issue occurs again, closing this for now.
I'm having this exactly issue on version 2.2.4
When I try to write [0x01] on iPhone X to the characteristic on a BLE device I got a platform error, which says: "writing is not permitted". It works well on any Android phone. It also works on iPhone 6S (iOS 13.3), but on iPhone X it doesn't. I traced this error up to rejectForFlutterResult method:
When debugging in Android studio I catch the following error:
I reproduced the same characteristic write sequence in the Nordic nRF Connect app, and everything worked ok (on the same iPhone X). Do you know why this error occurs?
P.S. Thanks for this library, it's the most stable BLE library for the Flutter out there yet :)