Publishing your iOS app into the App Store
The final frontier — or not. (Honestly: not)
Did you know that one of the most common requirements of iOS job opportunities is to have at least one app published on the App Store? If you have never done it, whether it is because you’re not in charge of this process on your company or you haven’t reached this point yet, this article is for you.
I’ve prepared a checklist of things to save you some time before/during the submission process.
- Apple Developer Portal: App ID, Capabilities and Certificate.
- App Store Connect: App, Description and Screenshots.
- Project configuration: Orientation, Capabilities, Devices, Build, Version and Icons.
- Archive and Submit
Now let’s go step-by-step and check how this would look like.
Apple Developer Portal
Considering you have a developer account with a developer program membership (which costs 99$ USD/year) all you have to do here is to login at https://developer.apple.com/account, go on Certificates, Identifiers & Profiles and create an App ID by clicking on App IDs on the left menu, followed by the ‘+’ button on the right-top corner of the screen, next to your account name.
On ‘App ID Description’ use the name of the App (This is the name of the app on the Apple Developer Portal, therefore, it’s not necessarily the same appearing on the App Store.)
On ‘App ID Suffix’ go for ‘Explicit App ID’ and write down the Bundle Identifier of your project.
After this, select the capabilities that your app does:
So far so good, huh?
You have to admit: So far, the hardest part was having the developer membership.
You’ve probably tested your app during the development process, so you might have already generated an iOS App Development certificate before. It’s the same process now except it’s a distribution/production certificate.
Click ‘Continue’ and now open Keychain Access to generate a CSR file which stands for Certificate Signing Request. If you read my post about how to use push notifications, you will notice that this part of the process is the same.
Click on ‘Request a Certificate from a Certificate Authority’ and select the option ‘Saved to disk’ so you save the file on your desktop instead of sending it to your e-mail. Now upload the CSR file:
Click on ‘Continue’ and … Voilá! Download your distribution certificate, open it, and it will be added to your Keychain.
App Store Connect
Log into https://appstoreconnect.apple.com/ and go for ‘My Apps’. Click on the ‘+’ button and then ‘New App’.
Now we are talking about the name that will show up on the App Store. Select the primary language in which the app display its content and select the Bundle ID. Notice that you can’t input the Bundle ID, you must select one of the Bundle ID’s from your App ID’s list. We did this earlier in this article! If it doesn’t appear wait a bit, sometimes it takes a couple minutes from creating the App ID to appearing on App Store Connect.
SKU stands for Stock Keeping Unit, which is nothing more than a unique identifier for your app. Doesn’t really make any difference to use something completely unrelated or not, but it must be unique. Why don’t we go for: country.mycompany.myappname? Seems pretty differentiable.
Congratulations, you have created the app on the App Store. It’s ALMOST time to submit your project to the App Store Connect.
Project Configuration
This part is just to avoid that your build get’s rejected.
- Check if your project version is the same as the app on the App Store Connect. If you’ve never done this then it probably is because it’s automatically 1.0.
- The build has to be incremented every time you archive again. We’ll archive in a few seconds from now but understand that once you’ve submitted a build 1 you can only submit another build 1 if you increment the version. For the same version, you can only use build values bigger than the previous one submitted.
- Check the orientation support. Maybe you’re not using landscape orientation, if so: uncheck the landscape orientations on your project.
- The deployment target will restrict your app availability to users that are using iOS version equals to or higher than the one you selected. Check if your capabilities are available on the minimum deployment target possible to increase the range of users that can download your app and at the same time avoid crashes and malfunction from users that have older devices and iOS versions.
- If your app wasn’t made for iPad as well, make sure to NOT let this option as Universal. Otherwise you’ll have to submit screenshots and icon assets for iPad as well — not a problem if this is your case, just saving time if it’s not.
- Fill your AppIcon assets according to the need of your device. Go for your .xcassets and if you don’t have one, just click on the ‘+’ button and select ‘New iOS app icon’
Tip: https://makeappicon.com/ saved my life many times, can save yours too.
Archive and Submit
That’s almost the end, seriously. It’s a bit boring this whole process but most part of it won’t be needed to repeat if you have (you’ll probably have to) to re-submit.
On the simulator list there’s an option called ‘Generic iOS device’, select this one and go for ‘Product’ on the tab bar and select ‘Archive’ . This will generate an .ipa (iOS package application — like APK on Android).
When the archiving process is done, you can select this generated archive and select ‘Show on Finder’ and then use some xcode tool to submit through another process, but the one I usually do is easier. Just click on ‘Distribute App’, select ‘iOS App Store’, ‘Upload’, next/next/next…agree to install Baidu as your default browser (no, just kidding — but from that point on, if everything went fine, a couple hours later your build will be available for submission to review at your App Store Connect dashboard)
There’s one point missing and the most boring… the screenshots.
Screenshots
For me, that’s the worst part of submitting an app. The App Store Connect checks your screenshots size if they are exactly the same size for each of the devices, if you have transparency on your image or not, and besides of this, there are loads of sizes you need to submit since it must be compatible with every device that matches your app configuration. An option would be to manually screenshot on each device and submit these. Another option would be to run the device on every each simulator and screenshot manually each one for every screen you want to submit.
Felix Krause to the rescue.
There is an amazing open-source tool called Fastlane in which you can automatise the whole submission process. If you don’t know this tool yet, you’ll be astonished about how much time it can save you. Regarding the screenshot process, you can generate screenshots automatically via code for every device you want using Snapshot which is just one part of Fastlane. I might do an article soon talking about some really nice things we can do with Fastlane and it’s magical plugins, but for now, read the docs if you want to integrate it to your app: https://docs.fastlane.tools/getting-started/ios/screenshots/