React Native Radio

RNR 240 - What’s New in Expo SDK 45

Episode Summary

We've got a new Expo SDK! In this episode Jamon, Robin and Mazen dig into whats new and exciting with Expo SDK 45.

Episode Notes

We've got a new Expo SDK! In this episode Jamon, Robin and Mazen dig into whats new and exciting with Expo SDK 45.

This episode 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.

Helpful Links:

  1. https://blog.expo.dev/expo-sdk-45-f4e332954a68
  2. https://blog.expo.dev/a-peek-into-the-upcoming-sweet-expo-module-api-6de6b9aca492
  3. https://docs.expo.dev/versions/v45.0.0/sdk/audio/#audiosample

Connect With Us!

Episode Transcription

Todd Werth:

Welcome back to React Native Radio podcast. Brought to you by Internet Explorer, which recently died. That was the huge roar of applause you heard earlier this week. Episode 240, What's New in Expo SDK 45.

Jamon Holmgren:

Robin. I have a question for you.

Robin Heinze:

Yes. Go ahead.

Jamon Holmgren:

What version of Java JDK is recommended for React Native?

Robin Heinze:

I believe that would be Version 11.

Jamon Holmgren:

Version 11. Okay.

Robin Heinze:

Yeah.

Jamon Holmgren:

And which one-

Mazen Chami:

Zulu 11?

Robin Heinze:

Zulu 11.

Jamon Holmgren:

Zulu 11. And which one was your machine? Which one was your dev machine on this week?

Robin Heinze:

That would be 1.8.

Jamon Holmgren:

1.8.

Robin Heinze:

That was not a typo. 1.8.

Jamon Holmgren:

Or was it a typo? Did you type in 1.8 when you meant to put 11?

Robin Heinze:

No. I don't know how that happened. I honestly have no idea why it was that old. I set this machine up in 2020, two years ago, but I would've expected it to be more like eight.

Jamon Holmgren:

Yeah.

Robin Heinze:

Seven.

Mazen Chami:

Did they change the versioning numbers?

Jamon Holmgren:

Yeah. I'm wondering is this a thing where they went from 1.8 to 8 type of a thing?

Robin Heinze:

Maybe. Maybe.

Jamon Holmgren:

You remember when React went from 0.16 to 16 or something?

Robin Heinze:

Yeah, that could have been a really big jump.

Jamon Holmgren:

Yeah, yeah.

Robin Heinze:

But I will say I set this machine up using Jamon's Infinite Red Academy-

Mazen Chami:

Uh-oh.

Robin Heinze:

... React Native course, so.

Jamon Holmgren:

Oh, and that needs to be updated, doesn't it?

Robin Heinze:

Maybe check that out.

Mazen Chami:

For some reason, something tells me that that tutorial says it's 1.18. So there must have been a jump at some point.

Jamon Holmgren:

Oh, really?

Robin Heinze:

Yeah. Our Java 8 and Java 1... In short, 8 is the product version number, and 1.8 is the developer version number. The product is the same, JDK 8.

Mazen Chami:

Oh.

Robin Heinze:

Okay. Maybe not as terrible as I was assuming.

Jamon Holmgren:

Yeah, that just ruins the joke.

Robin Heinze:

It does.

Jamon Holmgren:

It just ruins the joke entirely. 1.8 to 11, you're just so far behind.

Robin Heinze:

But, yeah, now I'm on 11, because I've been upgrading a project from React Native 60 to React Native 67. I started trying to update it to 68, and with all the new architecture stuff, it was too much, so I settled on 67.4.

Jamon Holmgren:

I started working on Ignite 68 upgrade as well, and that was... I still am not done because I ran into some bug-

Robin Heinze:

There's a lot of stuff.

Jamon Holmgren:

... that nobody on the internet has run into.

Robin Heinze:

You're on the bleeding edge.

Jamon Holmgren:

I guess.

Mazen Chami:

When did the upgrade helper come in? Was that 63? So you probably had to do it all manually.

Robin Heinze:

Oh, no. The upgrade helper's been around for a while.

Mazen Chami:

60-

Robin Heinze:

I was able to use the upgrade helper.

Mazen Chami:

Okay.

Robin Heinze:

It has versions all the way back to in the 50s, I think.

Jamon Holmgren:

The upgrade helper is awesome. What I did, though, was I created a new React Native project, and then I copied the iOS folder in over and did the merge thing.

Mazen Chami:

Mm-hmm.

Robin Heinze:

Mm-hmm.

Jamon Holmgren:

So, on macOS, this is a tip for you folks, if you're in finder, if you want to merge the two folders, when you're dragging the folder from the new project into the previous project, hold down, I think it's option, and then it will turn to a little green plus, which is copy. When you drop it in there, it'll give you the option to merge. If you just move it, it won't give you the option to merge, so that's something to keep in mind. You do that option when you're dragging it in.

Jamon Holmgren:

And then when you merge, then you go look at your git diff. I did it in VS code, so I could just go look at the git diff and then pull in any changes to the iOS folder that I wanted to keep. So, instead of trying to update my old one, I could just replace it or merge it basically with the new stuff and then bring back in from the git diff any changes that I wanted to hang onto in my iOS folder.

Mazen Chami:

That's a cool tip.

Robin Heinze:

Oh, nice. That's a cool way to do it.

Jamon Holmgren:

Yeah. Yeah. You just have to make sure that you name your new React Native project the same so that it will come in with the same name; otherwise, you're going to have-

Robin Heinze:

Right. You're going to have-

Jamon Holmgren:

Problems.

Robin Heinze:

... random name collisions. Yeah. So that was a fun little project to tackle.

Jamon Holmgren:

Yeah. Yeah. So, you were just doing an upgrade then?

Robin Heinze:

Correct.

Jamon Holmgren:

Yeah. Well, it'll be interesting to see how these... Now that we're getting into the stage of React Native's life where there's old versions out there and you have to keep them up to date to keep up with Apple and Google's requirements. So, it'll be interesting to see how that whole process goes. We've gotten pretty good at upgrades, though, I've got to say.

Robin Heinze:

Yeah. I feel, honestly, this time around, I felt so much more confident tackling the various errors that came up. Yeah. I had a much easier time.

Jamon Holmgren:

So, it is worth saying that in React Native Radio 199, so that was actually quite a while ago, Robin and I... Wow, May 26, 2021. That's today. It was a year ago.

Mazen Chami:

That's a year ago. Wow.

Jamon Holmgren:

Okay, I realized people are listening to this much later when... but we're recording this on May 26th, spoiler, and it was released a year ago, Episode 199. Robin and I actually discussed strategies for upgrading React Native, so I guess it's appropriate for today.

Robin Heinze:

So, I will say I wasn't going into this assuming that I would upgrade React Native. This was just a week long client and they needed some test builds. But when I went to go build the project, I literally could not build it because-

Jamon Holmgren:

Too old.

Robin Heinze:

... in the year since we worked on this project, macOS has been updated, Xcode's been updated, and it wouldn't build. So, I had to upgrade just so that I could run it at all.

Jamon Holmgren:

Yeah. Well, that's why I started upgrading Ignite, as well. I was trying to fix a bug that only showed up in a 0.68 project. So, I'm like, "Oh. Well, I better update to 0.68 so I can fix that bug." Yeah. Well, you know how that goes.

Robin Heinze:

It's always better to have the updated version. It's always better just to-

Jamon Holmgren:

It's true.

Robin Heinze:

Be-

Jamon Holmgren:

It's true.

Robin Heinze:

Be up to date.

Jamon Holmgren:

We should, I guess, get into our program here instead of just talking about upgrades. Actually, we will be talking about upgrades during, but it'll be a little different. I, of course, am Jamon Holmgren, your host and friendly CTO of Infinite Red. With me is Robin Heinze, co-host. She's a senior software engineer at infinite Red, as well. And Mazen Chami, who's a senior software engineer at Infinite Red. We are all at Infinite Red, and we are all here to look at Expo SDK 45.

Jamon Holmgren:

But before I get into that, this episode is sponsored by, surprise, Infinite Red. Infinite Red is a premier React Native design and development agency located fully remote in the US and Canada. If you're looking for React Native expertise on your next React Native project, hit us up. You can go to infinite.red/reactnative. And don't forget to mention that you heard about us through the React Native Radio podcast. We want to make sure that they keep sponsoring us. And as owner of the company, I have no say over that.

Mazen Chami:

We need to keep the lights on.

Jamon Holmgren:

Yeah.

Robin Heinze:

The lights of our remote office.

Jamon Holmgren:

Right. You know what, actually, just an aside, we actually got a tiny, tiny, tiny office recently. It's literally a desk and a chair, and it's not even in its own office. It's just in a room with other stuff.

Robin Heinze:

It's a room in another office.

Jamon Holmgren:

The whole reason for that is just to have a place to send mail that's not my personal residence.

Robin Heinze:

What? You don't want your personal residence plastered all over the internet?

Jamon Holmgren:

Apparently, not. I don't know. Sometimes I have hot takes and I don't want to get hate mail.

Robin Heinze:

You wouldn't want anyone to come to your house and do anything untoward.

Jamon Holmgren:

Yeah. By the way, if you have hate mail, my email address is mazen@infinite.red.

Mazen Chami:

Oh, great.

Jamon Holmgren:

Also, send us your weird bugs. We want to do an episode on weird bugs. So, just send it to @reactivenativerdio on Twitter, and we will take a look. All right, let's get into it. Our topic is What's New In Expo SDK 45. So, Expo released SDK 45, when was that?

Robin Heinze:

Well, the blog post was released May 5th.

Jamon Holmgren:

Okay.

Robin Heinze:

And we're recording this on May 26th.

Jamon Holmgren:

Three weeks later, yeah.

Robin Heinze:

So, three weeks. Yeah.

Jamon Holmgren:

So, by the time you listen to this, it'll be a little bit older, but Expo tends to, I think, do about a quarterly release cycle, something like that, and so SDK 45 came out and they actually are fully upgraded. I guess this is relevant to 0.68.2. That's the biggest piece of this.

Mazen Chami:

Mm-hmm.

Jamon Holmgren:

But there's a lot more, too.

Robin Heinze:

Yep. So, some of the highlights. They have an updated UI for ExpoGo, so that looks a lot prettier, and it sounds like it's a little bit more functional, more streamlined.

Jamon Holmgren:

And can you explain what ExpoGo is?

Robin Heinze:

ExpoGo is the hub for all of your different Expo projects. That's about what I know.

Jamon Holmgren:

Yeah. You can see all of your projects there and you can run them, too.

Robin Heinze:

Yeah.

Jamon Holmgren:

It pulls in the JavaScript, and you can run them right from ExpoGo. It's kind of cool. It's the quickest way to get started with React Native because you're not compiling.

Robin Heinze:

Yeah. It's like Expo's hub. I think it also will show you the various snacks that you've opened.

Jamon Holmgren:

I love Expo snacks. I love snacks in general, but I love Expo snacks especially.

Robin Heinze:

Who doesn't love snacks. That's such a great name.

Jamon Holmgren:

I know. I guess I feel like that, yeah, that was intentional. Full snack developer now actually also means that you're good at Expo.

Robin Heinze:

Can I put that in my resume?

Jamon Holmgren:

Full Expo snack developer?

Robin Heinze:

Full snack.

Mazen Chami:

I'd like to update my podcast bio to a full snack-

Robin Heinze:

A full snack.

Mazen Chami:

... developer.

Jamon Holmgren:

I like ExpoGo. I don't tend to use it except for with... It's more demos, I think. Once things start getting serious with an app, then, of course, I'm moved to my own build. But there's also Expo pre-build, which is awesome. We're not going to go on all that, but that ExpoGo updated UI, it's really cool.

Robin Heinze:

So, they've also revamped the clipboard and web browser modules to use the new Sweet API, which I think is related to the shift from Expo uni modules to Expo modules.

Jamon Holmgren:

Just the Expo package?

Robin Heinze:

Just Expo, yeah.

Jamon Holmgren:

Yeah. Mm-hmm.

Robin Heinze:

I started reading about what the Sweet API is, because that's a really sweet name.

Jamon Holmgren:

It is.

Robin Heinze:

Ba-dum-ba-dum-bum. No? Okay.

Jamon Holmgren:

As an early millennial/late, I think... Do they call us X-ennials? Essentially Gen X/whatever. I'm 40. So, I use the word sweet a lot, and I don't know if other generations do.

Robin Heinze:

Sweet.

Jamon Holmgren:

But I use sweet a lot.

Robin Heinze:

Sweet.

Jamon Holmgren:

Like, "Oh, that's sweet."

Robin Heinze:

I use sweet.

Jamon Holmgren:

Do you?

Robin Heinze:

I think that's part me.

Jamon Holmgren:

Well, but you're on the... You're a millennial as well.

Robin Heinze:

I'm dead center millennial.

Jamon Holmgren:

You are.

Robin Heinze:

I'm literally in the middle of the 20-year span.

Jamon Holmgren:

Isn't that a millennial thing? The sweet thing? I feel like it is.

Robin Heinze:

Maybe, yeah. Sweet and cool are definitely-

Jamon Holmgren:

Well, cool's been around. My dad claims he invented it, so.

Mazen Chami:

I use cool over sweet.

Robin Heinze:

Yeah.

Jamon Holmgren:

Yeah.

Robin Heinze:

I will say, "That's cool."

Jamon Holmgren:

How come cool has-

Robin Heinze:

But I would say sweet like, "Sweet."

Jamon Holmgren:

Yeah. I do, too. How come cool has stood the test of time? It doesn't seem like something that should. It's just cool.

Robin Heinze:

I guess it was from... You think about, "All you cool cats and kittens." It's a fifties, sixties thing.

Jamon Holmgren:

I guess because when you're flustered, you feel hot, you're sweating.

Robin Heinze:

Right. So, you want to keep it cool.

Jamon Holmgren:

Where cool is you're calm, collected, cool.

Robin Heinze:

Yeah. That is pretty universal.

Jamon Holmgren:

So it makes sense.

Robin Heinze:

I don't think the Gen Z lingo is going to stand the test of time.

Jamon Holmgren:

Yeah, maybe not.

Robin Heinze:

No cap.

Jamon Holmgren:

Maybe not. Time will tell.

Robin Heinze:

That's the only one I know.

Jamon Holmgren:

We'll see. We'll see. People can listen to this many years later. I'm sure that they're going to be very curious about Expo SDK 45.

Robin Heinze:

Anyway.

Jamon Holmgren:

Anyway.

Robin Heinze:

The sweet.

Jamon Holmgren:

What is sweet API?

Robin Heinze:

The sweet API. I read about it. It’s more complex than what’s in my wheelhouse, but it has to do with this feature in Swift UI called Result Builders, and so it makes it possible to create native modules declaratively with a module definition.

Jamon Holmgren:

Oh. That's right up their alley.

Robin Heinze:

Yeah.

Jamon Holmgren:

Because Expo's doing more declarative native stuff where you can-

Robin Heinze:

Yeah.

Jamon Holmgren:

Well, Expo pre-build, that's an example of it. We should really have probably someone from Expo on here to talk about that.

Robin Heinze:

Again.

Mazen Chami:

Yeah.

Jamon Holmgren:

Evan Bacon or Brent or Charlie or something. Yeah, that would be cool. So they're moving that direction. Apparently, yeah, Clipboard and Web Browser are now using them. I assume others will follow. There's also Expo Crypto, Expo Random, Expo Haptics, and Expo Localization that are all now using JSI, so that's cool.

Mazen Chami:

Yeah. Expo AV also moved to JSI.

Jamon Holmgren:

Oh.

Mazen Chami:

Supporting audio... Sorry. Sampling audio frames. So, it makes it easier.

Jamon Holmgren:

In JavaScript?

Mazen Chami:

Yes.

Jamon Holmgren:

That's awesome.

Robin Heinze:

Can we get a quick reminder of what JSI is? I know it stands for JavaScript Interface.

Jamon Holmgren:

So, it lets you call Native C++ code, which then can call other things like Swift and Objective C and Java and Kotlin.

Mazen Chami:

Part of the new architecture.

Robin Heinze:

And that's a component of the new architecture, yeah.

Jamon Holmgren:

Yeah.

Mazen Chami:

Yeah.

Jamon Holmgren:

Yeah, exactly.

Mazen Chami:

And they're coming up to React Native 68.2.

Jamon Holmgren:

There's access to the new architecture there.

Robin Heinze:

Yeah.

Mazen Chami:

Yeah, that's awesome.

Robin Heinze:

Yeah. That's, I would say, probably the main highlight of Expo 45 is that it supports React Native 68, which has the new architecture flag.

Jamon Holmgren:

So, in the sound object, you have a setOnAudioSampleReceived(), so it allows you to get... basically, it's a callback, and it allows you to then do something with the audio sample. That'll be cool. That'll enable some new types of apps within Expo and outside of Expo.

Mazen Chami:

Yeah. I've used Expo AV before, and it's a pretty good library, letting you do audio and video, and the video aspect is really cool. I did some live streaming video on there as a test, and it was a pretty robust library.

Jamon Holmgren:

You know, I really feel like Expo... We're big Expo fans obviously here, and it feels like that old marketing campaign by Apple with the whole, "There's an app for that," I feel like there's an Expo module for that.

Robin Heinze:

Yeah.

Mazen Chami:

There is.

Jamon Holmgren:

At this point, yeah.

Robin Heinze:

Well, in this same project that I've been upgrading React Native on, there's a lot of other older outdated libraries that aren't maintained anymore, and I'm looking for replacements. And I always look to the Expo packages first, because there's almost always a perfect library.

Jamon Holmgren:

And almost all of them can be used outside of Expo managed projects, too.

Robin Heinze:

Yeah.

Jamon Holmgren:

If you're not even using Expo. I mean, you'd bring in the Expo package, but-

Robin Heinze:

And you know they're maintained, you know they're supported.

Jamon Holmgren:

Yeah.

Robin Heinze:

They're documented. It's easy.

Mazen Chami:

The next thing on here, it's easier to control excluding permissions and Android library. So, now in your JavaScript or app.json or app.config.js file, you could pretty much bring it in using android.blockedPermissions. So, that will add XML attributes to your Android, to where you can stop access to specific modules. I'm talking about let's say microphone.

Jamon Holmgren:

Yeah. That's awesome. Yeah. Just more control.

Mazen Chami:

Mm-hmm.

Jamon Holmgren:

And you can do it just from the app.json, which is, of course, really straightforward, simple. I like that. That's cool. More runtime version validation. What does that mean?

Mazen Chami:

There's something about the trailing zero being silently truncated on runtime, so now numbers ending in zero, like 1.10-

Jamon Holmgren:

Gotcha.

Mazen Chami:

... will be addressed as needed.

Jamon Holmgren:

Yeah.

Mazen Chami:

Android. It says here Android's weekly type configuration files won't silently truncate that leading zero. So, if you had version 1.10, Android in the past would take it as 1.1, which would cause some issues.

Jamon Holmgren:

Oh, that'd be annoying.

Robin Heinze:

That's really, yeah. For versions, that actually matters.

Mazen Chami:

That's very important, yeah.

Robin Heinze:

That's very important.

Jamon Holmgren:

Just imagine what Robin would do with that with her versioning issues. Bumped to Android and compile SDK version to 31. I think it was 29 before or something like that.

Robin Heinze:

Yeah.

Jamon Holmgren:

And then Java 11. There you go.

Robin Heinze:

Yep. That's all, yeah, part of React Native 68.

Jamon Holmgren:

Yeah. So, let's talk about the 0.68. That's a bump. It’s still React 17. React 18 is coming in 69.

Robin Heinze:

Mm-hmm.

Jamon Holmgren:

But it's great that Expo's on the leading edge here at 68.2 as of this recording, of course.

Robin Heinze:

And they do, they do clarify that their including Reactive Native 68, but Expo modules do not yet support the new architecture.

Jamon Holmgren:

Mm-hmm. Yeah.

Robin Heinze:

They're working on it.

Jamon Holmgren:

It's behind a flag, but at least they're bringing stuff in and getting you up to that level.

Robin Heinze:

You can expect them to start rolling out support in their Expo modules this summer.

Mazen Chami:

Coming soon, this summer.

Robin Heinze:

Coming this summer.

Jamon Holmgren:

We, of course, did an episode on React Native 0.68, so definitely check that out. It was a recent episode, and we talk all about that. So, we probably won't go into it too much here, but 0.68 is probably the most exciting release since 60, I think-

Robin Heinze:

Mm-hmm.

Jamon Holmgren:

... from React Native.

Mazen Chami:

Mm-hmm. They've also deprecated a bunch of libraries. I'm probably skipping ahead here in the article, but it's pretty much the same. They've deprecated a bunch and renamed and removed some. So, if you're using some of these, you might have to take a look at them. Some of the libraries that have been deprecated are Expo Ads Admob, Analytics Amplitude, Ads Facebook, Facebook, Google Sign-In, Expo Segment, so be careful if you're using those. I know one of them, Expo App Loading, was deprecated and moved in favor of Expo Splashscreen.

Jamon Holmgren:

Yeah. And it looks like also in some cases, the React Native versions, the vendor supported ones, are good enough and they work with Expo to where Expo doesn't need to provide their own version of it.

Mazen Chami:

Mm-hmm. Yeah. They've also dropped SDK 41 in favor of 42. We mentioned that a little bit earlier, and then no 12 support has been dropped. So, that's something to watch out for.

Jamon Holmgren:

Yeah. I know that we have at least one project that's on 42, so that's going to need to be updated. By the way, they're not using Expo manage, but they're using the Expo package itself, so that's going to have to be updated. This has not dropped yet, but iOS 12 support will be dropped in 47, so I assume in about a year or so.

Robin Heinze:

Wow. We're already dropping iOS 12.

Jamon Holmgren:

Yeah. Things keep moving.

Robin Heinze:

Yeah. Okay.

Jamon Holmgren:

Hey, that's why we have a job as consultants.

Robin Heinze:

That's true.

Jamon Holmgren:

So, keep it up everybody. Keep breaking backwards compatibility. It just keeps us rolling here.

Robin Heinze:

There's also updates to Expo CLI.

Jamon Holmgren:

Okay.

Robin Heinze:

SDK 45 includes a beta release of the new version, local Expo CLI, which is smaller.

Jamon Holmgren:

This is a trend.

Robin Heinze:

Mm-hmm.

Jamon Holmgren:

This is a trend. Moving away from the global CLIs toward more of an internal CLI.

Mazen Chami:

I don't think in the past year I've used a global CLI.

Jamon Holmgren:

Yeah.

Mazen Chami:

I feel like everything is now on NPX.

Robin Heinze:

Mm-hmm.

Mazen Chami:

And it makes it easier. I feel like it's cleaner because it'll ask you do you want to install it, and you can say yes or no. If you say yes, it does the cleanup afterwards where it's not even installed technically.

Robin Heinze:

What happens if you say no?

Mazen Chami:

I believe it can continue.

Robin Heinze:

I've always said yes, because I thought you had to say yes in order for it to run.

Mazen Chami:

That's a very good-

Robin Heinze:

And then it would get rid of it.

Mazen Chami:

Yeah.

Jamon Holmgren:

I think it might actually just quit.

Mazen Chami:

It might quit.

Robin Heinze:

Right. I think it just says like, "Okay. No."

Mazen Chami:

Yeah.

Robin Heinze:

"You're not giving me permission, so I can't."

Mazen Chami:

Yeah. I've always said yes, knowing it removes it.

Jamon Holmgren:

It does cache it, but, yeah. NPX is awesome, and I've been using it for Ignite CLI for a long time, like "npx ignite-cli something". The other thing is when I run the React Native CLI, if I'm in a project and I need to run it, I run "yarn reactnative", and that will use the local node modules version of it.

Robin Heinze:

So, there's a version of the CLI in your node module?

Jamon Holmgren:

Yeah. So when you run "yarn reactnative", regardless of whether it's in your scripts or not-

Robin Heinze:

Interesting.

Jamon Holmgren:

... it will actually go find that and then run it.

Robin Heinze:

I've always... I've been using NPX for projects, but I didn't know that. Maybe that's not a good idea.

Jamon Holmgren:

NPX might.

Mazen Chami:

I just ran a test on it. If you did say no, it would cancel. So-

Jamon Holmgren:

Okay. It does cancel. Okay.

Mazen Chami:

... you need yes, yeah.

Robin Heinze:

Yeah. I know I've been running "npx reactnative", like "run ios""run android", for some projects.

Jamon Holmgren:

So NPX, I just looked it up, NPX does first look in your node modules.

Robin Heinze:

Okay.

Jamon Holmgren:

So, that'd be the same as using Yarn and then whatever.

Robin Heinze:

Okay.

Jamon Holmgren:

And then, secondly, it'll look globally. If it exists globally, it'll just use the version that's there. And if it doesn't find it either place, then it will install it temporarily and run it.

Robin Heinze:

So, if you're using NPX and you want it to just use the latest, you just have to make sure that you've uninstalled any global versions, right?

Jamon Holmgren:

Yeah.

Mazen Chami:

Mm-hmm.

Jamon Holmgren:

And also, and I've run into this, sometimes clear the cache.

Robin Heinze:

Yes.

Jamon Holmgren:

NPX has a cache that you have to sometimes clear.

Robin Heinze:

Caching.

Jamon Holmgren:

But if you're using "npx expo", you need to change it to "npx expo-cli".

Robin Heinze:

Mm-hmm.

Jamon Holmgren:

Basically what they're saying is if you're using that right now, change it to "npx expo-cli"; otherwise, you will probably accidentally invoke the new local CLI. Later, when you use "npx expo"when it's out of beta and stuff, it'll use the local one. So, just keep that in mind. That will eventually be, I assume, the proper way to run Expo CLI is "npx expo" or "yarn expo" within your project, and then it'll use node modules first.

Robin Heinze:

NPX definitely seems like the way of the future.

Jamon Holmgren:

Yeah.

Mazen Chami:

Yeah.

Jamon Holmgren:

By the way, I've noticed that there's a few people who have NPX then their name. So, I don't know, if you were to say "npx jamonholmgren", and it puts an output on your screen of-

Robin Heinze:

What? Like a resume or something?

Jamon Holmgren:

Like a resume or a bio or something.

Robin Heinze:

Oh, my gosh.

Jamon Holmgren:

It's kind of cool. It's a little... I mean, you're literally downloading untested unreviewed code and running it as yourself on your shell. I don't think I really recommend this. I should almost do a Jamon Holmgren package and then-

Robin Heinze:

It's a cool party trick, but it's-

Jamon Holmgren:

Yeah, don't do this.

Robin Heinze:

Maybe don't do that.

Jamon Holmgren:

Yeah.

Mazen Chami:

And if someone tells you to do NPX and their name, you're probably asking for trouble.

Robin Heinze:

Don't run things that you don't know what they are.

Jamon Holmgren:

What I'll do is I'll roll up all of your environment variables and then display them on the screen.

Robin Heinze:

Oh, my God.

Jamon Holmgren:

And say, "I could send these to myself if I wanted to, but I'm not going to because I'm a good guy."

Mazen Chami:

The next one. There's an update to EAS, Expo's update service. This now replaces Expo updates. So, it's their new updating feature to build and submit your apps. You can also find this in the Expo Go app.

Robin Heinze:

It's over-the-air updates, right?

Mazen Chami:

Mm-hmm.

Robin Heinze:

Like Code Push, right?

Mazen Chami:

Yeah.

Jamon Holmgren:

So, I've been using Expo updates, which if I want to publish an update to my app, I just say "yarn expo publish", and then it rolls up a new bundle, sends it out, and then you can, in your app, just check for that, and it will update automatically. It's pretty cool. But this looks like it's tying it into the EAS build system. I don't know if I'm going to be switching from Expo updates right away, but I am already using EAS for building my app when I do need to publish a new version, full version. So, it's a natural step for me to switch over from Expo updates to EAS update, so I will probably eventually be doing that. And I assume that it's going to be going that direction.

Mazen Chami:

You can also use EAS update with a bare React Native project to help you with all that. So, that's also a cool feature if you want to leverage this aspect of Expo.

Jamon Holmgren:

And the last thing that we are going to touch on in this Expo SDK 45 update is that EAS now has Xcode 13.3. So, it has a new image that you can build with that has Xcode 13.3, which is the default image that is used if you're using SDK 45. And there's some improvements in the EAS CLI. So, it'll actually see progress in the build queue. Right now EAS CLI, when I run "eas build" or whatever, it will say, "We're waiting for the build to finish, and you can go here to see progress," and then you can link over to it, but they're actually adding that into the CLI so you can see the progress right in your terminal. So, that's pretty cool.

Jamon Holmgren:

And then there's also a few other things that they're looking at. For example, app extensions and some other things just to enhance the EAS build stuff that you can do. There's also some new build properties you can do, like compile SDK version and deployment target. So, you can set some more build configurations in your configuration.

Jamon Holmgren:

So, yeah, just overall it looks like it's moving forward. SDK 45 looks like a pretty good release. Nice work on this Expo people. You can see all the rest of the... There's more. We didn't touch on everything, but you can go check it out. We'll link to the blog post in our show notes.

Robin Heinze:

Definitely. Definitely read through that if you're about to upgrade your Expo SDK.

Jamon Holmgren:

Yeah.

Robin Heinze:

There's also links to the full change log, which has even more deprecations and additions and removals. So, yeah, definitely read through that.

Jamon Holmgren:

Cool. And we will, probably by the time this episode comes out, Ignite should be updated to use the latest Expo SDK if you're passing in the --expo option. So, look for that update as well. And I think that pretty much does it for this episode.

Jamon Holmgren:

If you'd like to nerd out more about React Native, check out my Twitch stream @rn.live. I have a new website there. You can also join our Slack community, community.infinite.red. We have over 2000 React Native developers, and there are a lot of Expo developers as well. You can also check out the new React Native Twitter community. If you go to rntwitter.infinite.red.

Jamon Holmgren:

Where can people find you online, Robin?

Robin Heinze:

I'm @robin_heinze with an 'e' at the end.

Jamon Holmgren:

Mazen?

Mazen Chami:

I'm @mazenchami.

Jamon Holmgren:

And you can find me: @jamonholmgren. 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.

Jamon Holmgren:

Thanks to our sponsor, Infinite Red. Check us out at infinite.red/reactnative. A special thanks to all of you listening today. Make sure to subscribe on your favorite podcasting platform. We are React Native Radio, and we'll see you all next time.

Robin Heinze:

Bye.