The hard truth about Managed v. Bare

So, after about a week and a half of horsing around with AR and then discovering that I needed to eject to get the project to work on a distributed standalone (thank you all for that info! :beers:) And then ejecting, and then trying mightily to set up an ejected project without success, and reading countless documentation across Expo forums and across the internet. I think I have discovered something, that may be obvious to others, but it certainly was not to me. (Please correct me if I am wrong) — Either:

  1. You create an Expo “Managed” app. With that, you get Expo in all of it’s glory. Basically, a one-stop-shop to build a multi-platform app. You get forums and a killer community of awesome helpful people to help you work through your issues. — There is a small learning curve with all of it, but when you find your flow, you can absolutely FLY in dev as compared to an iOS/Android multi-paradigm that you may have come from. — It is truly impressive.

OR

  1. You ‘eject’. Once you do this, you have, for all intents and purposes, “left” Expo. — You are now creating a “Bare” React Native app. Short of any Expo modules that you might find useful, there isn’t much else for you. Your dev community is now switched over to the React Native community. All of the incredible awesome-ness in ease of build and release management that Expo afforded you is now gone :disappointed: (<- I mean this most sincerely. You will VERY quickly realize how much you absolutely LOVED these things that Expo did for you).

Expo docs are actually quite clear about this distinction. Maybe it was me being hopeful that when the day came that I might have to ‘eject’ to get more functionality I wouldn’t have to abandon all of this “wonderful-ness” that I grew to know and love, but at the end of the day, that what has appeared to happen. And again, I cannot stress enough, I blame no one but me for this :wink:

So what now? For me, I will create two different work streams. One, where I may continue to try and wrangle this whole ejected thing and find some new forums and groups to work through these hardships with, and another where I continue with a few more value-add features that I will still be able to implement in the incredible, awesome dev flow that is Expo.

Hope this helps you with your decisioning and saves you the 8 dev days I lost figuring this out for myself. – Good luck out there!! :smiley:

6 Likes

hey @kodmunki! hopefully we’ll be able to address your specific use case at some point so that you and people like you won’t need to eject. I just wanted to clarify one thing: currently when you eject, you get an “ExpoKit” project. this is a bit different than what the “bare” workflow available to you when you initialize your project. basically, ExpoKit is like including the Expo client in your app but rather than having the Expo client app where you can sign in and open your apps in development, it just points directly to your app. this has some nice benefits - everything works roughly the same as when you were in the Expo client. but it also has some downsides (discussed in the ExpoKit 2019 blogpost). bare apps, on the other hand, are just regular react-native apps with as few or as many of the expo sdk packages installed as you like.

we’re in a bit of an in-between phase where we are working on getting parity in the “bare” react-native workflow with ExpoKit so that we can switch everyone over to the bare workflow. this should make it easier for people to work with ejected apps, but of course not quite as easy as the managed workflow :slight_smile:

2 Likes

Thank you for the added clarity, notbrent! — I will definitely be reading the post you shared. — I greatly admire the care the Expo team has put and continues to put into this project. And very much appreciate all of your help! Thanks! :nerd_face::+1:

There’s not as many of us, but there is an ExpoKit community out here on the Slack and Forums and we’ve been able to help each other out from time to time. I didn’t personally chime in on any of your AR issues because I don’t know my AR from “Arrr, I’m a pirate!”. But keep posting to the forums, and as you figure stuff out, be sure to post what worked for you. I try to keep an eye out in case there’s anything I know from experience how to fix, and I know other users do, too (not to mention of course the vast knowledge of the actual Expo team).

We’re about to put out a huge app update completely rebuilt in ExpoKit. There were some weird bits, but I think we’re way ahead because of the Expo API’s and OTA updates compared to if we had gone with vanilla RN. It was scary at first, but it gets better pretty quick.

2 Likes

Also struggled with ejected app at first but this was mostly due to not knowing anything about native apps… Now with more knowledge it’s fine and I’m generally able to solve native problems, it’s still hard but it get easier.

One trick I use in my apps is this one

This has been immensely useful because only me has to deal with the native side. Other devs are able to keep working with the managed workflow and expo client.

I’m going to start my blog soon where many things will be related to dealing with Expo ejected apps, as it’s true there is a miss in content for people like us that don’t really know much native yet have to deal with it.

3 Likes

Thanks for the addition to this forum post @slorber! And, thanks for the link! I’d really like to check out your posts when you get them up. I hope you’ll reply back to this post, or keep me in the loop. Thanks again! twitter: @kodmunki

Thanks for the info @llamaluvr and the vote of encouragement! I’ve reverted back to the safety of a managed app and forked a parallel workflow to keep working through ejection and getting these AR features live. I will certainly continue to contribute to the Expo community in any positive way I can. – I really love what you are all doing with Expo. It’s very nice work! Thanks again! :+1:

we’re working on changing “expo eject” so that it does that for you, but it’s not ready yet. for now you can just init a new project with the bare template and copy your app over, then add the modules you need one by one

edit: I realized this was more useful as a separate post but is still relevant here. This post is here: Firebase, ExpoKit, and bare confusion