For HomeKit objects, under what circumstances will the `uniqueIdentifier` be different for a device, or change over time?

Most HomeKit objects (HMHome, HMService, HMCharacteristic, etc) have a uniqueIdentifier property that identifies it, however it appears that this value will be different on different devices, and that it can even change over time.

I have three questions here:
  • Is it possible to delineate the cases where we should expect it to be different or change

  • Is it possible to make these id's more consistent?

  • If not, can you recommend another means to identify a service or characteristic in a way that's more consistent over time?

This causes several complications for 3rd party developers:
  • My app uses Siri Shortcuts to flash a light, and stores the uniqueIdentifier in the Intent, however because this identifier is different on various devices, I can't share this shortcut with my wife, or even on my own iPad

  • I have seen some cases where a shortcut has stopped working -- I believe it's because there are some circumstances where the values actually changes over time.

Replies

The uniqueIdentifier is specific to your application(s) and the specific device. The only exception is for dependent WatchKit applications using WatchConnectivity which share identifiers with the companion application.

These identifiers should not change over time, if you experience this behavior please file a report via Feedback Assistant.

We do not yet have support to create custom Home Siri Shortcuts via your application although you can create these via Home or Shortcuts, please feel free to file an enhancement request via Feedback Assistant.

  • "The only exception is for dependent WatchKit applications using WatchConnectivity which share identifiers with the companion application". So the uniqueIdentifier should be the same on the main app and on the WatchKit app (companion)? Unfortunately, this is not the behavior I'm facing; identifiers are different. Can anyone confirm whether the above statement is true for them?

Add a Comment
WatchKit shared identifiers change sometimes when an OS update occurs. Requiring users to re-setup their apps, reboot devices or reinstall the apps entirely to get them back in sync. I cannot provide guaranteed circumstances but an OS update is a regular common reason for this.


In terms of the overall request, syncable identifiers are very much required to make anything valuable to customers. Customers expect apps to be able to sync their decisions over multiple devices. Most apps now have to fake a unique identifier using serial number which is deprecated or a mix of name, room and home names etc. This is really not the best solution.

I understand they were removed originally for privacy but a identifier could be generated per app + actual Home user to compromise.
@aaronpearce (not sure if '@' doesn't anything - worth a shot!) -- I like the idea of an identifier per app/home combination. That would seem to address any privacy issues, which I can certainly appreciate.
I've filed a Feedback on this (FB7783961) -- to any developers who come across this, and would like this feature, please do the same!