One of the points of Expo on top of React Native is that you don't go down to android or ios code. Expo deals with those folders for you, you don't need to interact with them. Is there a reason you need those folders? if so, you will have to eject. Here's the documentation to do so: Ejecting with ExpoKit

Answer from Funk Soul Ninja on Stack Overflow
🌐
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 › workflow › customizing
Add custom native code - Expo Documentation
Build locally for the best debugging experience and fast feedback · By default, Expo projects created with create-expo-app use CNG and do not contain android or ios native directories until you've run the npx expo prebuild command in your project.
🌐
GitHub
github.com › expo › expo › issues › 23762
no ios folder when running expo prebuild command · Issue #23762 · expo/expo
May 16, 2023 - The prebuild command should produce the native android and ios folder but what i get is only the android native folder · expo-env-info 1.0.5 environment info: System: OS: Windows 10 10.0.22000 Binaries: Node: 20.4.0 - C:\Program Files\nodejs\node.EXE Yarn: 1.22.19 - ~\AppData\Roaming\npm\yarn.CMD npm: 9.7.2 - C:\Program Files\nodejs\npm.CMD npmPackages: @expo/webpack-config: ^18.0.1 => 18.1.2 expo: ~49.0.5 => 49.0.5 react: 18.2.0 => 18.2.0 react-dom: 18.2.0 => 18.2.0 react-native: 0.72.3 => 0.72.3 react-native-web: ~0.19.6 => 0.19.7 Expo Workflow: bare
Published   Jul 29, 2023
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.

🌐
Expo Documentation
docs.expo.dev › workflow › prebuild
Continuous Native Generation (CNG) - Expo Documentation
If your project does not contain android and ios directories, EAS Build will run Prebuild to generate these native directories before compilation.
🌐
Reddit
reddit.com › r/reactnative › expo managed project and development build with packages that have native code
r/reactnative on Reddit: Expo managed project and development build with packages that have native code
February 21, 2024 -

I would like if someone who has more experience with Expo and development builds to try and answer the following questions.

If i wanna use a package that contains native code like react-native-date-picker i need to create a development build to use that package.

Currently we can do that in the following ways:

  1. Use expo servers to build the development build with expo build --platform android. This will push the code to expo servers and create us a build which we download on phone and then we can start app with expo start and scan the QR code and our app will work.

  2. Use expo build --local which will do the same as above but will not use expo servers but our local android studio to build development build.

  3. Use npx expo run:android which will call expo prebuild and then again use our local setup to build development build. We then start our app with expo start.

My question is why does the last step 3. generate native project android and the 1. and 2. step don't?
Is it ok to delete that folder as i think we don' need it after the build is created?

I see this mentioned on expo docs:

Running

npx expo prebuild

again layers the changes on top of existing files. It may also produce different results after the build

To avoid this, add native directories to the project's .gitignore and use

npx expo prebuild --clean

command. This ensures that the project is always managed, and the

--clean

flag will delete existing directories before regenerating them. You can use app config or create a config plugin to modify your project's configuration or code inside the native directories.

Are these plugins only necessary when the package installation says to modify AndroidManifest or gradle files in native android folder?

Top answer
1 of 3
4
It is safe to delete the android and ios folders, and it's recommended to add them to your .gitingore file. You can generate the android and iOS folders at any time by running `npx expo prebuild --clean`. The --clean flag actually just deletes the iOS/android folders for you and generates them from scratch (you should probably always use the --clean flag). The reason you don't see the folders when using EAS build, whether on the server or with --local is because EAS build is essentially generating the android and iOS folders for you, doing to build, and then deleting the folders (I think it's actually using git to do this, so probably really it is taking your project, adding a commit after generating the folders and then reverting after the build is done). In a regular react-native project (not using expo) it is fairly common to go into the iOS or android folder and edit files in there when installing some native modules. This prevents any kind of easy upgrades, so expo is essentially hiding the folder from you and encouraging you (and library makers) to use expo config plugins to make the changes in the iOS and android folders on your behalf. The only time you shouldn't delete the folders is if for some reason you absolutely had to go into one of the folders and edit one of the files in there. At this point you're not really in the "expo managed workflow" anymore and will be on your own for upgrades.
2 of 3
2
Expo prebuild creates the folders that will be created behind the scenes when you have a regular build. Then you can play with those files and have local builds to see the stuff you added etc. What config plugins do is that they change the android ios config files everytime you take a build. Using config plugins give you the option to never open your project(not using expo prebuild at all).
Find elsewhere
🌐
Expo Documentation
docs.expo.dev › build › setup
Create your first build - Expo Documentation
EAS Build allows you to build a ready-to-submit binary of your app for the Google Play Store or Apple App Store. In this guide, let's learn how to do that. Alternatively, if you prefer to install the app directly to your Android device/emulator or install it in the iOS Simulator, we will point you toward resources that explain how to do that.
🌐
GitHub
github.com › expo › create-react-native-app › issues › 311
No iOS or Android folder after creating a app with create-react-native-app · Issue #311 · expo/create-react-native-app
May 20, 2017 - Please run these commands in the project folder and fill in their results: npm ls react-native-scripts: [email protected] · npm ls react-native: [email protected] · npm ls expo: [email protected] · node -v: v6.9.2 · npm -v: 4.6.1 · yarn --version: Not installed · watchman version: "version": "4.7.0" Also specify: Operating system: MacOS 10.12 · Phone/emulator/simulator & version: IPhone 6 simulator · Is it normal? I can't make sure since I remember the iOS and android folder will be generated together.
Published   Jul 14, 2017
🌐
Expo Documentation
docs.expo.dev › guides › local-app-development
Local app development - Expo Documentation
You can pass in --variant release (Android) or --configuration Release (iOS) to build a production build of your app. Note that these builds are not signed and you cannot submit them to app stores.
🌐
Expo Documentation
docs.expo.dev › develop › development-builds › create-a-build
Create a development build on EAS - Expo Documentation
When building locally the output of the build will be an archive. You may drag and drop this on your Android Emulator/iOS Simulator to install it, or use Expo Orbit to install a build from your local machine.
🌐
Expo Documentation
docs.expo.dev › tutorial › eas › ios-development-build-for-devices
Create and run a cloud build for iOS device - Expo Documentation
The build details page displays the build type, profile, Expo SDK version, app version, build number, last commit hash, and the identity of the developer or account owner who initiated the build. In the above image, the current status of the Build artifact shows that the build is in progress. Upon completion, this section will offer an option to download the build. The Logs outlines every step taken during the iOS build process on EAS Build.
🌐
Expo Documentation
docs.expo.dev › tutorial › eas › ios-production-build
Create a production build for iOS - Expo Documentation
Production build profile: Ensure that a production build profile is present in your eas.json, which is added by default. A production iOS build is optimized for Apple's App Store Connect, which allows distributing builds to testers with TestFlight and public end users through the App Store.
🌐
Sataiva
reactnative.sataiva.com › reactnative-intro › reactnative-expo-introduction
React Native apps using expo
After that it will ask for a project template either blank or Tab Navigation and choose project name and directory. Then it downloads project files and extract it in a folder with project name.Expo tool automatically create a folder and files needed and finally run the app.
🌐
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.

🌐
Expo Documentation
docs.expo.dev › build-reference › local-builds
Run EAS Build locally with local flag - Expo Documentation
If you use Continuous Native Generation, you can also run prebuild to generate your android and ios directories and then proceed to open the projects in the respective IDEs and build them like any native project.
🌐
Boostrand
boostrand.com › install rnwp template › react native › start your first app with expo
Start your first app with Expo - Boostrand
Copy the content of the App folder in RNWP bundle to the folder you chose. This is the easiest way. Create a new Expo project then overwrite the related folders with the content of RNWP bundle App folder.
Published   February 24, 2022