React Native Radio

RNR 190 - Tips and Tricks for the App Store and Play Store

Episode Summary

Adhithi, Robin, and Jamon talk about getting your app through the App Store and Play Store review process and actually onto people’s phones. Plus, Jamon tells about the time he had to cross a river on a boat to deliver software.

Episode Notes

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. Weird bug: https://github.com/react-native-community/rn-diff-purge
  2. Expedited App Review:  https://developer.apple.com/contact/app-store/?topic=expedite
  3. Fastlane: https://fastlane.tools/
  4. IR Open Source repo: https://github.com/infinitered/open-source/blob/master/Continuous-Deployment-Setup-React-Native.md
  5. Visual Studio App Center: https://appcenter.ms/
  6. Expo over the air updates: https://docs.expo.io/workflow/publishing/
  7. App Store Review Guidelines: https://developer.apple.com/app-store/review/guidelines/
  8. AppStoreReviewTimes: https://appreviewtimes.com/
  9. Jarvis: https://app.jarvisdev.tools/

Connect With Us!

  1. React Native Radio: @ReactNativeRdio
  2. Adhithi - @adhithiravi
  3. Jamon - @jamonholmgren
  4. Robin - @robin_heinze

Episode Transcription

Jamon Holmgren:

Hey everyone. Welcome to the React Native Radio Podcast, where we explore React Native together. I'm your host, Jamon Holmgren. I am joined by my two magnificent co-hosts, Robin and Adhithi. Harris is not here today, although he is still magnificent. How are you doing today, Robin?

 

Robin Heinze:

I'm doing great, Jamon.

 

Jamon Holmgren:

Awesome. Adhithi, how are you doing?

 

Adhithi Ravichandran:

I'm doing well, just watching snow.

 

Jamon Holmgren:

You have snow?

 

Robin Heinze:

Oh man, I'm jealous now.

 

Adhithi Ravichandran:

It's been snowing here since morning and apparently there's going to be a blizzard and a snow storm.

 

Robin Heinze:

Okay. Maybe not so jealous anymore.

 

Adhithi Ravichandran:

All kinds of things happening in Kansas City.

 

Robin Heinze:

I'll stick with our rain.

 

Jamon Holmgren:

Yeah. Robin and I most likely have the same weather since we're in the same ... We're both in the Willamette Valley and it's currently raining. Yeah. It's probably 45 degrees.

 

Robin Heinze:

I think Portland is only topped in number of days of rain by Seattle, I think.

 

Jamon Holmgren:

Seattle's just got to be better at everything, right? They got to be a little bigger. They got to have more rain, more depressed people. I mean-

 

Robin Heinze:

More water ferry boats.

 

Jamon Holmgren:

We have a river though. We have a cool river.

 

Robin Heinze:

We do. They have a whole sound though.

 

Jamon Holmgren:

Yeah.

 

Adhithi Ravichandran:

It reminds me of an episode in Portlandia where they wait for the one sunny day and they're just waiting to go out and then it starts raining.

 

Jamon Holmgren:

That hits a little too close to home. I haven't watched that show for that reason.

 

Adhithi Ravichandran:

Oh, you haven't?

 

Jamon Holmgren:

No. I feel like everybody outside of Portland has watched the show, but not as many in Portland.

 

Robin Heinze:

It's a little too close to home.

 

Adhithi Ravichandran:

It's pretty funny.

 

Jamon Holmgren:

Let's get started with our episode, which is by the way, sponsored by Infinite Red. We are a premier React Native design and development agency, located fully remote in the USA. We have years of React Native experience and deep roots in the React Native community. We host Chain React, which unfortunately was canceled last year. A little sneak peek for people who are tuning in to our podcast, it's probably going to be canceled this year as well, for reasons which we will not talk about in this particular episode.

 

Jamon Holmgren:

We also publish the React Native newsletter to over 12,000 subscribers actually. We are the best choice for your next React Native app. Hit us up hello@infinitered or infinite.red/reactnative. I have a little addition to my spiel, if that's okay. I'm trying to keep it a little shorter for that reason. For the very first time, actually ... I guess one of the big things with Infinite Red is when we started it, we weren't really interested in making this huge consultancy with tons and tons of like 150/200 people.

 

Jamon Holmgren:

We're about 25 people right now but we are in a position where we do want to grow a little bit. What does that mean for our audience here? Why am I talking about this? This isn't Jamon's business podcast. This is React Native Radio. That's because we are going to be hiring React Native engineers, specifically senior-level React Native engineers. If you are a senior-level React Native engineer, located in the U.S. or Canada, that's all that we're set up to handle right now.

 

Jamon Holmgren:

We are fully remote. You can live anywhere in the U.S. or Canada, we are really well set up for that. If you are in the U.S. or Canada, just go to careers.infinite.red, and fill out the form there and come work with us. There are some fantastic engineers. I might even say magnificent engineers, including Robin, who is with me on this podcast. I think it's a great opportunity for people in the audience to get a chance to potentially work with us.

 

Jamon Holmgren:

We know there's a lot of talent out there in the React Native world. Come check us out and fill out the form.

 

Robin Heinze:

Jamon is biased so I'll make sure to say that it's a fantastic place to work.

 

Jamon Holmgren:

Thanks Robin.

 

Adhithi Ravichandran:

Yay.

 

Jamon Holmgren:

Adhithi can attest that I did not hold a gun to her head when Robin said that.

 

Adhithi Ravichandran:

No. We're fully remote, so that didn't happen. Yeah. If Harris was here, he could have vouched for you guys more too.

 

Jamon Holmgren:

That's true. Harris has worked with us in the past and we love Harris at Infinite Red. Hopefully he likes us too. Anyway, exciting news. If you have any questions about that as well, you can hit me up on Twitter @jamonholmgren. All right. Let's get into our topic for today. Today, we are talking about tips and tricks for the App Store and the Play Store. This is an interesting topic because it's something that isn't ... It doesn't impact your day to day necessarily.

 

Jamon Holmgren:

It's not something that every day you're going to be working on. In fact, I usually look at it as like you have just the right amount of time . As a consultancy, you have just the right amount of time between projects to forget everything you knew about launching an app when you finished your last project. It's something that I feel like we continually relearn over and over and over, but it's a very necessary one because if you don't release your app, then nobody gets to see it.

 

Robin Heinze:

Very true. It's one of those things that you just buckle down and figure out. It's not the most fun part of React Native development, but it's definitely necessary. It's one of those things that unites us with the Native developers of the world. I mean, every iOS developer, whether they're React Native or Objective-C or Swift has probably gone through the App Store and same with the Google Play Store. Yeah.

 

Adhithi Ravichandran:

Not the most fun thing to do, but we have to do it.

 

Jamon Holmgren:

I've released apps when we did Native. I remember the process being painful and I remember going through the review process and trying to get it by Apple.

 

Robin Heinze:

Is this the part of the podcast where Jamon talks about the good old days? Where it was uphill both ways?

 

Jamon Holmgren:

Oh boy.

 

Adhithi Ravichandran:

Back in the 90s, what happened with apps?

 

Jamon Holmgren:

Back in the 1990s, what we would do is we would take our three and a half inch floppy disks. We would insert them into our computers and shut the little lever. No. I never distributed anything back then. It was all for my own benefit. That is not true, actually. That is not true. I did load QBasic games when I was a teenager onto a three and a half inch floppy, I kid you not, and take it to my cousin's house over on an island.

 

Jamon Holmgren:

He lived on an island in the middle of the Columbia River, then plug it into his computer, which was slightly faster than mine.

 

Robin Heinze:

Wait, did he really live on an island in the middle of the river?

 

Jamon Holmgren:

Yeah. Still lives actually. Yeah. It's an island in ... If you're familiar with the Pacific Northwest, it's between Longview and Astoria, basically the stretch of Red River. You know how Oregon has that little bump on the top left? It's that top stretch of the bump. It's in the middle of that area right there.

 

Adhithi Ravichandran:

Wow.

 

Robin Heinze:

You literally carried a floppy disk across a river to an island?

 

Jamon Holmgren:

Yes, I did. On a boat. Not even kidding you.

 

Robin Heinze:

By a little row boat?

 

Jamon Holmgren:

It was a ferry. It was a ferry. When I'm saying ferry, you're thinking like Puget Sound ferry. You're thinking these “going to Vancouver Island ferries.” No, no. This is the little island ... I don't know. I better preserve his privacy a little bit, but the little island, it's a few miles across. It's not tiny. There are, I don't know, maybe a thousand people that live on it, something like that. Maybe not even that, a few hundred.

 

Jamon Holmgren:

It was mostly at that time dairy farms and stuff like that. His dad and mom lived right on the beach and he actually bought a piece and is living there now with his wife, my cousin. I would bring that on the ferry and we would plug it in and then load up QBasic on his machine and run my games on there. When all of my QBasic games were lost, I actually asked him like, "Do you still have that old computer?" He said, "Yes, I actually do."

 

Jamon Holmgren:

Just about two weeks ago, he delivered that computer to me and I was so excited. I was like, "Maybe I can actually get some of my old games back." Because it would actually have the source code too because that's how I distributed. I just copied the file. Unfortunately, the hard drive was missing of the computer. I have a 486 computer with no hard drive. That's unfortunate, but, oh well.

 

Adhithi Ravichandran:

Well, this story is better than I thought.

 

Robin Heinze:

I was like, "That was a cool story, Jamon."

 

Adhithi Ravichandran:

Yeah.

 

Robin Heinze:

I'm not sure what it has to do with the App Store, but...

 

Jamon Holmgren:

Well, yeah. There is no approval process there. I had this one game called Attack, which you would ... Me and my brother and my cousin and my other cousin, we would all be on the same keyboard, okay? It was a very simple game. You have left, right and shoot. You would be driving these tanks around the screen. Left and right would turn the tank and the middle button would shoot. You're just trying to shoot each other, right? It's just like a little tank war happening.

 

Jamon Holmgren:

The problem was though, in those old days, the keyboard would lock up if you had too many keys pressed at the same time and everybody would have to let go, but everybody's hammering the keyboard trying to shoot. We would yell, "Keys, keys." And everybody would have to take their hands off the keyboards and then go back and start playing again. That was a limitation we had.

 

Robin Heinze:

It's like at the hospital when they do the defibrillator, "Clear."

 

Jamon Holmgren:

Clear.

 

Adhithi Ravichandran:

Clear. Yeah.

 

Jamon Holmgren:

Oh, I've got so many stories. Anyway-

 

Robin Heinze:

Anyway.

 

Jamon Holmgren:

... we can move along. That's not how we do things these days very often anyway.

 

Robin Heinze:

Let's talk about how we do App Store releases now in modern times.

 

Jamon Holmgren:

Yeah. How do we do that? I'm not the person to ask normally because it's been a while since I've been a part of that process.

 

Robin Heinze:

Usually, at least at Infinite Red and I think for a lot of React Native projects, it starts with Fastlane, which is a tool that automates the build process and the uploading of your app binary to the App Store or the Play Store.

 

Jamon Holmgren:

Is this a React Native specific thing or is it a Native tool as well?

 

Adhithi Ravichandran:

I think you can use Fastlane outside of React Native if you're doing iOS and Android builds. If you haven't checked out Fastlane, please do because it saves tons and tons of hours just trying to deal with all that build set up.

 

Jamon Holmgren:

I'm going to their homepage, fastlane.tools, great domain, by the way. It actually puts front and center, "Developer hours saved, 26 million."

 

Adhithi Ravichandran:

Wow.

 

Robin Heinze:

It actually tells you every time you run it, it tells you how much time you saved.

 

Adhithi Ravichandran:

Oh, okay. Each time it saves an hour. Is that what it is? Yeah. Yeah. We've been using Fastlane for, I guess, three or four years now and it's really good.

 

Jamon Holmgren:

What does it do to save you an hour?

 

Adhithi Ravichandran:

If you're a mobile app developer, there's a ton of processes you have to follow to release iOS and Android applications. The primary goal of Fastlane is to just automate that. When you have Fastlane set up pretty much any developer on your team can have it set up and release it. The idea is you don't have this one person who's doing the release, instead, any developer could do it. It automates things like capturing screenshots, which we need to have for our apps on iOS and Android stores.

 

Adhithi Ravichandran:

It also automates things like publishing new releases, automates code signing, and it updates the versions and submits that. It's really helpful in saving all your time and code signing, screenshots and all of that.

 

Jamon Holmgren:

When are they going to add automating writing the code of the app too?

 

Adhithi Ravichandran:

Soon.

 

Jamon Holmgren:

Okay.

 

Adhithi Ravichandran:

Then we lose all our jobs.

 

Jamon Holmgren:

That does sound pretty useful. We use it in Infinite Red. I know that.

 

Robin Heinze:

Yeah.

 

Adhithi Ravichandran:

Okay.

 

Robin Heinze:

Every project we use Fastlane. Yeah. Like Adhithi said, it takes a bunch of little detailed things that you'd have to do that are pretty much the same on every project and boils them down into a few commands. You can look in the Fastlane documentation for the options that you pass to those commands and then just run it. It just works, #justworks.

 

Adhithi Ravichandran:

One thing we heavily use it for is also beta deployments. This doesn't just help with prod deployments to the App Store, but you can use it for testing as well. If you have like 20/30 testers and each of them can get their own beta version of the app, Fastlane can automate that as well.

 

Robin Heinze:

Yeah. We use it pretty heavily for that as well. There's all sorts of different plugins for Fastlane to help with that kind of thing. We have one that we use that will put a different banner across your app icon for alpha releases versus beta. It'll put the version. You can put all sorts of info so that the tester knows exactly what app they're testing or what version of the app they're testing. Really useful things like that. There's tons of plugins.

 

Adhithi Ravichandran:

We use TestFlight for iOS and we use Crashlytics. What do you use for beta deployments?

 

Robin Heinze:

We use TestFlight for iOS and we just go through the Play Store for Android betas.

 

Adhithi Ravichandran:

Okay.

 

Robin Heinze:

Yeah. For anybody who doesn't know, iOS uses an app called TestFlight, which lets you release beta builds to a select group of testers. They just get it straight to their phone and they can leave feedback about what they found. You can leave notes about what they should be testing. It's really, really slick. Then on Android, you have several options. You can do closed track alpha builds, I think, which are basically you just specify exactly who will get it and then they can download it.

 

Robin Heinze:

Then you can do open track betas, which will upload to the Play Store, but you have to have a certain URL to download it, but it integrates with the Play Store so that if they have the production version of the app, it'll automatically switch to the beta version.

 

Jamon Holmgren:

I think automation is one of those things that when you don't have it, you don't really notice how much work you're doing. Once you have tasted the freedom of just pushing a build and then it does everything for you, that is something that you don't want to go back from.

 

Adhithi Ravichandran:

Right. Especially all of these are just manual useless tasks anyway, so you don't want to waste your developer's time or anybody's time to do that. Cool thing, we were talking about TestFlight, is I just saw on their webpage, it says you can invite up to 10,000 testers on TestFlight. That's pretty awesome.

 

Robin Heinze:

Yeah. There's all sorts of different scales. Huge companies like Facebook or something would probably want a lot more testers testing their beta releases than some of our client projects where there's like 10.

 

Adhithi Ravichandran:

Yeah. We usually have less than 20/30 testers. Yeah.

 

Jamon Holmgren:

That is definitely something where you want to reduce the friction as much as possible because often you don't get enough testing. You really need more, so reducing the friction is extremely important. Automating that part of it is really key I think.

 

Robin Heinze:

After you're done releasing betas and getting feedback and you're ready to release your production app, Fastlane also makes it pretty easy to do that. It's the same process. You just tell it to do a release build instead of a debug build and it'll upload it to the store and you can release it manually from there.

 

Adhithi Ravichandran:

An alternative to something like Fastlane, I think is App Center. It's by Microsoft. Even the CodePush feature got integrated into App Center now. A lot of people are using App Center these days too. It, I think, pretty much does the same thing as Fastlane. I haven't used it, but you could use it for React Native, native iOS, native Android, and even Windows apps apparently.

 

Jamon Holmgren:

Yeah. They've done the typical Microsoft thing where they've branded it with something else. It's Visual Studio App Center. Everything used to be Windows. It might've been Windows App Center and then Microsoft App Center. Anyway, Visual Studio, Microsoft Visual Studio App Center. That's at appcenter.ms. That is something we have used on a few projects as well. I don't know, Robin, if you've actually been on a project that's been using App Center or not.

 

Robin Heinze:

I have. I have.

 

Jamon Holmgren:

Okay.

 

Robin Heinze:

Yeah. We didn't use it for builds. We used Fastlane for the builds, but we used App Center for crash reporting.

 

Jamon Holmgren:

Okay. You can mix and match them then?

 

Robin Heinze:

Yeah. We use it for crash reporting analytics, that type of thing and we've used CodePush as well, which for those of you who don't know, CodePush is an App Center feature that lets you push over-the-air updates to your app without having to go through additional app review.

 

Jamon Holmgren:

That's just a React Native feature though, right?

 

Robin Heinze:

Right. It updates the JavaScript bundle.

 

Jamon Holmgren:

Yeah. It's taking the JavaScript bundle, and if the Native code hasn't changed, then it can simply download the new file because that's all that the bundle is, is a file. I mean, just to put it in terms that our audience will understand, think of it as loading a QBasic file onto a three and a half inch floppy and bringing it across the water to your cousin's house. That's basically what's happening, but it's doing it over the air.

 

Robin Heinze:

To be honest, I've never actually totally understood how that happens with CodePush, because I always thought that the JavaScript bundle was inside the app binary file.

 

Jamon Holmgren:

The thing about that is the .ipa and .apk are really just like zip files. They're not really like a binary file. I mean, they are binary, but it's like, it's binary like a zip file is, so you can bring different files in and out of it. I'm actually not totally certain how that is expressed when it's in the actual ... Does it download and then unzip it?

 

Jamon Holmgren:

I don't know. I guess I should probably look into that. There are people who know in our audience who are currently shouting at their-

 

Robin Heinze:

Radios.

 

Jamon Holmgren:

Why would they be shouting? They're not shouting at the radio now. What are they shouting at?

 

Robin Heinze:

Shout at their smart speaker.

 

Jamon Holmgren:

Their smart speaker.

 

Robin Heinze:

Headphones.

 

Jamon Holmgren:

They know what it is and we don't.

 

Adhithi Ravichandran:

Apparently, the apps can query for updates using the client SDK. Whenever we push your updates, yeah, to the cloud, then it can query for it and get it on the user's device, I believe.

 

Robin Heinze:

Yeah. It may just be that if you have CodePush integrated into your app, it makes it so that it will know how to grab the bundle from somewhere.

 

Jamon Holmgren:

I think so. I think that's how that works. There is a client piece of this that manages that part of it.

 

Adhithi Ravichandran:

If you're using Expo, it already has it built in. You don't even need to manually have CodePush installed or do anything with it. You can automatically update your app.

 

Jamon Holmgren:

Expo uses a different mechanism. It's very similar, but they're not using Microsoft Windows Azure Visual Studio App Center. I don't know if I got that right. They're not using that service, but they're using something very similar, and what's really cool about the Expo one, is you can use it even without Expo.

 

Adhithi Ravichandran:

I didn't know that, huh.

 

Robin Heinze:

Spoiler alert, make sure to tune in next week where we talked to Brent Vatne about upcoming updates to Expo.

 

Jamon Holmgren:

Absolutely. Nice. Nice job. You should be doing the promos.

 

Robin Heinze:

Definitely not.

 

Jamon Holmgren:

At Infinite Red we have an open source repo that we very brilliantly call just open source. We detail in there how we do continuous development. I guess it's more like the steps to set it up. We did it for ourselves to be honest. It's not really like ... We made it open source, but we don't really promote it a lot. It's mainly for our internal team to refer to. I will link to it in the show notes, but it goes through a lot of these different processes.

 

Jamon Holmgren:

The very first thing is like write tests. Make sure you have some tests because if everything's automated, you need some sort of a gatekeeper.

 

Robin Heinze:

I was going to say with a grain of salt. I don't think that thing has been updated in like two years.

 

Jamon Holmgren:

Let's see. Last commit July of last year. It has something new in it.

 

Robin Heinze:

Okay. Not two years but maybe a bit stale.

 

Jamon Holmgren:

Yeah. Yeah. I mean it is open source obviously so if you notice anything wrong with it, submit a pull request.

 

Robin Heinze:

Pull request. Welcome.

 

Jamon Holmgren:

Yes, please do. There's also an experimental section for GitHub actions. Right now everything's CircleCI, which is a CI service that we use pretty extensively at Infinite Red, but it just gives you a good sense for how to even set up Fastlane and all these different tools.

 

Robin Heinze:

We were successful once, I think it was the Chain React app. We were successful getting Fastlane beta deployments automated via CircleCI. It was not easy. It's a little bit tricky to deal with doing things like certificates and whatnot, and like Xcode builds on a CI machine, but it is possible, which is really slick, so when you want to pull request, your testers will get a beta.

 

Adhithi Ravichandran:

Speaking of Fastlane, I think another interesting thing that App Center gives us that Fastlane doesn't, is all kinds of analytics. You can see your audience grow, you can see who's using it, which country they're at and all of that stuff. You probably don't need Google Analytics if you're already using App Center.

 

Jamon Holmgren:

Yeah. That's a big one.

 

Robin Heinze:

I do know Fastlane has a pretty slick integration with Crashlytics if you're using Firebase Crashlytics for your analytics and crash reporting, you should be able to integrate pretty well with Fastlane.

 

Jamon Holmgren:

It does seem like there are a lot of different tools. I think that's one of the reasons that they built App Center, was to just centralize all of these different tools in one place. I think I polled my React Native engineers at Infinite Red a while back, and I said, "Okay. If you've used App Center and if you've used Fastlane, which do you prefer?" At that time, almost everybody said Fastlane, I think.

 

Jamon Holmgren:

There were a couple who said that they preferred App Center, and of course that may change over time, but that was the general thought, was, "Well, Fastlane is just a little bit easier, a little bit less." I think there were some issues with flakiness with App Center if I remember correctly.

 

Robin Heinze:

Yeah. That was a while ago so they may be resolved now.

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

Let's talk about the stores themselves and once you've done your Fastlane, you've got your build uploaded, what's the actual process like shipping your app?

 

Jamon Holmgren:

Yeah. When I used to do this part of the process, I do remember one of the tough things was getting it past Apple's review committee. You have to provide a demo account. You have to give them some way to log in and try the features of your app. They've gotten even more stringent since then. There are a lot of things that you can't do and that you have to do properly. You have to explain yourself a lot better than you used to.

 

Jamon Holmgren:

I actually had a really bad example where I built something. This was way back in the PhoneGap days when ... Cordova, when I built an app for our client. Unfortunately, they just kept telling us, "Well, the experience isn't good enough, basically. It's not a good enough experience. We don't want this on the App Store." It was very disheartening because it was like, there wasn't a lot we could do. PhoneGap just didn't perform to the level we needed it to.

 

Jamon Holmgren:

We did get it on the Google Play Store because at that time they had almost no standards. That has changed as well, quietly. Now they have a review process too. They're still not as stringent as Apple, but I do remember that being a big problem, where we would continually get these rejections and they were often like seven days apart. You're sitting there waiting for a week and then they'd come back with a very vague like, "Hey, you did something wrong, go fix it." We're like, "What? What do you know?"

 

Robin Heinze:

Yeah. Apple review process is pretty notorious for being, one, really subjective. You can literally get an app rejected or approved without any changes if you get a different reviewer. We've had that happen.

 

Adhithi Ravichandran:

Right. It's random. Yeah.

 

Robin Heinze:

We've had apps that have been approved for many versions in a row and then we'll get rejected for something that was completely untouched in that update. It just depends on your reviewer. They're subjective and they're also very detail-oriented. Make sure you read the terms or the rules for apps. We'll make sure to link those in the show notes, but there's a bunch of rules about what your app can and can't do and can and can't sell.

 

Adhithi Ravichandran:

I think it's on the developer.apple.com. Yeah.

 

Robin Heinze:

The reviewers are very good now about pointing to the specific line item that you violated though.

 

Jamon Holmgren:

Yeah. That's good. They're getting better. They're listening to feedback and that's really helpful. It can still be pretty ... Like we just had a rejection last night, Bryan Sterns, one of our engineers had a rejection. He had just updated to the latest version of Expo on the particular app that we're using and submitted again. They came back and said, "Nope, You still have the same problem." Basically, we're asking for one of the location permissions that they don't let us ask for anymore.

 

Jamon Holmgren:

It seems like an automated rejection and we're not sure where it's coming from. Expo SDK 40 is supposed to take care of this. This is the type of thing where it can be very frustrating to us when it doesn't feel like we know really where this is coming from and we're not using that SDK. I had that same problem happen to me a couple of times.

 

Robin Heinze:

It can also be really frustrating because the cycles can take days. You'll try something and resubmit it and it'll be days later when you get the next rejection and find out it didn't work.

 

Jamon Holmgren:

Yeah. I remember back in the day, we would look at a website called appreviewtimes.com. App Store Review Times. It would actually aggregate data from Twitter. People would post App Store review time four days and then hashtag it. It would actually aggregate all of that data so that you could get some sort of a sense of, how long is it taking for them to turn things around? I used to go there and be like, "Oh right now it's 14 days. Well, I'll have to tell the client that."

 

Robin Heinze:

I don't think it's been 14 days in recent memory.

 

Jamon Holmgren:

They actually put a notice if you go there now, appreviewtimes.com, you'll see that they say, "We don't really do this anymore." Because they've improved their turnaround time.

 

Robin Heinze:

It's usually 24 to 48 hours.

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

I will say, pro tip, if you have a reason that your app needs to be approved ASAP, for example, you're putting on the first North American React Native conference in the United States and you need to make a pretty critical update, but the conference is starting in a few hours. You can request an expedited review. If you have a legitimate reason, they will pretty much turn it around right away.

 

Adhithi Ravichandran:

Another thing to add on there is if you don't have a ton of changes that really need to go through the App Store, you can always utilize the CodePush feature and try to push your code-

 

Robin Heinze:

Also true.

 

Adhithi Ravichandran:

... if you have urgent pushes, which is just in your JavaScript files or styling and things like that.

 

Robin Heinze:

Very good point too. Yeah. That's a great use for CodePush for sure, is getting those time-sensitive updates out.

 

Adhithi Ravichandran:

Let's talk about Google Play. It's always been easier and nicer. We'll almost never discuss things like, "Oh, how long is this going to take?" It's been instant, maybe a day or so, and then it's done. Yeah.

 

Robin Heinze:

I don't think I even noticed when they added the review step. People were talking about like, "Oh, you have to get Play Store reviews now." I was releasing apps and I don't think I ever noticed because it's so fast. The Google Play Store also has an automated review step in place, which checks your app for crashes and various accessibility things, I think and will give you a report.

 

Jamon Holmgren:

That's kind of typical Google, right? They would prefer to have machines do something if they can, instead of humans. Apple, that's a typical Apple thing where they like the human touch.

 

Robin Heinze:

Yeah, they do. They definitely do.

 

Jamon Holmgren:

In this case, I think I prefer the machines.

 

Adhithi Ravichandran:

Absolutely. Because if we're on the end where we're releasing the applications, I prefer Google Play.

 

Robin Heinze:

You don't have to deal with as much certificates and provisioning profiles and all of that. You make your one keystore and then that's it. You don't have to generate certs every time.

 

Adhithi Ravichandran:

If you do lose your keystore, I guess you still need to contact their support team and get a new one, but that's about it.

 

Robin Heinze:

Is that if you have released app to the store with a particular keystore and you lose it or is compromised? Yeah.

 

Adhithi Ravichandran:

Lose it. Yeah.

 

Robin Heinze:

Don't lose your keystore. They actually usually offer to manage it for you, which I think is the smartest option most of the time.

 

Adhithi Ravichandran:

That's true.

 

Jamon Holmgren:

Regarding Expo, we have submitted at least one, maybe two, Expo apps to the App Store. The process is fairly similar. First off, you have to build a standalone app because Expo normally hosts the bundle. You're using the Expo app to access it and stuff, but you want to build a standalone app. Something that has its own binary, its own bundle, everything baked in, like a normal React Native app would be.

 

Jamon Holmgren:

You have a way to build the standalone app and then once you've done that, then they actually provide a CLI utility, expo upload:android, expo upload:iOS. Then that also allows you to ... There's different options to do this. They try to ease that path as much as possible.

 

Robin Heinze:

At the end of the day, you're still going through the App Store review and the Play Store review.

 

Jamon Holmgren:

That's exactly right. You can do it completely manually. You can use their helper. From what I've heard. It does make it a little easier, but we're going to be talking to Brent, as Robin said, in a future episode. Let's definitely stay tuned. I'm sure that he'll have some things to say about that. A friend of mine, Jason Safaiyeh, recently released a tool called Jarvis. Jarvisdev.tools. I haven't tried it yet, so I don't know much about it.

 

Jamon Holmgren:

I would love to have him on the program to talk about what he's doing there, but it is specifically focused on React Native. It really is kind of a Fastlane, App Center style alternative. I think that's really cool that there are React Native focus tools coming out for this problem. In a future episode, maybe we can have Jason on the program and go through what he's doing over there. It's still in beta. It's still a new thing that he's building, but it does look really exciting.

 

Adhithi Ravichandran:

That'd be very cool.

 

Robin Heinze:

When I think Jarvis, I think like a voice assistant. I'm pretty sure that's what Mark Zuckerberg named his personal home automation system.

 

Jamon Holmgren:

I remember Ask Jeeves.

 

Robin Heinze:

Yes.

 

Jamon Holmgren:

That was a little different though.

 

Adhithi Ravichandran:

I remember that.

 

Robin Heinze:

The pre-Google search engine.

 

Jamon Holmgren:

Yeah.

 

Adhithi Ravichandran:

I think I was in sixth grade or something and people were talking about askjeeves.com.

 

Robin Heinze:

Yes. The little butler. Oh.

 

Adhithi Ravichandran:

Yeah.

 

Robin Heinze:

Flashbacks.

 

Jamon Holmgren:

Cool. Anything else? Any other tips or tricks for the App Store, getting through the App Store approval and getting it on people's phones, I guess?

 

Adhithi Ravichandran:

I guess their guideline that they have, which is like a hundred pages. You just need to go [crosstalk 00:32:41] one time, at least the headings and-

 

Robin Heinze:

Make sure you read that. Maybe before you start building your app, make sure your business model is going to pass the guidelines.

 

Jamon Holmgren:

That's a fantastic piece of advice, because there are situations we've had people come to us and say, "Hey, we'd like to build this app." We're like, "Yeah, that sounds great. Apple will never let this through." That is very disappointing to them. I have emailed Apple before and said, "Hey, in concept, does this sound like it might get through the process?" They're usually a little noncommittal about it, but they'll give you sort of or yes or a sort of no.

 

Jamon Holmgren:

That is worth doing. I have gotten people on the phone from the App Store review committee before. That does happen. The one time I was just struggling and struggling and struggling and I finally got someone higher up at Apple to call me and they gave me some useful advice on how to get through. Yeah. That's definitely something that you want to watch is I'm not blatantly ... My whole business model isn't based on something that Apple's not going to let through.

 

Adhithi Ravichandran:

Especially if you have a lot of in-app purchases and notifications and stuff, you want to watch out what the design guidelines and-

 

Robin Heinze:

Notifications, location and payments are some big ones that you want to be careful about.

 

Jamon Holmgren:

Yeah, for sure. Now even things like accessing the mic. That one is a big hot-button thing because people think that apps spy on them when they're not open. Apple's very cognizant of that and they don't want people to think that's the case. I noticed on my iPhone 10, I've got a, I guess now a few years old iPhone 10, but it has a little green light that comes on when the mic's on. That's helpful just to know like, "Hey, my microphone's on or it's not." Well, hopefully this episode was helpful to people.

 

Jamon Holmgren:

There are a few good tips in there. If you have tips or tricks, go ahead and tweet it out to our Twitter handle @ReactNativeRdio and the best ones we will retweet. We'll call that part of it a wrap. Do either of you have a weird bug for this week?

 

Adhithi Ravichandran:

I have a weird issue going on. It's not a bug. I'm doing a massive React Native upgrade so we're going from, I think, somewhere in the late 59, 0.59 to the latest.

 

Jamon Holmgren:

Wow.

 

Adhithi Ravichandran:

It's a different world now.

 

Robin Heinze:

That's a big jump.

 

Adhithi Ravichandran:

It is.

 

Robin Heinze:

The 59 to 60 was a big deal.

 

Adhithi Ravichandran:

Yeah. I'm just doing smaller versions first and then I'm trying to do 62 now and that's where we have all kinds of changes. Like the podfile looks really clean and the Firebase library we were using doesn't even exist anymore. It's gone to a different repository. Just doing fun stuff.

 

Robin Heinze:

We'll have to do an entire episode about React Native upgrades and that fun world.

 

Adhithi Ravichandran:

Yeah.

 

Jamon Holmgren:

Yeah. We should. Are you using React Native diff purge at all?

 

Adhithi Ravichandran:

What's that? I'm using the Upgrade Helper.

 

Jamon Holmgren:

Okay. It's probably the same thing, I think.

 

Adhithi Ravichandran:

The Upgrade Helper is very cool. You just go in there and tell which version you're on and then which version you want to go to, and then it tells you all the files you need to change.

 

Jamon Holmgren:

Yeah. That that's actually ... Yeah. Okay. Totally. That's powered by diff purge. Yeah. You can just choose where I'm coming from and where I'm going. Then are you going version by version or are you just making a big jump?

 

Adhithi Ravichandran:

I'm not doing the big jump, but I'm doing jumping to 62 first and then going into 63 point whatever it is [crosstalk 00:36:30].

 

Jamon Holmgren:

Oh, okay. Okay.

 

Adhithi Ravichandran:

Yeah.

 

Jamon Holmgren:

Interesting.

 

Adhithi Ravichandran:

Not fun.

 

Jamon Holmgren:

Yeah. That's probably its own episode. I like that.

 

Robin Heinze:

Yeah. We could spend a whole episode talking about how to upgrade React Native.

 

Jamon Holmgren:

Cool. Well, thanks a lot to both of you for joining me in this conversation today. As always, thanks to our producer and editor, Todd Werth, our transcript and release coordinator, Jed Bartausky and our social media coordinator, Missy Warren. Thanks to our sponsor, Infinite Red. Check them out at infinite.red/reactnative. If you're interested in working with Infinite Red as a senior React Native developer in the U.S. or Canada, go to careers.infinite.red. A special thanks to all of you listening today.

 

Jamon Holmgren:

We really appreciate you listening to our show here. Make sure to subscribe, tell a friend, if you think that this episode would be helpful to you. Maybe if someone's going through the App Store process right now, have them listen to this episode and come out the other end, hopefully with a few more tips or tricks. If they're more confused, we take no responsibility. See you all next time.

 

Robin Heinze:

Bye.

 

Adhithi Ravichandran:

See ya.