Ok, looks like I figured out how to do this, so following steps are needed:

  1. npx expo prebuild
  2. open ios/YourProject.xcworkspace
  3. Go to project settings "Signing & Capabilities" and select your team
  4. Go to project settings "Signing & Capabilities" and remove "Push Notifications"
  5. Click on top bar your project name, select "Edit Scheme", select "Build Configuration" - Release
  6. Build bundle with npx expo export:embed --entry-file='node_modules/expo/AppEntry.js' --bundle-output='./ios/main.jsbundle' --dev=false --platform='ios'
  7. In Xcode in Build phases -> Bundle React Native code and images -> Check off "For install builds only" if it's checked
  8. Go to Xcode, select your connected device and run the project

I did many iterations, but this looks like fixed the problem for me.
Now I can test my app on my iPhone in release mode without need to connect to dev server.

I see still that `npx eact-native run-ios --mode Release --terminal terminal`` not working for some reason, fails to build.

🌐
Expo Documentation
docs.expo.dev › build › setup
Create your first build - Expo Documentation
A React Native Android and/or iOS project that you want to build · Don't have a project yet? No problem. It's quick and easy to create a "Hello world" app that you can use with this guide. Run the following command to create a new project: ... EAS Build also works well with projects created by npx create-react-native-app, npx react-native, ignite-cli, and other project bootstrapping tools.
🌐
Expo Documentation
docs.expo.dev › guides › local-app-development
Local app development - Expo Documentation
To create a development build, you can use local app compilation commands (npx expo run:[android|ios]) which will create a debug build and start the development server.
🌐
Expo Documentation
docs.expo.dev › build-reference › ios-builds
iOS build process - Expo Documentation
Additional step for managed projects: Run npx expo prebuild to convert the project to a bare one. This step will use the versioned Expo CLI. Restore a previously saved cache identified by the cache.key value in the build profile. Run pod install in the ios directory inside your project.
🌐
Expo Documentation
docs.expo.dev › develop › development-builds › create-a-build
Create a development build on EAS - Expo Documentation
When you create a new Expo app ... in the Expo Go app. A development build is essentially your own version of Expo Go where you are free to use any native libraries and change any native config....
Top answer
1 of 2
7

With the current Expo SDK 50, using npx expo prebuild is the right starting point. After you did this, you need to build your project without relying on the metro server. This means, you have to build a standalone .ipa file for ios. You can do all of the following in Xcode by opening your ios/*.xcworkspace file.

  1. Change the Build Configuration: In Xcode -> Product -> Scheme -> Edit Scheme -> choose "Debug" -> Close
  2. Build the app: Product -> Build
  3. Archive your app: if there are no building errors -> Product -> Archive
  4. Export archived app: Window -> Organiser (this should open up automatically after step 3) -> select the archived build -> Distribute App -> Debug -> Perform signing procedure -> Select destination for .ipa file
  5. Install app on connected device: Connect device to your Mac -> Window -> Devices and Simulators -> Under "Installed Apps", click on "+" -> Select .ipa file
2 of 2
1

If you want to run your Expo app on your physical device without using the Expo Go app and an Expo server, you would need to create a standalone app binary (an IPA file for iOS).

This process involves "ejecting" from the managed Expo workflow to gain more control over the build process. Here's the general process:

  • Run expo eject in your project directory. This will create native iOS and Android project directories and configuration files.

  • For iOS, you'll now have an ios folder in your project directory. You can open this in Xcode by navigating to the directory and opening the .xcworkspace file.

  • From Xcode, you can run your app on a connected device by selecting the device from the target device list and clicking the "play" button.

Please note: In order to install the app on a physical device, you'll still need an Apple Developer account, even if it's just the free version. You'll have to sign your app with a development certificate. The app will also only run as long as the development certificate is valid, which is typically 7 days for a free Apple Developer account. After this period, you'll need to re-sign and re-install the app.

If you're looking for a way to run your app on your physical device indefinitely without an Apple Developer account, unfortunately, this is not possible due to Apple's policies.

🌐
Reddit
reddit.com › r/expo › is there really no simple way to build and run an expo app locally via xcode?
r/expo on Reddit: Is there really no simple way to build and run an Expo app locally via Xcode?
July 9, 2025 -

I'm trying to follow what I thought would be a straightforward local workflow:

  1. Start the Expo dev server with expo start

  2. Develop the app on the iOS simulator

  3. Once ready, open the Xcode project, build, and run it on the simulator

Unfortunately, step 3 fails because the app expects the Expo dev server (Metro) to be running to fetch the JS bundle. This seems like a hard requirement.

I suppose you could manually tweak the Xcode project to load the bundle as a local resource, but that feels counterintuitive and messy.

Also, eas build --local still requires both Expo build tools and an Apple developer account, so it's not a pure local solution either.

Am I missing something obvious here, or is this just how it works with Expo right now? Any tips or clarification would be appreciated — thanks!

EDIT:

When I say step 3 fails, I meant that is running the expo dashboard which requires the dev server to run. I just want to run it without the server i.e. as the production build.

Find elsewhere
🌐
Expo Documentation
docs.expo.dev › more › expo-cli
Expo CLI - Expo Documentation
Generate the native Android and iOS directories for your project: npx expo prebuild. Build and run the native apps locally: npx expo run:ios and npx expo run:android.
🌐
Expo Documentation
docs.expo.dev › tutorial › eas › ios-production-build
Create a production build for iOS - Expo Documentation
Learn about the process of creating a production build for iOS and automating the release process.
🌐
DevGenius
blog.devgenius.io › how-to-build-an-ios-expo-app-without-using-eas-build-78bfc4002a0f
How to build an iOS Expo App without using EAS Build | by Michael Essiet | Dev Genius
August 8, 2023 - Firstly you’ll need to run npx expo prebuild if you have an Expo managed project. After running the prebuild command you’ll need to run npx pod-install or cd into the ios directory and run pod install whichever you choose is totally up to ...
🌐
Khueapps
khueapps.com › blog › article › how-to-use-expo-eas-build-totally-free
Use Expo EAS Build for Free: Local and Cloud Workflow - KhueApps
For iOS devices/App Store, Apple’s paid developer account is required. iOS Simulator builds are free. Create a tiny Expo app, configure EAS, and build locally. # 1) Create a project npx create-expo-app eas-free-demo cd eas-free-demo # 2) Install EAS CLI npm i -D eas-cli # 3) Initialize EAS ...
🌐
Expo Documentation
docs.expo.dev › tutorial › eas › ios-development-build-for-devices
Create and run a cloud build for iOS device - Expo Documentation
Scan the QR code with our iOS device's camera to open and tap the link to download the development build on the device. 3 · Start the development server by running the npx expo start command from the project directory: Terminal · Copy · - ...
🌐
Reddit
reddit.com › r/expo › npx expo run:ios --device doesn't take app.config.js changes into account, deeplinks do not work
r/expo on Reddit: npx expo run:ios --device doesn't take app.config.js changes into account, deeplinks do not work
February 6, 2025 -

I've been trying to make deeplinks work in my Expo (+ Expo Router) app.

I followed the docs here:

https://docs.expo.dev/linking/into-your-app/

And I added the "scheme" key.

But unfortunately that doesn't work. Opening myapp:// in Safari or Chrome on mobile doesn't work.

I build my app locally with this command: npx expo run:ios --device (or the android equivalent).

My app uses Google Sign In on iOS, so I tried to empty the array in CFBundleURLSchemes to see if it would break my app, and... it doesn't. I then checked in the Info of the app of the /ios folder, and I can see that the first entry of the CFBundleURLSchemes is still set even after running "npx expo run:ios --device".

I tried to run:

expo prebuild --clean

and I also tried to run "expo start --clear".

None of that works, it seems that the config changes are just ignored. I could simply delete the /ios folder and rebuild, but I would expect the build command not to ignore changes in my app.config.js.

What is going on here? What is the correct way to do this?

🌐
Expo Documentation
docs.expo.dev › develop › tools
Tools for development - Expo Documentation
You can also use npx expo-doctor --help to display usage information. ... Install and launch builds from EAS on physical devices and emulators. Install and launch updates from EAS on Android Emulators or iOS Simulators.
🌐
GitHub
github.com › expo › expo
GitHub - expo/expo: An open-source framework for making universal native apps with React. Expo runs on Android, iOS, and the web.
When developing iOS, always open ... for https://docs.expo.dev · templates The template projects you get when you run npx create-expo-app · react-native-lab This is our fork of react-native used to build Expo Go...
Starred by 45.9K users
Forked by 10.4K users
Languages   TypeScript 55.8% | Kotlin 16.9% | Swift 12.3% | Objective-C 4.2% | JavaScript 3.1% | C++ 2.9%
🌐
Nx
nx.dev › nx-api › expo
Expo | Nx
Learn how to use the @nx/expo plugin to manage Expo applications and libraries within an Nx workspace, including setup, configuration, and task inference · Smart Repos · Fast Builds
🌐
Expo Documentation
docs.expo.dev › build-reference › simulators
Build for iOS Simulators - Expo Documentation
When the build's installation is complete, it will appear on the home screen. If it's a development build, open a terminal window and start the development server by running the command npx expo start. Pass the --latest flag to the eas build:run command to download and install the latest build on the iOS Simulator: