Possibility of different keychain/asyncstorage access between two releases


We recently updated our app from version A to version B. The two big differences between the two versions are

  1. upgrade from expo sdk 42 to 44
  2. switch from expo-classic to eas-build

Since there are no user accounts in our app, we use secure-storage (on iOS, and async-storage on android[1]) to store the user identifier.
One behavior that we noticed is for some users, the app cannot access the same secure store (or async storage on android) as in version A after upgrading to version B [2]. Due to this, the user loses access to all their data (which is related to their user identifier).

We have ran through (almost) every possibility that this could be an error on our js code, but it seems like that is not the case.

We’ve looked into the docs for how async storage and secure storage is accessible after app upgrades (and downgrades) however we couldn’t learn much. But it seems from experimenting that in at least in theory storage should be accessible in most cases. At least on iOS. On iOS it also seems that the storage is somehow propagated through iCloud. Is that a thing?

What could be the cause of this behaviour?

[1] we had the case that android couldn’t access the secure storage on app update in the past, so we switched to async-storage.
[2] In version B, the app can access secure storage. It writes a (new) user identifier to secure storage. But, again, it could not read the user identifier previously stored by version A.