I still have gaps in my knowledge, especially wrt. deploying to the App/Play store, but I hope I can clarify.
Expo cares about the Expo username of the person who publishes/builds the app and
app.json). The App/Play stores do not care about those.
The App Store cares about
expo.ios.bundleIdentifier and the Apple developer account (along with the keys used to sign the app. There’s also something called a provisioning profile. This part I’m a bit unclear on.)
The Play Store cares about
expo.android.package and the keys used to sign the app. (Again the signing stuff is a bit unclear to me.)
So as I understand it, Expo generated the keys/certs/provisioning profiles etc. for your app. So you need to fetch them using
expo fetch:*, so that your client can make use of them when building the app after you have handed it over to them.
Since the App and Play stores don’t care about the Expo username, you will be able to give your client the source code, they will be able to set up a new Expo account. They will be able to get Expo to build the app for them. But if they try to upload it to the App/Play stores, I think they will run into problems, unless they have used the keys/certs/provisioning profiles that Expo used on your behalf when you built the app.
Also, if your client were to only publish an update (without building a new app and getting it uploaded to the App/Play stores), the existing users would not see this update, because the existing users’ apps would be looking for updates on Expo’s servers that are associated with your username. In order to fix this, your client needs to build the source code using their own Expo account, and the keys/certs/provisioning profiles that you fetched from Expo and get them deployed to the App/Play stores. Then the users would have to upgrade the app from the App/Play store. After that, your client should be able to publish updates and the users’ apps would download the updates.
Of course, when the client wants to upgrade to a later Expo SDK, they will need to rebuild the app and publish to the App/Play stores again, because the app will only “see” OTA updates that were built with the same SDK version (and Expo username and slug and release channel) as they were.
I hope that clarifies some things for you.
@charliecruzan could you please correct anything I might have messed up and maybe clarify exactly what needs to happen wrt. the keys/certs/provisioning profiles?