Recently I've transferred my app to a new account and while uploading a new build I got a message that says I'll lose access to Keychain.
I'm storing a user hash in Keychain and send this hash to the back-end side so they can say whether a user is premium or not.
Since I lose access to a Keychain all premium users become free users despite they have paid for the subscription which is very bad.
My app does not have a regular log-in with email so I can't ask users to "re-login".
By far the only option I see is asking users to make a "restore purchase" but I would like to make this update seamless. So I have these questions:
Do I lose all info in UserDefaults? (If not - can I transfer the app back and release an update that puts the user hash into UserDefaults then transfer the app again and read from UserDefaults instead of Keychain?)
Do I have an access to the old user’s receipt by calling Bundle.main.appStoreReceiptURL? If yes - I can send it to the server and the server may identify a user by using the receipt as a token then it can get an updated receipt from Apple, update user status in DB and notify a client that he/she is a premium user. Can I rely on such a flow?
Can I treat users that have a receipt in Bundle.main.appStoreReceiptURL as “old” users and those who don’t - as new users who installed the app only after the update?