Bluetooth MAC address (RemoteID) has been changed after iOS 16.x

In the application I developed, I use the MAC address (RemoteId / UUID) of the bluetooth device I am connecting to as a uniqueId and keep some information and definitions about the device in the database. But as far as I can see, after the last updates, the MAC address that should be fix has been changed. The MAC address of my Bluetooth device in iOS 15 is different, and the MAC address in iOS 16.6 is different. This is causing the problem of not being able to access the information of my Bluetooth device from my application. 1- Why was such a rooted change that would affect all bluetooth devices? 2- What needs to fix this situation.

The images below are taken from the bluetooth tool LightBlue.

I use the MAC address (RemoteId / UUID) of the bluetooth device

Note that the CBPeer.identifier (link) property is not the MAC address (or any other intrinsic property) of the peripheral. It’s just a random UUID assigned by Core Bluetooth.

Searching the web turns up other cases of developers reporting that this identifier doesn’t always stay the same. And if you parse that documentation very carefully, it doesn’t actually promise that the identifier won’t change at some point.

It’s probably safest to treat the identifier as a key for caching local state, but where such caching isn’t critical to your functionality. If you need a truly persistent identifier, consider your peripheral’s Serial Number String characteristic.

The bluetooth device UUID is not the MAC address, it is a random UUID generated as unique on each phone/app. So if you're looking at the UUID on 2 different phones, you should expect the UUID to be different.

The main problem is this device UUID, which did not change until the last update, why did it need to be changed in the last update. Besides, its peripheral UUID is needed to connect to a device. In order to connect without scanning, a fixed UUID is required. So as you suggest, it is not possible to connect with the serial number of the device. If this UUID doesn't function the same as the MAC address, why doesn't iOS give us the fixed MAC address? All bluetooth apps and tools use MAC address as uniqueId on Android and UUID (remoteID) corresponding to MAC address on iOS. As I mentioned above, I have never seen this UUID change in any update (just as it should). Until the last update. This will put many app developers (including me) in a difficult position and will force many apps to make mistakes (like mine). As a result, every bluetooth device has a uniqueId (MAC address) and it is necessary to be able to use this ID. I think iOS also needs to provide this uniqueID to us developers.

why did it need to be changed in the last update[? ...] why doesn't iOS give us the fixed MAC address?

Trust me, it’s not productive to ask (or worry about) why Apple does anything the way they do. ;-)

I have never seen this UUID change in any update (just as it should).

You may have gotten bit by unintentionally relying on undefined behavior. Maybe it used to be the same across devices because it was just (for example) based on a hash of the peripheral's MAC address. And maybe now it’s generated differently. (Why? See comment above.) But either way conforms to the documentation, which doesn’t define this behavior at all.

I think iOS also needs to provide this uniqueID to us developers.

You should submit a feedback requesting this feature.

Is there any solution for this? The uuid changes on different cell phones and is necessary to connect to a somewhat static BLE.

A bit late, but I've seen companies adding mac address to the device name and later parsing it in their code. Like: DEVICENAME_MYMACADDRESS

Bluetooth MAC address (RemoteID) has been changed after iOS 16.x
 
 
Q