I am writing an iOS app to communicate with a BLE device. The device can change names between connections (not during the BLE connection), but iOS refuses to change the device n
Your guessing is correct.
It is because of the core-blutetooth
cache.
Generally changing name / services / characteristics on BLE devices are "not supported". All these parameters are getting cached.
There are two ways of solving this:
Alternatively check the advertisement data of your BLE device. It might have a name
property which should get refreshed every time the BLE device is advertising data (advertising data doesn't get cachced).