Expo detach and publish flow for xcode and testflight

Hello, it took me a while to work out the flow for testing my app with Testflight. At first I did ‘exp detach’ in a release branch, then I did a build in Xcode and then an Archive. Then in Xcode I uploaded the archive to the App Store. Then finally in iTunes Connect → TestFlight I could add testers to the build. This worked fine until I came to do an update to the build. I went through the same steps as before and updated the app in my TestFlight app on my mobile device to the new build version, but I wasn’t seeing my code updates. This was very frustrating. In the end after reading this again - https://docs.expo.io/versions/v27.0.0/workflow/publishing

“The standalone app knows to look for updates at your app’s published url, and if you publish an update then the next time a user opens your app they will automatically download the new version. These are commonly referred to as “Over the Air” (OTA) updates, the functionality is similar to CodePush, but it is built into Expo so you don’t need to install anything.”

I realised that by doing ‘exp publish’ or just Publish in Expo XDE then it would update the app in TestFlight.

So my questions are, at what point would I need to do a new release through Xcode rather than just doing publish all the time? and what happens when I do a production ready release? what is the flow for doing updates in production? are there any further guides on this process?


hi @patricklock,

Changes to the javascript portion of your app can just be published, and will be eventually picked up by your standalone binary. It’ll make sense to re-upload you app to the App Store if you want to upgrade the expo SDK (underlying native bindings). For example, we may add additional Camera functionality, or fix bugs, and you’ll need to upgrade to the new SDK, rebuild your app and send it in to the App Store if you want to use the new features.

In order to prevent your publishes from being pulled in by the standalone binary when you didn’t intend it to, you can use release channels to accomplish this. More documentation on this here:

This topic was automatically closed 15 days after the last reply. New replies are no longer allowed.