There is nothing more exciting than taking your project which has taken your sleep, sweat, and tears and uploading it to the App Store to be seen by the masses. Let's learn how to submit an app to the App Store.
Congratulations! You've finally made it to the point in your development career when you're ready to show the world what you've done. It's time to change the world with your killer app! Let's learn how to upload it to the App Store and release it to the masses.
First let's begin with a flyover of the provisioning process and I will explain what some new terms and concepts mean.
Provisioning is simply a way of providing something (ie. your app) or making something available to a group of people. The process of making our app available to others via provisioning can cause some headaches. But thankfully Apple has done lots of great work to make this process easier than ever before. The amount of steps needed to get your app on the App Store may seem overwhelming at first, but don't worry – we'll take it step by step.
First, go to developer.apple.com and click 'Account' on the top right (Figure 5.7.1). Log in with your Apple ID and if you haven't already bought an Apple Developer subscription ($99/yr.) now would be the time to do so because what I will show you in this chapter requires you to have a paid Apple Developer account.
Click on 'Certificates, Identifiers, & Profiles' and on the following screen you will see several sections. On the left, there is a menu with the major sections Certificates, Identifiers, Devices, and Provisioning Profiles. Within each section are more specific options that we won't go over until that section is covered in more detail later on in this chapter.
We will now talk about some of the main components inside these sections.
A certificate is basically a security measure that allows you to develop and deploy apps. A certificate is provided by Apple and it links your specific computer to your developer account. Any app that you create on your computer gets signed with your certificate (Figure 5.7.3).
An App ID is a unique identifier that helps to set your app apart from any other app. When you submit your app to the App Store, Apple requires it to have this identifier so that it can be separate from all other apps in it's marketplace.
The App ID we use in Xcode will need to be the same as the one we use in our Apple Developer account when trying to submit it to the App Store. Figure 5.7.4 shows an imaginary App ID "a9R39Fe" being shared by Xcode and an app in an Apple Developer account.
An App ID also informs Apple of what features your app uses (i.e. Push Notifications, Apple Pay, SiriKit, etc.). When you go to create one in your Apple Developer account, you can tick boxes to enable these features. More on that later.
This section is for your test devices. The ones you can register in your Apple Developer account for development purposes. You may be wondering, "Do I need to register my iPhone or iPad to test my own apps?" The answer, thankfully, is now "No" as of Xcode 7. You actually don't even need a paid developer account to test apps on a local device via Lightning cable, but that is beside the point! If you want to build an app over the Internet to many test devices (i.e. beta testing via TestFlight) or via Ad-Hoc, the devices must be registered here.
A provisioning profile has two main types – Development and Distribution.
A Development provisioning profile allows for us to code-sign an app so that it can be installed and tested on various devices via TestFlight or via an Ad-Hoc server. A Distribution provisioning profile allows for an app to be submitted to the App Store.
When we create a provisioning profile, it will take in our app and allow us to either work towards development or towards distribution.
We will create a profile like this in our Apple Developer account. It will pass through the certificate we created for verification and then will be usable by Xcode (Figure 5.7.5). For uploading to the App Store, it works similarly but in reverse. We can use a production provisioning profile to send our project from Xcode through our certificate, then through our provisioning profile, and to Apple.
This section has served as a very general overview of what we can do in our Apple Developer account. In following the sections, we will go into specific details about each section and how it applies to us as a developer.
First, open Xcode if you haven't already and click
Create New Project.
Single View Application. Click
You should see a screen like the one in Figure 5.7.6. Give your project a name like ProvisioningDemo. Below the name field, there are a few drop down menus but for the sake of this chapter, you won't need to change any of them. Click
Next. Choose somewhere to save this project file and click
Create to save it.
We will use this project for the duration of this chapter to help us in installing certificates, provisioning profiles, and submitting to the App Store.
Now that we have a project set up, we need to add a development account via our Apple ID so that we can connect Xcode to our developer account. Go to
Accounts and click the
+ button at the bottom left-hand side of the window.
Add Apple ID... and log in to your Apple ID connected with your Apple Developer account (Figure 5.7.7).
After logging in, you should see your Apple ID show up in the Apple IDs section on the left. If you click on it, you will see your role under that account. Most likely, you will see Admin or Member depending if you're working alone or with a team. As you can see from my account, I am considered a User on my personal account Caleb Stultz, but am a Member for Devslopes, LLC (Figure 5.7.8).
According to Apple's documentation, the roles operate as shown in Figure 5.7.9:
The User role basically means that my personal account is not linked to a paid developer account, but my link to Devslopes, LLC is.
If we go back into our Xcode project settings, we can see that under
Signing there is a new drop-down menu where you can select a development team (Figure 5.7.10):
Let's set up our project to be available to developers on our team or to beta testers with a Development provisioning profile.
First, while in the
Signing settings notice that there is a check box selected which says, "Automatically manage signing".
Beneath it, there is a message – "Xcode will create and update profiles, app IDs, and certificates." This means that Xcode can and will manage everything we need to do in this chapter, but as it can be a bit buggy, we can't always trust that it will work perfectly. You are learning the manual method to provisioning in case the automatic method doesn't work properly.
Now, look up at the Identity section and notice that our app has a field for
Build (Figure 5.7.11). We want to pay attention to the
Bundle Identifier because that is what we will actually paste into our Apple Developer account in a moment so that we can link our app to our Apple Developer account.
Copy the Bundle Identifier from Xcode. We will use it in a moment.
Go to developer.apple.com and click
Account at the top. Sign in to your Apple Developer account if you haven't already.
Certificates, Identifiers, and Profiles just as we did before. Under the Identifiers section, click
App IDs. Then click the
+ sign on the top right. You will see the screen as shown in Figure 5.7.12:
On the following page, we will enter in some critical information about our app. Let's start with the
Name field. Enter in the app name as you'd like it to appear. For our app, we will enter in "Provisioning Demo" (Figure 5.7.13):
We also need to select the
Explicit App ID button under the App ID Suffix section.
This is where you get to paste in that Bundle Identifier you copied from Xcode – get excited!
Next, if you want an app to use any of the services in Figure 5.7.15, you need to tick those boxes. As you can see, I have ticked Push Notifications as that is a commonly used service in mobile apps. Note: You can always edit your App ID later on and add/remove services.
After you've filled out the
Explicit App ID fields and have ticked the boxes for the services that you want, click the
Continue button at the bottom.
The page that follows simply is a confirmation of your choices. Look it over carefully and make sure that you've entered everything as you have planned. If you need to change something, there is an
Edit button at the bottom of the page. Note that Game Center and In-App Purchases are always enabled and ready for use (with the proper configuration) and Push Notifications are shown as configurable by default. If everything is good to go, click
Register to create and save your App ID. 👍
Now that we have a unique identifier set up for our app, we need to create a certificate which will allow us to securely send our app to other developers within our team or deploy it to beta testers.
We need to create what is called a Development certificate. You should see the menu containing the sections Certificates, Identifiers, Devices, and Provisioning Profiles.
Within the Certificates section, click
Development, then click the
+ button in the top right.
Make sure you tick the box iOS App Development. Your screen should look like the screen shown in Figure 5.7.16:
Continue and on the next screen you will see that you need to create a
CSR file. CSR stands for "Certificate Signing Request" and we can create one using an app already on our Mac.
To do so, press
⌘ + Space to use Spotlight Search and search for
Keychain Access. You can also find it by going to
The whole point of creating a development certificate is to link our physical machine to our Apple Developer account, so we need to request that our certificate be signed by the Certificate Authority.
To do this, click
Keychain Access >
Certificate Assistant >
Request a Certificate From a Certificate Authority... (Figure 5.7.17):
On the following screen (Figure 5.7.18), our information has been auto-filled but we need to tick the box entitled
Saved to disk. Ensure that your Apple ID linked with your Apple Developer account is entered in the
User Email Address field then click
Choose a place to save this file (I chose the Desktop), and click
Back in your web browser, click
Continue so that we can upload the file we just created called
Choose File... and select the file from wherever you saved it (Figure 5.7.19).
Continue to finish making your Development certificate.
Go back into
Development and click on the Development certificate you just created. You will see a
Download button (Figure 5.7.20). Click it to download the certificate, then double-click the downloaded file to install it into Xcode.
Now that we have a certificate linking our physical computer to our Apple Developer account, we need to create a provisioning profile so that we can actually send our project to a development test device.
Go back into your Apple Developer account, scroll down to the Provisioning Profiles section, and click on
Next, click the
+ button in the top right (Figure 5.7.21):
iOS App Development and click
Continue. Next, we need to select the App ID we created earlier for our Provisioning Demo project. Select it from the drop-down menu if it isn't selected already (Figure 5.7.22):
Continue and on the following screen select the appropriate development certificate for your device which we made earlier (Figure 5.7.23). Click
Continue to move on.
The following screen (Figure 5.7.24) prompts you to select devices which you want your project to be able to be built to. If you want to register team members devices, you can do that back in the Devices section on the main screen of your Apple Developer account. Select all devices that are there and click
Lastly, we need to give a name to our profile which will be seen in the main menu. I named mine
ProvisioningDemoProfileDev to be specific and clear about the type of profile that it is (Figure 5.7.25):
Continue again and you will be brought to a page where you can download your development provisioning profile. So, click
Download and double-click the file to install it into Xcode.
Now that our profile is installed, we need to check our build settings in Xcode to make sure that it's configured properly for development.
With the ProvisioningDemo project open, navigate to your project's settings and in the menu select
Build Settings, then scroll down and find
Signing (Figure 5.7.26):
Notice that for Debug and Release, the option Don't Code Sign is selected. his may or may not be the case for your project, but what it means is that Xcode can only work with development devices.
You can't submit an app to the App Store without code-signing and we can't even send the build to other developers this way, because code-signing is a way to ensure that our project is being accessed by only those whom we've given access.
It is best practice to select either the generic
iOS Developer profile or our explicit development profile like the one we just created. In Figure 5.7.27 below, I selected
iOS Developer under the Debug menu for development:
A Production certificate and production provisioning profiles are what allow us to submit our app to the App Store for the world to download and enjoy!
To create one, we need to start back at the Apple Developer portal like before. The process to create certificates and provisioning profiles for Production is basically the same as making one for development with a few key differences.
In the Certificates menu, click
Production, then click the
+ sign at the top right to create a new production certificate (Figure 5.7.28):
On the screen that follows, select
App Store and Ad Hoc under the Production category (Figure 5.7.29). This is so we can connect our project to the App Store or to beta testers via TestFlight or an Ad Hoc network later on.
Continue to move on.
Now we need to create a CSR request just like before. If you'd like, you can actually use the same
.certSigningRequest file you saved before.
Continue. On the following screen click
Choose File... and select the same
.certSigningRequest file from earlier.
Continue to upload that file and finish up making our Production certificate.
Now we can download that certificate just like before by clicking on the name of the certificate then the
Download button in the menu
Production like in Figure 5.7.30:
Double-click the downloaded file to install the certificate.
Now that we have a certificate in place, we need to create a provisioning profile for the distribution of our app.
In the Apple Developer portal, scroll down to Provisioning Profile and click
hen click the
+ button to create a new provisioning profile (Figure 5.7.31).
On the page that follows, tick the box App Store under the Distribution section.
Continue (Figure 5.7.32):
Next, select the App ID for the app you want to submit (i.e. ProvisioningDemo) and click
Continue once more.
Select the appropriate iOS Distribution certificate on the next page. You should be able to see the one you just made in the last section (Figure 5.7.33):
Continue and give your profile a name. I named mine ProvisioningDemoDistribution which is specific to our app and describes the type of profile.
Continue one last time and click the
Download button to download your distribution provisioning profile. Double-click the downloaded file to install it.
We are now going to modify the build settings in our Xcode project. Earlier, we set up our project's build settings for Development and now we're going to set it up for Production.
In your Xcode project, navigate back to the project settings and click on
Build Settings, then find the Signing section.
Under the Release section, select
iOS Distribution from both the Release and Any iOS SDK drop-down menus (Figure 5.7.34):
At this point, we have set up Xcode as far as we need to. Let's move on.
To submit our app to the App Store, we must first create an app project on a website called iTunes Connect. This site is linked with your Apple ID already, so we don't need to create a new account or anything.
Go to https://itunesconnect.apple.com in your web browser and log in with your Apple ID. Upon logging in, you should be presented with the following page (Figure 5.7.35):
My Apps, click the
+ sign in the top left-hand side of the window, then click
New App (Figure 5.7.36):
You should see a pop-up appear asking for information regarding this new app. Ensure that the
iOS box is ticked and then look at the text fields beneath it. You must enter the
Bundle ID, and
Name enter the app name that you would like to appear in the App Store. Bear in mind that your app name has the most significance to your app being discovered. This is why when you go to download an app like YouTube, the actual title of the YouTube app at the moment is "YouTube - Watch and Share Videos, Music & Clips".
This is because the YouTube team knows that most people search for those kinds of terms when they are looking for an app like YouTube. It actually has the most weight out of anything else that you do to optimize your app, so use your app name to your advantage.
Choose the Primary Language your app will use.
Bundle ID is the one we made earlier. If you're following this example, it will be called
SKU of an app is a unique identifier which sets your app apart. Think of it like a bar-code for your app. I chose
ProvisioningDemoFunTimes just to have a little fun with it.
After all the required information is entered, click
The screen that follows is where you need to enter in any relevant information about your app (Figure 5.7.37b).
First, ensure that the name is correct and that the Bundle ID matches the one you created earlier. It should, but it's best to be safe here.
Next, you should select a Category for your app.
Click on the
Primary drop down (this one is required) and select the category that best fits your app. If you'd like, select a secondary category as well.
Save at the top to save your progress thus far.
Pricing and Availability on the left-hand side of the window and you will see the following page appear:
Click on the drop-down menu that says
Choose... to select a pricing tier (Figure 5.7.38).
f you want your app to be free, simply select
USD 0 (Free) as you'd expect. If you'd like to set a fixed price, do so by clicking on the price in the drop-down menu.
Once you've saved your changes, you can even set up price staggering which allows you to set a launch promo price or even schedule a discounted price for your app.
Now we need to add some super critical stuff to our app project – metadata!
On the left-hand side, click on
1.0 Prepare for Submission (Figure 5.7.39) and you should see this screen appear (Figure 5.7.40):
Apple requires that you include an app preview video and up to 5 screenshots of your app. If you look at the most successful apps on the App Store, they are doing an amazing job at utilizing this space.
Helpful Hint: An app preview video can easily be created by using QuickTime's Movie Recording feature. Connect your iPhone via Lightning cable and change cameras from your Mac's FaceTime camera to your iPhone! You can then record input from your iPhone and save it as a video file for editing later on.
The best practice is to create a set of five App Store screenshots at each device resolution (iPhone 4, iPhone SE, iPhone 7, & iPhone 7 Plus) however Apple only requires you to upload 5 screenshots at iPhone 7 Plus resolution.
Whenever your screenshots are created, upload them to iTunes Connect by dragging them on the grey rectangle in Figure 5.7.41.
Scroll down and we can add our app description, keywords, support URL, and marketing URL. Your app description is important and I suggest that you research what the big guys are doing and seek to emulate them. Find an app on the App Store like Uber, Instagram, Snapchat, etc. and see how they've formatted and written their app description.
Your keywords are also important as they are used to show your app when a person searches for certain keywords. Your keywords should be specific and relevant to your app. Think of what your prospective user would search for to find your app. Your support URL can be a website you own or a free website as long as it is a legitimate website where users can find more information about your app. The marketing URL is optional but if you have a URL with marketing information about your app (perhaps a press kit, etc.) you should include it here (Figure 5.7.42):
Once that's all squared away and filled out nicely, we need to keep scrolling down the page. Scroll past Build for now and move on to General Information (Figure 5.7.43):
This is where you need to enter in all relevant information for your app like copyright information and your address. You also need to upload an app icon with these requirements:
This icon will be used on the App Store and must be in the JPG or PNG format, with a minimum resolution of at least 72 DPI, and in the RGB color space. It must not contain layers or rounded corners.
You also need to choose a version number. This number needs to match the version number in your project settings in Xcode. If you aren't sure what to put here, go to your Xcode app project and open the project settings.
The version number is in a text field directly beneath the
Bundle Identifier field. Make sure that this number matches what is in iTunes Connect.
After uploading and entering in all required data, scroll down to the App Review Information section. You need to give Apple a your name, phone number, email address, and a demo account (should your app require any type of authentication). There is also a field for notes which, according to Apple, is meant for:
Additional information about your app that can help during the review process. Include information that may be needed to test your app, such as app-specific settings.
Once you've entered that, we have finally reached the bottom of the page. We need to decide when to release. The options are shown in Figure 5.7.44. As you can see, Automatically release this version is selected by default:
Alright, phew! We made it! Almost there... Click
Save at the top of the page because now it's time to upload a build to iTunes Connect so that we can submit it once and for all! Woohoo! 🤘
Now that we have our certificates and profiles installed as well as our app metadata entered in iTunes Connect, we are finally ready to submit our app to the App Store! Yaass...
Switch on over to Xcode and open
ProvisioningDemo.xcodeproj if it isn't already open.
Make sure that you are in the project settings then click on
Build Settings and find the Code Signing section just like before.
Under the Provisioning Profile menu, select the Distribution provisioning profile we created earlier in this chapter called
You also need to select your iPhone Distribution certificate from the Release and Any iOS SDK drop-down menus (Figure 5.7.45):
Bear in mind, this will disable you from building your project to a device or the Simulator until you switch this setting back to your development profile.
In the top-left of your Xcode window, click on your project name and click
Edit Scheme (Figure 4.7.46):
On the screen that pops up you need to click on
Archive from the menu on the left-hand side.
When submitting a build of our app to the App Store, we need to archive it. Imagine that you're sealing off this build of your project so that it is uploaded to iTunes Connect, just the way it is.
On the Archive screen, we need to verify that
Archive is selected from the
Build Configuration drop-down menu. Afterward, click
Close to close out and change our Build Scheme.
Next, at the top-left of the Xcode window, we need to switch from a Simulator device to either:
(1) Our actual device plugged via Lightning cable.
Generic iOS Device.
Choose one of those options and click to select it (Figure 5.7.47):
Here comes the exciting part! In the menu bar at the top of Xcode, click
Archive and allow for Xcode to do it's thing. It will appear as if it's building as normal, but when it's finished it will open up a new application called Organizer. It can take quite a while for your app to successfully archive and copy into Organizer, so give it some time.
Once Organizer has opened, you will see the following screen (Figure 5.7.48):
Before we do anything, we should validate our app. This will basically run our app through an automated version of some of Apple's tests they run on our app to make sure it's good to go to the App Store. This is a huge time-saver because in the good ol' days, you had to submit your app to Apple and wait 7 days just to tell you that you needed to fix some really minor things. Being able to validate it ourselves means that we don't have to waste our time.
Validate... button and on the pop-up that follows, you need to select the appropriate development team.
Choose the one you've been using, then click
The pop-up will show the progress of the preparation of our archive. After the archive is ready to be validated, you will see a confirmation screen like in Figure 5.7.49:
When you're ready to validate your project, click
Validate and Xcode will do it's thing. After a while, your archive will be uploaded. Should there be any warnings or errors, they will be displayed afterwards (Figure 5.7.50):
Since I was only shown a warning, I'm going to move forward by clicking
Believe it or not, our build has been uploaded to iTunes Connect. Go back into your iTunes Connect account and open up the app project we started earlier. Click
1.0 Prepare for Submission.
If you scroll to the Build section, you should now see the build we just validated and uploaded. It should have a status of Processing at the moment.
To officially submit your build to the App Store, ensure that all of the information from above is completed in full. Click
Save to save all changes then click
Submit for Review and your app will be sent to Apple for review!
You finally did it. You've uploaded your first app to the App Store! You will need to wait a few days to hear back from Apple and to be honest, expect that your app won't be approved at first. Apple is very picky about the apps on their App Store. It is how they ensure they have a top-of-the-line marketplace.
Of course, make sure you refer to Apple's documentation and guidelines for uploading to the App Store which can be found in their developer documentation online. Remember, Google is your friend. 🤓
Wow, so as you can see there are TONS of steps in order to get your app onto the App Store. Apple has helped with a lot of this actually by enabling automatic signing, app ID, and certificate creation, but you now know the entire process.
You can now upload apps to the App Store manually if the automatic features aren't working. As a developer, it is good to learn how these things work behind the scenes.
But seriously, pat yourself on the back. Amazing work. 👍