Expo pushing to multiple apps at once

Please provide the following:

  1. 3.28.5
  2. IOS

I have an application and to handle beta and production apps that require seperate server urls I created two applications on IOS testflight. My issue is its somehow updating both of them when I build / push a build, even though it doesn’t say this on the apple web portal. I specify different bundleIds in the app.json when I build. I suspect it is the signing key is somehow assuming they are the same build, or should be builds for both applications, but am generally confused, I want to be sure that I push to just one application not both.

Sounds like you built two iOS apps each with different bundle identifiers that each use the same Expo slug. If you publish to that Expo slug, ANY app that points to that slug will be updated… UNLESS you point each app to a different release channel (https://docs.expo.io/distribution/release-channels/). That’s what I do for my separate test and prod iOS apps- one points to a test release channel and another to prod.

Very useful info and likely my problem, thank you. What does “app that points to that slug” mean, can I choose the slug somewhere in the apple dev dash? Can I just choose a new slug for my “beta” in my app.json? If I do go the release channel route instead, do I need to set those up on the IOS dev dash as well?

Android seems to just let me manually upload APKs so its not an issue.

The slug is an Expo-specific thing. It’s in your app.json, and uniquely identifies your app in the Expo world. When you publish an OTA update with Expo, it change the code bundle at a URL that includes your slug, and then your app will look at that URL on startup and download any code updates.

The slug is built into your app by Expo. It has nothing to do with what you see on App Store Connect or anything else Apple. When Expo builds your app, it embeds the slug (and release channel, if you use it) into the app’s configuration, so it knows how to download OTA updates. Therefore, you can use release channels to segregate the OTA code between a test and prod version of the app.

In addition to what @llamaluvr said, have a look at using app.config.js instead of app.json:

And to clarify: Both the slug and release channels are Expo-specific things that Apple/the App Store know nothing about.

The app itself knows about them because they are included in the manifest that is built into the IPA (or APK etc.)

EDIT: To clarify further (I hope :slightly_smiling_face:), about the subject of this thread: expo publish does not push to the app. It pushes to Expo’s servers. Then any Expo apps built with the same Expo username, slug, SDK and release channel will check for and pull the update from there. This should explain why your production and beta apps are both getting the updates.

Thanks for the detailed explanation. I changed the slug on my beta app and I’m doing some testing but I do think everything is working correctly now. I’ll might dig into release-channels as well, that looks like a useful feature.