HW: MDBT50Q-P1MV2 (Raytac NRF52 module)
NRF52840_SDK_VER = 16.0.0
NRF52840_SOFTDEVICE_NUM = SD140
NRF52840_SOFTDEVICE_VER = 7.0.1
I am finding a peculiar behavior in iOS devices. The iOS device is unable to communicate (to be precise, receive indications) from the BLE peripheral once there is a DFU on the device. Even if this DFU is done by a different smartphone, the behavior still persists. What solves the situation is, restarting the Bluetooth on the iOS devices. This happens consistently and across all iOS phones and versions. Restarting the Bluetooth from settings solves the problem and for all devices. This doesn't happen on Android
I have seen similar issues on the forum where iOS device is caching all the device services and chars info and hence if they get changed, then its a problem. But in our case, we are not changing any service or characteristic ID, still, the iPhone is unable to communicate. The only thing changing over the DFU is the device manufacturer data (part of the extended advertising info) where we are broadcasting the firmware version of the device, which gets updated over a DFU. We did a bit more debugging and found this behaviour:
1) Even if the DFU doesn't change the manufacturer data but it's just a new package (with some changes in code), the issue happens
2) If we do a DFU using the exact same package, with code and manufacturer data both being the same, then the issue doesn't happen and phones are able to connect properly after DFU
3) This issue happens only if the iPhone had previously connected to the peripheral before DFU had happened. If I take a new iPhone and connect to a peripheral post DFU, it works just fine