@esamelson I just did and it is now working! I totally misunderstood that… I am still having trouble reconciling “exp publish” (or publishing through the XDE) with my mental model of what was happening to build / upload code to Test Flight. I was thinking that Xcode handled the App build once it was ejected (JS included) and had little to do with expo at that point… But in reality, exp publish is exposing a JS bundle that Xcode uses in the App build that is ultimately published?
Thanks for your response, and insight into this process - I really appreciate the help!
Hi @zdeanze - what you’re describing is closer to vanilla react native (which is what you would get when “ejecting” from CRNA – that’s different from “detaching”). Even when you detach from Expo, all of the OTA code loading capabilities are still there, which means it’s still dependent on having your JS bundle served on our server (or wherever you’ve published it to). Expo does not, by default, include a build step that bundles the current working version of your app, instead assuming that you will do this manually when you are ready by running exp publish (which may be at a totally separate time from when you’re making a build).
exp publish does two things in the case of a detached build – after bundling your app, it both sends that bundle to our server, so we can host it for users to grab over-the-air, AND it copies that bundle into your native project, where it’s bundled into the IPA next time you run a build in Xcode.
Hope this makes sense – let me know if you have any other questions or want more clarification!