Submit your Production Build to the Apple App Store and install it via TestFlight.
When submitting a build to Apple with EAS Submit (or otherwise), it will first get added to TestFlight which is essentially a pre-prod environment for Apple. This will allow you to install and share the actual production build to testers before releasing it to users.
App names on the Apple App Store must be globally unique. So if you've chosen a name for your app that is already taken - like Plants - you will have to choose a different name for the App Store Listing page. Note that this is only the case for the app name on the App Store listing page, and you can still use your preferred name elsewhere.
TestFlight Internal Testing - as soon as you upload your build to App Store Connect and it finished processing, it is available for internal testing. You can add users to the internal testing group by email, and the users must be registered on your Apple Developer account.
TestFlight External Testing - this is a separate testing group that allows you to share the build with anyone either by sending them an email invite or using an invite URL. Before you can share the build, you must first submit a build for external testing and wait for it to be approved by Apple, which usually takes a couple of hours.
Release - in order for the build to actually show up on the Apple App Store, you will need to create a Release on App Store connect and submit it for review. This review usually takes about a day.
๐ TestFlight
๐ EAS Submit Docs
[00:00] At this point, you should have a completed app store build. Open your terminal and run eas submit dashp ios. We'll choose select a build from EAS and you can open your project in EIS and double check that the build ID is what you're expecting to [00:19] submit. Now you'll get prompted to log in to your App Store account. I'm actually getting an error here and the reason for the error is that I've called my app Plants, but perhaps unsurprisingly there is already an app on the Apple App Store that is called plants and app names actually have to be globally unique. So to fix this, [00:39] open your app JSON and rename your app. Now let's go back to the terminal and run EAS submit again. We'll select a build from EAS, same build as before. Log in to my Apple ID. You can see here that my new name was unique and we'll say yes to reusing the App Store connect API key and our [00:59] submission is in progress. Let's follow the link to expert.dev where we can see the logs from our submission. Now if you log in to your Apple developer account and go to apps, you should be able to see your newly created app here in App Store Connect. Let's click into it and open test [01:19] flight. And this is where your build is going to show up. At this point, Apple is still processing the app bundle. It's common for this to take quite a few minutes. While we wait, just note on the app name. So this field here under app information is the name that needs to be globally unique. [01:39] The reason we got this error earlier is that EIS submit was reading the name from here and tried to create this app for us. So I have to change the name to something unique in order for the app to be able to be created. This is the app name that is going to be shown to users on the app store but it doesn't necessarily have to be the same as your app [01:59] name here. So whereas this needs to be globally unique in Apple, this does not. So now that EIS submit has created the app which only needs to happen once, I can rename my app back to plants. So that the app name here is plants but here remains globally unique as per [02:19] Apple's regulations. Let's go back to our builds page and refresh. It took about 5 minutes for my app to fully show up here. Apple will make you answer this question about encryption. In our case we are not using any special encryption algorithms. If you are, you will get prompted to submit some documents if you want to [02:39] publish your app in the US or France. To prevent us from having to fill this in every time let's open the docs for the app JSON and scroll down to iOS and find config and here we have a field called users non exempt encryption. So in our app JSON under iOS, let's add config [03:00] and let's set users non exempt encryption to false. Now the next app store build we do will no longer prompt us for this question. Open up app store connect again and under internal testing, create a test group and hit create. Now under testers, you can add only the [03:20] people who are added as users to your app store connect account. So you should be able to select yourself here. Now your status will be invited and you should have received an email. Check your inbox on your phone. You should have received an email like this inviting you to view your app in test flight. Let's click view in test flight and accept the invite [03:40] and install the app. You might get this error if, like me, you use the same phone to install the internal distribution build. And Apple won't allow you to have 2 apps with the same app ID. Watch out for another lesson later on for how to get around this. But for now, I'm going to cancel, delete the internal [03:59] distribution build, go back to TestFlight, and install the app. And let's open it. And we've installed our app via test flight. This light build will stand out on your phone because they'll have the yellow dot to the left of the app name. Now if I refresh my page, it has updated [04:19] to show I have installed this app and what device I'm using. If you want people external to your App Store account to test your app you'll have to set up an external testing group. So press add. I'll call the group external testers and hit create. Now you'll have to explicitly add a build here. All the bills that [04:39] are valid will show up on this list and let's hit next. You also need to fill out some test information about your app and this is a space for you to provide an update on what's changed on this version on the app and what you should be testing. In our case, I'm going to write initial submission and here we're gonna have to submit it for review. [04:59] Now this review takes somewhere around half a day to a day and a half and it's not as thorough as a proper App Store review but it is actually properly reviewed by Apple. I'm going to show you another app that I have Just to show you what this page looks like once your app has been approved for external testing. You'll be able [05:19] to add testers here via email or you can also enable a public link which you can set an optional limit to. Meaning that anyone using this link will get invited to test your app on test light. Every time you want to do an update for external testers, you will have to go through this approval process. Finally, when you're ready to submit your [05:39] app to the real app store, you will have to prepare your submission here. This includes adding app screenshots. You can reference this guide on store assets to get an idea for the app store asset requirements. You'll also need to add some text, description, keywords, copyrights [05:59] and most importantly you'll want to select an app build you want to submit. This information here is needed if your app requires sign in. When you submit an app for review the app will have a team of people who actually download your app, open it up and try to use it. So if your app requires sign in and you haven't provided valid credentials, it will get instantly rejected. And finally, the [06:19] app store review can take anywhere between a day to half a week. And you have an option here to either manually release the version. Meaning that once the app is reviewed you'll have to come in here and absolutely hit release before it gets released or you can choose to have it automatically released either as soon as it was reviewed [06:39] or after a specified time.
I'm wondering about runtimeVersion. I have autoIncrement set to true, but I still have to increment runtimeVersion in app.json to get my app into TestFlight. Is that correct, I have to increment the runtimeVersion every time before I build and submit?