Exp publish with 2 standalone app versions

Hi all!
I’ve been wondering… If I have 2 standalone apps of the same project, but from 2 différents version.
What would happen if I exp publish? Would it update both versions?

I’m asking this because I have an app up in the store and I made a new build which is being tested on iOS TestFlight.
Is it possible to publish only on my TestFlight version? Or by exp publish I will update both app to the same version and risking to broke both version?

Thanks!

2 Likes

We don’t yet have support for multiple release channels (although it’s on our radar and hopefully happening soon). If the Testflight and production standalone apps use different SDK versions, then the production app won’t fetch the bundle for the newer testflight version. If the standalone app supports the same SDK version as you’re publishing then unfortunately exp publish will update both.

Until we can build the support for staging vs. production, one way to work around this is to use two accounts, and swap them back and forth as you release one to production, use the other for staging, and vice versa. I know it’s not a pleasant hack, but it will work until we can build this functionality.

4 Likes

Thanks for the explanation. Just want to make sure if I understand your plan for building multiple release channels correctly:

So with multiple release channels, I’ll be able to do exp publish with an extra param like REACT_NATIVE_ENV=STAGING or REACT_NATIVE_ENV=PRODUCTION and use process.env.REACT_NATIVE_ENV to decide whether to connect to dev API or production API in our js code?

My goal is to build both staging and production standalone binaries to submit to TestFlight and App Store separately without ejecting.

Is there any way to set so the standalone app (which is in production) to not use the expo published package? I mean, it’s an awesome feature for dev/test environment but when I go live, I would like to “cut” a version that can’t be changed on-the-fly, can I do that?

On iOS, yes. Using the ios.isRemoteJsEnabled flag in app.json (see the docs for details). We don’t have this built for android yet, but I created a feature request earlier today.

1 Like

“If set to false, your standalone app will never download any code, and will only use code bundled locally on the device. In that case, all updates to your app must be submitted through Apple review. Defaults to true. (Note that this will not work out of the box with ExpoKit projects)”

What does it mean that it won’t work out of the box with ExpoKit? My app is detached, what else should I do?

Thanks!

I think @ben might be better able to answer how ExpoKit will behave with this setting.

Actually as of a couple weeks ago, ExpoKit should support this. The issue previously was that there would be no offline JS bundle in ExpoKit, so isRemoteJSEnabled prevented any bundle from loading. Now ExpoKit iOS includes an offline JS bundle so this option should work.

I have 50 white label apps, one is bundle for all apps is heavily wanted :slight_smile: