Add the appropriate “Tag” based on what Expo library you have a question on.
My Steps.
expo init my-project && cd my-project
run expo run:ios
I can see that now it generates ios folder and runs the app via classic metro. Not expo go
Add some native stuff that requires pod install or etc. For example, react-native-fast-image or expo iap
At this point, am I ejected or not? Can I still use managed workflow features?
app.json or app.config.js
expo go => I have learned that this will work if I use expo-dev-client
install expo sdk libs WITHOUT bareflow additional commands.
OTA with expo-updates or EAS build or more that i will miss?
If All Yes, Great! Then My question will be changed.
expo run:ios and expo run:android will generated ios and android folder.
Now I can add natives stuff without Ejecting.
Why should I eject? The only purpose of ejecting is to install native stuff. But I can install native stuff without ejecting?
project is bare/ejected if there is android and/or ios folder, it can happen if you run eject/prebuild/run:ios/run:android.
If you want to use run:ios and run:android but still keep your project as managed with eas build you need to add android and ios directory to gitignore (if they already exist delete them or remove them from git state with git rm command).
Basically, running one of those commands effectively ejects the app.
With EAS Build you can use native stuff without ejecting. But you might need to write a config plugin for it to work. This is because EAS Build and config plugins are still pretty new, so the authors of most native React Native modules will not have written config plugins for them yet.
If you need some native React Native module it might still make sense to eject for now, depending on how hard it is to write the config plugin. Fortunately, with EAS Build you can still build a Bare app on Expo’s build farm and you can still use OTA updates and you can still use expo-dev-client. Also, if you are the authors of the module that you need write a config plugin for it in future, you can basically “uneject” the app back to the managed workflow at that time.