Multiple app versions could be a FREE and PREMIUM (paid) versions. Since the in-app purchase isn’t ready for production yet, then the best option seems to deploy two apps to the app store.
But let’s use this example with more than just two:
One important aspect is that the app icons are different in each app.
It seems to me to be the best option would be to have different configs and use it like this
exp build:ios // US will be app.json exp build:ios --config fr.json exp build:ios --config de.json exp build:ios --config es.json
Then I can set different app icons and splash screens. The
bundleIdentifier can also be unique for each app which I expect is a must when deploying different versions to the App Store? 
I imagine that I could even use the OTA (awesome) feature to make a single update to all versions by
exp publish if I keep the
slug the same in each config. Is this correct? 
But how do I detect in the code which config has been used in the build? 
One possible solution I can think of is the expo release channels which would allow me to detect what language to display.
expo build:ios // bundleIdentifier -> com.companyname.apppname.us expo build:ios --release-channel france --config.fr.json // bundleIdentifier -> com.companyname.apppname.fr expo build:ios --release-channel germany --config.de.json // bundleIdentifier -> com.companyname.apppname.de expo build:ios --release-channel spain --config.es.json // bundleIdentifier -> com.companyname.apppname.es
Is this overcomplicating it? 
- Could I just use the release channel approach without a custom config for each app? 
One drawback that I can see with this is that I can make a single OTA update. On the other hand, I can make specific version OTA - but I’m more into a single OTA.
Sorry for the burst of questions.