React Native Radio

RNR 261 - What’s the deal with EAS?

Episode Summary

In today's episode, Robin and Mazen discuss EAS (Expo Application Services), and how it's revolutionized RN tooling. You'll hear much mention of a mysterious Frank in this episode. That's Frank Calise, one of our developers here at IR and resident Expo Wizard.

Episode Notes

In today's episode, Robin and Mazen discuss EAS (Expo Application Services), and how it's revolutionized RN tooling. You'll hear much mention of a mysterious Frank in this episode. That's Frank Calise, one of our developers here at IR and resident Expo Wizard. 

This episode is brought to you by Infinite Red! Infinite Red is a premier React Native design and development agency located in the USA. With five years of React Native experience and deep roots in the React Native community (hosts of Chain React and the React Native Newsletter), Infinite Red is the best choice for your next React Native app.

Connect With Us!

Episode Transcription

Todd Werth:

Welcome back to React Native Radio podcast brought to you by three bears, a little blonde girl, and parents who simply couldn't be bothered. Episode 271: is EAS the future of React Native?

Robin Heinze:

So, Mazen, are you getting excited for Chain React?

Mazen Chami:

I can't wait. I'm kind of counting down the days to it.

Robin Heinze:

Have you been before?

Mazen Chami:

Yeah. So, my first time was the last one, actually. 2019, was it?

Robin Heinze:

Three years ago. Four years ago, oh my gosh.

Mazen Chami:

Four, yeah, thanks to the pandemic. It was fun. I actually went for two reasons. One, I wanted to learn a little bit more about testing, so I took the workshop with Josh Justice, who's actually doing it again, and I wanted to speak with someone who was giving a talk about Bluetooth. So, it kind of helped me out with my app at the time. It was a success. I got to meet a lot of people, a lot of people from IR. That's when I met Jamon for the first time. You weren't there, I think we came to the conclusion.

Robin Heinze:

I was there for half. I think I came for one day and not the other day because my daughter was still really little at the time.

Mazen Chami:

Yeah. So, that's when I fell in love with IR. It kind of opened up my eyes to the big React Native community out there. So, if you're really thinking about it, you should have already bought your tickets and you need to go by the time this comes out.

Robin Heinze:

Come on! The clock's ticking.

Mazen Chami:

It'll be fun.

Robin Heinze:

Actually, this past weekend, Gant, one of our owners, and Justin, our lead designer who lives in the area, scoped out a bunch of restaurants and locations. This is going to be an epic conference this year. We have a new hotel, which looks really fun. There's arcade games in the hotel. It's going to be awesome. So, if you don't already have tickets, definitely get tickets. ChainReactConf.com

I'm just starting our sponsor section a little bit early. That's fine. Come to Chain React, you can meet us.

Mazen Chami:

We'll be there.

Robin Heinze:

You can hear a bunch of React Native talks. So yeah, I am so excited. Counting down the days, for sure. Let's go ahead and get started for the day. You've probably noticed that Jamon's not here. He is in a cabin in the woods at the moment. I'm not going to say which cabin and which woods so you can't go stalk him, but yeah, he's at a cabin in the woods with other owners having some strategic meetings. He's not here this week, so you have me and Mazen for the day.

I'm Robin. I'm a senior software engineer here at Infinite Red. I'm located in Portland, Oregon with my husband and my two kids. I've specialized in React Native for almost six years now.

Mazen Chami:

Wow.

Robin Heinze:

I just hit my six-year anniversary with Infinite Red.

Mazen Chami:

Oh yeah, the other day. Nice.

Robin Heinze:

And then, of course, my visionary cohost, Mazen, is with me as always.

Mazen Chami:

Very fitting with my eye allergies this morning. I can barely see.

Robin Heinze:

Yeah, he's been rubbing his eyes. We tried to take a screenshot for the episode, and he couldn't keep his eyes open. But he's a visionary, for sure. Mazen lives in Durham, North Carolina with his wife and his little boy. He's a former pro soccer player and coach. He's also a senior React Native engineer at Infinite Red.

As I've already mentioned, this episode is sponsored by Chain React 2023. It's the best React Native focus conference in the U.S. and it's back, happening May 17th through the 19th at the Armory in Portland, Oregon. Come and meet your favorite React Native radio hosts. Head to ChainReactConf.com for tickets and information. We'd love to see you there.

All right. Let's get into our topic for the day. What's the deal with EAS?

Mazen Chami:

What's going on with it?

Robin Heinze:

What's going on with that? Have you used EAS, Mazen?

Mazen Chami:

Yeah, I have, actually, very closely with Frank. Well, actually, funny enough, this episode is basically all Chain React, right? We've been building the app for Chain React, Frank and I, recently. I think we just handed it off since we both moved on to a project, but it's heavy EAS, some of the stuff we're going to go into, the whole EAS-built pipeline and all that kind of stuff.

Robin Heinze:

So, if you don't know already, EAS stands for Expo Application Services. It's kind of the next generation of Expo. What's great about EAS is that it brings back in the customization of the Native side. So, if you previously had avoided Expo all together because you needed the ability to do things with Native modules, EAS sort of allows you to use Expo while still maintaining that level of customization and control.

Mazen Chami:

We keep saying the reasons to stay away from Expo. I guess there are none anymore.

Robin Heinze:

There's none anymore.

Mazen Chami:

Yeah, because this is a big one. Before, it was like, "Oh, I couldn't do anything to Native." We'll get into it soon, but you can do a lot with Native now. There weren't a lot of packages at the time. There are now a lot of packages. We're lucky enough that Frank has spent a lot of time digging into this, and he's actually given the company some internal workshops on this. Frank is coming up a lot in this episode, too.

Robin Heinze:

If you don't know, Frank is one of our engineers here at Infinite Red. He is what I would consider an Expo advocate.

Mazen Chami:

Yeah, that's a good way-

Robin Heinze:

He is very knowledgeable about Expo and how it works and how to use it. He's been helping us all out a lot in adopting EAS and using it in our projects.

Mazen Chami:

I think everything I'm going to say in this episode is basically stuff I've discussed with him or run by him at some point.

Robin Heinze:

So, hi, Frank! Thanks for everything you do. So, just for some background, if you don't know already or if you've never used Expo, the deal with Expo Go is that Expo Go is an app that provides the Native layer and is basically set by Expo. So, if you have a particular version of the SDK, then Expo Go, it is what it is and you can add various Expo modules for common things you might do like using the camera or using file sharing or whatever sort of Native functionality. Expo provides packages for those, but you aren't able to add anything that's not explicitly supported by Expo, and you can't modify anything in the Native app yourself. You can only modify the JavaScript bundle.

Mazen Chami:

They did all that for you and hid it from you to just let you focus on JavaScript.

Robin Heinze:

Which in some cases is a good thing. It narrows your focus to just the JavaScript side. It makes things really simple. It's a great all-in-one experience, but as soon as you need to go beyond that, then it gets problematic. That was a lot of people's hangup with Expo and the reason they didn't use it.

Mazen Chami:

Yeah, I think a lot of people that I remember hearing, or even myself, would say, "All right. I'm going to start with Expo Go, and the moment I hit a hiccup where I need to use," I'm going to go way back here, like I wanted to use React Native maps, for example. This is actually a true example. They didn't have the integration for it at the time, so I got all the way to there, just to make things very simple, and then did Expo Eject, and then brought in React Native maps and continued building my app from there.

Robin Heinze:

But at that point, once you ejected, you were basically in a plain, vanilla React Native project that you no longer had any of the benefit of Expo's infrastructure deployed pipeline, anything like that.

Mazen Chami:

Then I had to go through the whole stack overflow searches for the crazy errors I was getting and stuff. But yeah, it got a little more complicated moving away from Expo, but yes, a lot of people used Expo to get you as close as you can. Then eventually, you would have to eject, it seemed like, most of the time, because of your touch Native code. But now you don't, not anymore. We'll get into that a little bit later.

Robin Heinze:

So, EAS, it does so much. It's hard to describe it in a single sentence, but it gives you services for building, deploying, submitting your React Native apps, all controlled and facilitated by Expo.

Mazen Chami:

And in a CLI.

Robin Heinze:

And a CLI. I think the best way to illustrate what this all does is to walk through, start to finish, what we do to build. We'll talk about the Chain React app since that's what we've been working on recently but, sort of start to finish, daily development experience all the way through submitting to the store.

To start out with building, in a vanilla React Native app, you would run React Native run IOS, React Native run Android, and you'd have a build in a simulator, an emulator. You'd do your development, et cetera. With EAS, you would run EAS build, and it would either build in the Cloud and then you would install on your device via a QR code and then run what they call a dev client. You would run the dev client locally. Then the build on your phone would communicate with your dev client on your computer. This still kind of blows my mind how this works.

Mazen Chami:

Yeah.

Robin Heinze:

But it does. You can install your development build on your physical device and then scan a QR code to point it to the right dev client. Then do your development that way, and your changes update live in real time.

Mazen Chami:

Which is crazy.

Robin Heinze:

It is. It blew my mind for a long time, and I didn't quite understand how it was even working and was like, "Wait. What? I don't need to be plugged in? How is this even working?" There's some Expo magic happening, but it's really convenient. It makes testing really easy. So, on one client team recently, their QA engineer would just have a development build rather than a release build. So, she would just run the dev client and then use a QR code to install the build on her phone and would test that way. It made it a lot easier to get her new builds because she didn't have to rebuild if there was only JavaScript changes. It would update automatically.

Mazen Chami:

That's another part of it. You just mentioned the Cloud. The local way, which is a lot of what we did with the Chain React app, once you do the build locally, it'll eventually give you a dot app, which you just drag onto your simulator, and that's it. The cool thing about it, which blew my mind, with everything still running and all that, you could literally go in and do NPM-install the package. Now, a package that doesn't have Native code, specifically, and it would reload once it's installed, and your package is available for you to keep developing.

Robin Heinze:

So, you only have to rebuild that local binary if you have Native changes or a package that has Native components.

Mazen Chami:

Exactly, yep.

Robin Heinze:

And like even that's not a big deal. You rebuild it, you drag it back on your simulator.

Mazen Chami:

Yep.

Robin Heinze:

It's easy. You can do the builds locally. You can do them in the Cloud.

Mazen Chami:

I will say, though, that the Cloud, obviously, we don't have to get into it, but the Cloud has its limitations. You need to, first of all, create an account, but other than that, you still need to, if you're not paying for a specific tier or using an M1 flag, which I don't think is available to the public yet, it's still in beta, it's pretty slow when you have to enter a cue and sometimes it could take a long time before your build is available. So, there's a caveat there.

But also, one thing I learned the hard way is if you're using an Intel to do all this, it takes forever. Forever. It was close to like 20 minutes for a build, something that's a small build.

Robin Heinze:

Yeah.

Mazen Chami:

M1, it was just actually a minute-

Robin Heinze:

If you have an M1, that's ideal.

Mazen Chami:

... at best. Yeah, yeah.

Robin Heinze:

I forgot what it's like to have an Intel. I'm so used to my M1 at this point.

Mazen Chami:

Right? We're spoiled now.

Robin Heinze:

Yeah.

Mazen Chami:

The cool part, and also, this whole thing is cool, but the other cool part is all this is controlled by an eas.jason file. So, you do all these build command checks in there. So, you could say you want the distribution to be internal versus production. You want it to run only on a simulator versus not. Depending on which command you run, it'll give you that. We talked about it briefly, but if you want to touch Native code, you also just do it right there in a config file, all in JavaScript. So, you create your own plugin.

Let's say you have a package. So, we actually had this perfect example. React Native Firebase had not merged their EAS code yet. So, Frank went in and created a plugin that basically did the linking, essentially, and did info.plist, what you would essentially do manually, info.plist, android manifest. Anything that you need to touch on the Native side, you would basically just write it in object form and then use Expo's functions to write it.

So, something like you do config.ios.infoplist, and that's how you manipulate the plist for IOS. You just kind of keep bringing-

Robin Heinze:

I call them plugins.

Mazen Chami:

Plugins, exactly, custom plugins.

Robin Heinze:

Yeah.

Mazen Chami:

So, you do all that, and then you can basically create your own Native module. So, now with React Native 71 and this, you're basically, you could do anything you want on the Native side very easily in JavaScript and you don't have to dig into the Native code anymore.

Robin Heinze:

Anything you want to change or alter about your Native code, you can do with plugins. Then, there's a system called Prebuild, which Expo describes as the process before a Native app is compiled, it has to generate the Native source code. EAS now will handle that all for you so that you can say, "Here, customize my Native code this way, this way, this way, this way," with your plugins. Prebuild then generates your Native code on the fly, and you don't even have to commit your IOS and Android directories-

Mazen Chami:

Yeah, that's big.

Robin Heinze:

... to your project.

Mazen Chami:

Yeah.

Robin Heinze:

Because EAS Prebuild will generate your Native code automatically every time, or whenever you need to change something in the Native code.

Mazen Chami:

No longer having to look at that Podfile similar to the yarn.lock and be like, "Wait. Hold on. Is this right or not?" You don't have to do that anymore.

Robin Heinze:

Right. You don't have to do any of it yourself. You tell EAS to do it in a way that EAS understands, and then EAS takes care of the rest. So, you can customize whatever you need to customize. You have the control that you need without having to literally go in and change your Objective-C, your Java, you're calling whatever. I think it's amazing.

It's so amazing that just the other day, I was going through the Chain React app and trying to update to React Native 71, which just came out. So, we're using Expo, and obviously the Expo SDK, the new SDK, which would support React Native 71 hasn't officially come out yet, but the Expo team released a version that will let you upgrade. So, I was going through this process and I went straight to the React Native upgrade helper like I always have for every React Native upgrade I've ever done in the past. I'm going through, and so I asked Frank, I was like, "So, we don't have the IOS and Android directories committed to the project. Where am I supposed to make these changes?" Because the upgrade helper usually has a bunch of fiddly little Native changes that you have to make. I was like, "How do I do this?" He's like, "You don't have to. It's in the SDK. They've done all that. They do that for you." I'm like, "Wait. What? So, I just don't even have to worry about it?" I changed the React Native version. I changed the Expo-

Mazen Chami:

In your package.jason-

Robin Heinze:

In my package.jason, I changed the Expo SDK version, I changed the React Native version-

Mazen Chami:

That's it.

Robin Heinze:

I changed some of the versions of the types and jest and a couple other things. I ran yarn, and that was it. That was the upgrade. I'm like, "Whoa!"

Mazen Chami:

That's so easy.

Robin Heinze:

"This is so easy!" So, I really think this is going to be the future for a lot of React Native developers. It really feels game changing.

Mazen Chami:

One other thing, everything that we've done like so far that we've talked about is all terminate, like CLI commands, so the build and the prebuild. If we're going to continue on, like as you're done building, you're getting ready to put your app on the store or you want to now do some sort of... You don't need TestFlight anymore to test, which is amazing. Robin talked about the QR codes for the distribution. One thing you still do need is your devices, your UUIDs, your certificates. But what's great about it is you do all that and-

Robin Heinze:

That's all CLI, too!

Mazen Chami:

It's all CLI, yeah. There's a command you run-

Robin Heinze:

I know!

Mazen Chami:

I'm going to pull up the command. I don't remember the command off the top of my head, but there's a command you run, and then from that-

Robin Heinze:

EAS device:create.

Mazen Chami:

Device create, there you go. And you add that device to your certificate, and then that stays uploaded on the Cloud for you. Now, some of you that are like, "Well, hold on, I don't want Expo to manage all this," blah, blah, blah, you can roll your own server. So, that's a different topic, but you can roll your own server if you're worried about that piece. Expo, the only thing that goes to Expo, really, is communicating in the authentication part, but also storing them, it does store them on your profile, specifically.

Robin Heinze:

This is all stuff that we were doing before. Before EAS, we would use Fastlane, and Fastlane Match. So, there was a whole process for setting up Fastlane Match with a Git repository or an AWS bucket or something to manage your certificates. You would have to manually register your devices in the Apple developer portal. You would have to add them directly and then run match to generate the certificates, and half the time it wouldn't work or there would be-

Mazen Chami:

Well, you'd download it and then add it.

Robin Heinze:

Yeah, you would have to download it-

Mazen Chami:

Add it to your key certs and then you'd open up X-code and build again.

Robin Heinze:

It would like-

Mazen Chami:

And there's a dif-

Robin Heinze:

If someone else on your team now needs the service, you have to add them, and then sometimes it doesn't work. Then you have to nuke the certificates if they're expired, and then you end up screwing stuff up for your other app. It was a whole thing, and then you'd have to get your Fastlane config exactly right, and then Fastlane takes a million years to run. Then sometimes it will error out halfway through because you didn't get your version number exactly right or something. It was a process.

Mazen Chami:

Yeah.

Robin Heinze:

I have been blown away how easy it is with EAS now. I use the CLI, I add my device. It just prompts you for what it needs, and then you run a build and it asks you, "Oh, hey, do you want to build for these devices or include all these devices in your provisioning profile?" You're like, "Yes! I want all those devices." Boom! Does its thing, it uploads a build, tells you when it's done, and then there's a QR code. If your device was in the list of devices that it provisioned, scan the QR code and install the build. It's that easy. There's no TestFlight, there's no Google Play store, alpha, beta, whatever builds. It's all in one and it's really easy. Yeah, it blows my mind every day that I use it.

Mazen Chami:

I think one thing to talk about before we move on to the next one now that you're getting ready to submit to the store, when you're doing your EAS.jason file, there's something Expo calls these Build profiles. So, other than the profiles that you have with your Apple store and that stuff, there's Build profiles. Think of these like, how do I say this, like in the past, we would call these development, UAT or testing, production, stuff like that Expo gives you the bare minimum when you're using EASes, development, which stands for development preview, which is more of a, we talked about internal distribution, so think about sending it to QA, and then production, which is to the store. You can change these profiles or even add profiles that you want for specific business needs and name them whatever you want.

So, let's say one we said preview was to QA. You could specifically say, instead of preview, you could say QA is your profile. That's tailored for QA. It's internal distribution and all that. You might want to do another one, which is pre-store. Something I think about where it's an external build, so it's not an internal build. So, you're basically bridging the gap between an internal build versus an external build, getting closer to what it would look like to a store. They give you all the options you need, so you can customize it and play with it like you want.

Robin Heinze:

For example, the ones that we have for the Chain React app, we have development, which goes to a simulator. We have development, which goes to a device. We have preview, which goes to a simulator. What that would be used for is if you want to run the device in release mode, so not in debug mode, but you want to do it on your simulator for testing whatever you would need to test. So, we have preview and then preview device, which is what we use for internal distribution. So, if we have testers who want to install it and test it, that means it's in release mode and it runs on advice. Then we have production, which we haven't used yet because we haven't submitted it to the store, but production would be what it sounds like.

Mazen Chami:

Yeah, exactly. You can see there's a lot you can use it for. You customize it as you want and whatever meets your business needs. The next one, which again, I think we've said this enough but we'll keep saying it, blows our minds, but it's EAS' submit. You're basically submitting to the store.

Robin Heinze:

You can submit to the app store via a CLI command.

Mazen Chami:

The command. EAS submit and then you do -P and then you pick an IOS or Android. No, I think you have to do both of them separately. That'll basically do a build and push that to the store. Obviously, you've done your-

Robin Heinze:

It does not actually-

Mazen Chami:

... Apple login-

Robin Heinze:

... click submit.

Mazen Chami:

No, yeah.

Robin Heinze:

It doesn't submit it for review as far as I know, but it does a build with the proper configurations and uploads it to your store account.

Mazen Chami:

You still have to log in and do your screenshots or descriptions-

Robin Heinze:

You need to log in and do your metadata, your description, everything like that, but there is a beta package called EAS Metadata, which would take care of all that Metadata screenshots for you. I don't know if it does screenshots, but-

Mazen Chami:

I wasn't able to find screenshots in the code, but everything else-

Robin Heinze:

But it would let you configure your description, your contact info, all the information that you have to fill out for your store listing, it would let you define and configure that through EAS so that you would not even have to manage that.

Mazen Chami:

Even though it's in beta, it also gives you the ability, for all those of you that have apps in multiple stores in multiple languages, it even lets you customize all that metadata. So, it's basically everything short of screenshots, which I actually want to-

Robin Heinze:

Which I wouldn't be surprised if they started offering screenshots before long.

Mazen Chami:

Probably coming soon. I wouldn't be surprised. Unless it's there and we just didn't see it. So yeah, I didn't see it in the documentation. So, we'll say it's not there for now, but it might be there. So, we've now submitted to the store. You go in manually and then you submit it. Now, the next big one is update. You want to go in and do updates.

Robin Heinze:

Right. After your app's released, you have a bug, you need to update it. EAS offers over-the-air updates similar to Code Push, if you've ever used Code Push. Over-the-air updates basically configure your app so the JavaScript bundle points to a URL, which can be updated remotely. Through EAS, you can choose, they call them channels. So, you would make updates locally and then push through updates to a specific channel. Then all the apps out in the world that are listening to that channel will get that update.

We haven't used this in the wild quite yet, but we're setting it up for the Chain React app. If there's anything that we need to update during the conference, we can push updates lives and not have to wait for app store review.

Mazen Chami:

I think they also even give you the code, you just copy and paste it, for a GitHub action. So, let's say you want to merge to main, because hopefully you've done your QA and all that, at that point, it just does the EAS update for you. I mean, yeah. Again, that's another mind-blowing thing. This is-

Robin Heinze:

I remember doing CI set up back when we were using Fastlane, and the amount of headaches it took to get Circle CI set up to run X-code and do a full TestFlight build with Fastlane and submit it was enormous. I don't even think we ever got it working consistently. To be able to configure a YAML file for GitHub actions super easily, it runs, you have to add a couple credentials so that it can access Expo, but the setup was so easy in comparison because EAS is your CI now. It's already set up to do your build because that's what it does. So, on our Chain React app, whenever a pole request is merged, an internal distribution build is kicked off through EAS and then we have a web hook, which integrates with Slack. So, any time there's a new internal distribution build, it notifies Slack. Our testers can install it seamless.

Mazen Chami:

Another thing I think they added on... So, we talked about build profiles. Within build profiles, you can add channels. So, how Expo explains it is the channel allows you to point updates at builds. So, if we set up an action, publish changes on merge, when you do that, it'll kind of publish to that specific channel. Let's say you want to say in production, the channel is production. When you want to create an update for production, you can channel, funny, your update to that specific channel for production updates. It's just another layer. I don't think you necessarily have to do it. You probably have to, but I think there's a --autoflag where it'll do it across the board for the updates. That's just so that you don't send updates to dev builds and stuff like that. You could just send them to preview builds.

That's another thing. You could do updates to just preview builds, so you can do your testing first, and then updates to your production builds. Then it's done at that point. Again, a lot of control via just a simple .jason file.

Robin Heinze:

Incredible. I know it probably sounds like we're sponsored by Expo at this point. We're not. We just really like this tooling, and it's really changing how we do React Native development. We think that'll be true for a lot of other folks out there. I think EAS is kind of the way forward; however, we should talk about the downsides, why you maybe would choose not to use EAS. For one, it's not free.

Mazen Chami:

Yeah.

Robin Heinze:

Expo Go is Expo's open source project and it's free now. It will always be free to use Expo Go for your React Native project. EAS is very much a paid service. I think it's absolutely worth what you pay for it, but that's the long-short of it. If you're maybe a solid developer or you're a student or you don't have a budget for something like that, EAS may not be a good fit for you, but EAS is sort of Expo's business model. This is their service that they charge for, whereas Expo Go is their free open source tier, essentially.

Mazen Chami:

Just for reference, if you go with the free plan, you only get one concurrent build at a time. So, it's one build at a time.

Robin Heinze:

Yeah, there is a free EAS tier. You just have to wait a really long time for builds, which is-

Mazen Chami:

It's like 45-minute build time out. So, you're only building-

Robin Heinze:

A really long time.

Mazen Chami:

... for 45 minutes. Imagine you have 10 commits and 10 pushes or whatever, so 450 minutes-

Robin Heinze:

We were on the free tier for maybe a week before we were like, "No."

Mazen Chami:

It's a downside, but if you get to the point where you have revenue, it completely improves your DX and your developer experience. You're able to move faster and it makes things cleaner.

Robin Heinze:

Another thing to keep in mind, there's a lot to learn. Compared to vanilla React Native development, it's very different. There's a lot of things that you'll be doing differently. I'm still learning new things about EAS. I'm always being, "Frank, hey, what's this? How do I do this?" He's like my expert.

Mazen Chami:

He's like our chud GBT before Expo.

Robin Heinze:

The docs are very good. They're very thorough. They're very extensive. There's a lot of stuff to learn about EAS. It's definitely an investment in your work flow. Don't try to do it halfway. Definitely learn about EAS and all that it's capable of so that you're maximizing what it can do.

Mazen Chami:

If you need to write a Native plugin, there's a high bar there, too, because it's different from the usual Objective-C, Swift, Java common code that you've written in the past. It's in JavaScript still, but there's some new terminology and new functions you have to learn to do the "writing," that write the Native code for you. So, there's that. Another big downside that I think a lot of people might want to consider is it's a reliance on another third-party dependency. There's a bunch to bring in.

Robin Heinze:

If EAS servers are down, so is your development. You are relying on another party. In a similar vein, you have to wait for Expo to do things. When React Native versions come out, you have to wait for Expo to release new versions of their SDK in order to upgrade.

Mazen Chami:

They're doing better recently on making those quicker.

Robin Heinze:

They are pretty fast.

Mazen Chami:

Yeah, in comparison to the past when it was three, four versions behind. Now, I feel like it's only one version, not even.

Robin Heinze:

They are pretty quick. Like I was talking about earlier with this latest React Native 71, even before the new major version of the SDK was out, they released a minor version of the existing version to allow people using EAS to upgrade their React Native version. So, even though Expo Go wouldn't be updated until the major version release, they did make an effort to release a minor version of the existing SDK so that EAS customers could update, which I appreciated. There's also, and I've always said this about Expo and it's honestly still kind of true with EAS, there is an element of magic-

Mazen Chami:

Who doesn't like magic?

Robin Heinze:

Which is good in a lot of cases. When things are going wrong, it can kind of handcuff you a little bit and make it harder to troubleshoot because there's so many things happening outside of your control. That can be frustrating, especially for developers who like to be in control at all times. But there's a lot of resources. Expo has an entire Discord. They're very responsive to issues. They're always quick to be aware of things that are going wrong that are on their end, and their docs are very, very, very good at helping you troubleshoot when things are not going right. So yeah.

Mazen Chami:

Question for you, I guess, to wrap things up. You're jumping on a new project, hypothetical, which actually might be true, but you're hopping on a new project. In its current state, would you recommend the client uses EAS?

Robin Heinze:

Absolutely.

Mazen Chami:

Didn't even hesitate.

Robin Heinze:

No hesitation. I would absolutely recommend it.

Mazen Chami:

Same. I'm pushing it on mine. Well, I take it back. Sorry if you guys heard this. I'm recommending it to my current client just because of the efficiency. They talk a lot about DX and improving that and quicker loops and wrapping things quickly, quick development cycle, which is why a lot of people go to React Native. Yes, use EAS, even though it's still young.

Robin Heinze:

It's young, but it's-

Mazen Chami:

It's old at heart.

Robin Heinze:

... come a long way since it first came out, and it's improving quickly.

Mazen Chami:

There's good people behind it. They're putting a lot of time and effort into it and making it what it is. If this is what it's starting off with, imagine what could come next.

Robin Heinze:

All right, I think that's all the time we have for today. If you'd like to nerd out more about React Native, be sure to check out Jamon's Twitch stream, RN.live, or YouTube.Infinite.Red. He doesn't go live as often as he used to, but it's always fun when he does. He's promised to try and get me on the stream more often. Check that out. You can also join our Slack community at community.infinite.red or our Twitter community, RNTwitter.infinite.red. You can find Mazen on Twitter @MazenChami. You can find me @Robin_Heinze. You can find React Native Radio @ReactNativeRDIO.

As always, thanks to our producer and editor, Todd Werth; our assistant editor and episode release coordinator, Jed Bartausky; our designer, Justin Huskey; and our guest coordinator, Derek Greenberg. Thanks to our sponsor, Chain React Conf. Check us out at ChainReactConf.com. A special thanks to all of you listening today. Make sure to subscribe wherever you get your podcasts. See you all next time!

Mazen Chami:

Before we go, Robin, do you have a mom joke?

Robin Heinze:

I do.

Mazen Chami:

This is my favorite segment. This is what I wait... This is why I'm on the show.

Robin Heinze:

Okay. This is courtesy of Bryan Stearns. Bryan, if you're listening, thanks for the joke. I once stayed up all night to see where the sun goes, and then it dawned on me.

Mazen Chami:

That's a good one.

Robin Heinze:

All right, we'll see you all next time.