iOS caches the GATT structure of a device after connecting to it the first time in order to avoid repeated (and usually wasted) time and power re-discovering after every connection. Devices are identified inside iOS according to their connection (MAC) address or bond entry, which is why flashing the new project on a fresh (previously unused) module works in your case.
The simplest way to fix this during the development phase is to power-cycle the Bluetooth subsystem on the iOS device from the Settings app. If you have bonded with the device, you can simply forget it and then reconnect. There are other programmatic solutions if your device will actually be changing the GATT structure dynamically in production (see the "Service Changed" service and characteristic definitions from the Bluetooth SIG), but normally this is not needed.
You can also use the CySmart dongle (CY5671 or CY5677) and the CySmart Windows application to perform basic GATT discovery and testing from Windows. The dongle and this app do not perform any caching, and you should be able to easily verify that your changes have taken effect.
1 of 1 people found this helpful
Wow, I did not know that. Thanks a lot.
I added the Service Changed characteristic ot the Generic Attribute service, but the changes in the GATT DB aren't reflected in iOS. Did I forget something?