DOCS: Runtime version and eas update with update/native layer

Let’s pretend we are using the Persistent staging flow. Mainly, we separate production and staging (or else) flows and their respective branches have the same name that doesn’t change (not versioned).

And let’s say we update Expo SDK version and that I’m using a runtime version of sdkVersion. On branch production, I upgrade from SDK 46 to SDK 47. So I run eas update --branch production

Right now on Google/Apple stores, people are running the SDK 46 one.

Now I want to be sure that I correctly understand those next statements/questions.

  1. As I understand from the docs, they won’t have any updates because the runtime version doesn’t match. That’s what I want because I want to push a new prod version on Testflight with SDK 47 and test it before releasing it and keep my users away from those updates before it’s released on store. Am I correct they won’t have any updates because of the runtime version?

  2. Let’s say I want to do a small update on my SDK 46 version but I don’t want my users to have it already on production, so that my internal testers can test it before it’s updated. Is it possible? Like, from my guess, it’s not possible to do a build with SDK 46 with newly updates and push it on TestFlight WITHOUT passing through the eas update command? Because it implies that I run eas update --branch production with newly updates, but as this channel is using production branch and as its SDK version is still on SDK 46, my users will have those updates too?

  3. From the previous point, I guess the solution is to use the Branch promotion flow?

  4. Now about update and native layers. What can we consider as an update layer from JS? For example, let’s say I keep the same runtime version (so the same SDK version) and that I add a new node_modules that doesn’t add native code (let’s say a small JS module that do magic stuff without integrating native stuff), will the update work? Will it update my app with my new node_modules?

  5. Same as the previous point but adding a new node_modules that does include new native code. I guess if the previous point will add my new node_modules, the JS code will be there, but it will crash because the native code won’t be included? And if so, the solution would be to do a new build and push it to stores with the same channel and branch?

Thanks a lot

Hey there, some thoughts:

  1. Indeed runtime version set to sdkVersion means Expo SDK version number determines if the app is compatible with your changes. In this case I assume the SDK46 (first version to support sdkVersion) needs to have the setting set in app.json
  2. Agree, can’t do that with sdkVersion in the same branch/channel
  3. That’s one option, another one would be publishing an internal distribution build so that your internal testers can use it
  4. Yes
  5. Yes, I got bitten by this when I was first learning to use EAS updates. The JS will be included in the update but may crash bc native deps are not included in the update - you need a new build for that.