iOS Publication: Complete Process

iOS Publication: Complete Process


Requirements - Mac computer needed πŸ–₯ - Apple Developer account πŸ› 

Get an Apple Developer Account

Join the Apple Developer Program in order to publish apps into the App Store. πŸ‘‰ Join here

Steps to follow

πŸ‘©β€πŸ« App distribution options

Understanding the different distribution options

iOS apps can be distributed in different ways, the more common process is to create a first version of the app and distribute it using Testflight to a limited number of users, once the app is ready it can be published to the App Store.

But there are other options for distributing and sharing iOS apps and it's important to know them:

Developer and Adhoc Distribution

Allows to distribute the app to a limited number of devices, is required to enter the device identifiers of each device in the Developer Portal to allow the app installation.

Enterprise Distribution

Allows distributing the apps to the employees of a specific company outside the App Store. Requires a specific type of Developer account, apps can be downloaded from a website of the Company or using the Company infrastructure.

Appstore Distribution

Is the most normal Distribution option, apps are published in the Apple App Store, and everyone can download it, we can control in which countries are the apps available.

Before publishing the app its possible to use the Testflight program to distribute our app easily to a number of users.

πŸ“ Generate Certificates, AppIDs and Provisions

Generate the Certificates, AppIDs and Provisions

Apple requires signing the IPA file with a certificate to be able to install it on devices, so signing the app is a requirement to distribute the app using Testflight, to upload it to the App Store or to distribute it using another method. To be able to get our package signed, we will need to generate first some files. We will access the Apple Developer Portal with our credentials, and follow the instructions to generate three files (one certificate and two provisions), we will follow the steps to create the necessary files for the Appstore Distribution.

πŸ‘‰ We will need to generate three files:

  • One Certificate
  • Two App Identifiers, also called Bundle IDs or App IDs
  • Two MobileProvision files


If you already had a certificate created, you will need to be sure it's a .p12 file and that you remember the password. If you don't remember the password or missed the .p12 file, you can export it again from the Keychain Access app using these steps *Keep your .p12 certificate file if you are planning to publish more than one app. It is recommended to use the same .p12 file for all of your apps under the same developer account.

Let's start:

  1. We access Certificates, Identifiers & Profiles, we then access into Certificates
  2. image

    Create a Certificate


    We need an iOS Distribution (App Store and Ad Hoc) certificate


    A Certificate Signing Request will be required.

    Follow the steps to create a certificate signing request from your Mac using the Keychain access App. Learn how to create a CSR

    Keychain view


    Upload the certificate signing request (CSR)


    and Download the file once finished Certificate in App connect

  3. Next in the Identifiers section
  4. image

    Create an "App ID"


    Select Type App


    Enter a short description, and fill a Bundle ID (the naming recommendation is using an inverse domain that you own), you can choose whatever app identifier you want but should be unique in the App Store.

    πŸ‘‰ For example in the case of Twitter, it would be like com.twitter.appname


    πŸ‘‰ Also check the Push Notification capability.


  5. Now we will generate the profile files, we go to Profiles section, we click on Generate a Profile
  6. image

    Choose App Store (mobile provision file) for the App Store with the App ID and the iOS distribution certificate we created in the first step.


    Select App ID created in the previous step


    Finally, we fill in a name (normally your app name) and download the Provisioning Profile file.


    We got our first provision file!

  7. As Bravo supports Push Notifications, there's a need to have a secondary mobile provisioning file, so we need to add another Identifier to create an App ID as we did in the second step.
    1. image

      In this case, we should use exactly the same bundle ID as we entered before but adding .OneSignalNotificationServiceExtension at the end.

    2. So for the twitter example would be com.twitter.appname.OneSignalNotificationServiceExtension
    3. image

      πŸ‘‰ Also check the Push Notifications capability.


  8. Finally, we generate the last profile file, in the Profiles section as before, select again App Store.

Select App ID created on the previous step, the one ending with OneSignalNotificationServiceExtension


Finally, we fill in a name (suggestion: "[Your app name] OneSignal") and click Generate to download the Provisioning Profile file.


πŸ‘ Done about Certificates, Identifiers and Profiles! βœ…

Get the p12 certificate file

We finished generating the needed files, now let's configure the ios_distribution.cer. To start double click on the certificate (ends with .cer) and click on Add, so it gets installed in our Mac Keychain. (This popup could be shown or could be added automatically to the Keychain app)


Now the certificate has been installed on your computer, we will need to export it so it can be used it later to sign the app. ⚠️ But first install the Apple certificate "Apple Worldwide Developer Relations Certification Authority", the one that expires in 2030. You can find it here in the Intermediate certificates section at the bottom of the page. Next, we open the Keychain Access, you can find it in the folder Utilities inside the folder Applications in your computer.

Now you need to locate the Certificate we just installed, select login at the top left and select My certificates at the bottom left and all the certificates installed in your computer should appear.


Look for a certificate named iPhone Distribution, click on it with the right button (be sure the certificate is folded when selecting it, as we want to export the cert and the key) and choose the Export option. Click the Save button on the dialog.

If you don't see the Export option, try unselecting the folder and selecting it again.
If you don't see the Export option, try unselecting the folder and selecting it again.

⚠️ A dialog will appear asking for a password (p12 files can be protected by an optional password). Add a password if you want, or leave it blank, but make sure you remember it later.⚠️ (it's the most common cause for a failed app build request)


If you are having build issues, you can create another certificate without a password. Also, please review that all of your files and text have the correct or matching spelling.

Just after, another password dialog will appear. This time it is for your computer account password, to allow the exporting of the certificate.

Next: request your IPA (iOS app file) πŸ‘

Now you've all the needed files to add in the Bravo publication form, fill in the requested information and you will get your IPA ready for publication!

⚠️ Before requesting the IPA


Review and make sure you have set up all needed files for your app, for example, If you are using Firebase login or Notifications, get all files ready for the Live app version.


Also, we recommend adding an app icon and a splash screen to your app design, as is not possible to change it once the IPA is generated. Copy the icon and splash frames from our Bravo Store Assets Kit to your Figma file and design them as you like, then update it in Bravo Studio and you're good to go.

🍏 Get the IPA

Request for iOS publication

Request this app file (called the "resigned IPA") if you want to publish your app on the App Store or TestFlight.

  1. On your app project page, go to the Publish tab and select iOS.
  2. image

  3. In Step 1, change the App Name (if needed) to the name that you want to display under the app icon on a phone.
  4. We recommend keeping the default Version Number and Build Number for the first version of your app. For future updates to your app, you must increase both the Version and Build Number.
  5. πŸ’‘

    Version number specs The value for a version number or build number must consist only of ’.’s and numbers and must begin and end with a number. Each integer value separated by a period is a component of the version. Version numbers and build numbers may have up to three components separated by periods. The total number of characters in your version number or in your build number cannot exceed eighteen characters. Valid: 1, 1.1, 1.1.1, 1.10000, 1.10000.1 Not valid: a, 1.a, 1., .1, a.1 1.10000.1.5

  6. The Bundle ID should be the same one that you entered in the Identifiers step when generating the .mobileprovision file. (It should have the format com.mydomain.appname)
  7. image

  8. In Step 2-4, upload these three files you have created:
    1. .p12 certificate
    2. .mobileprovision for your app
    3. .mobileprovision file for OneSignal
    4. image

  9. Click Get IPA to request the app package. You will receive an email in 24 hours to download the file.
  10. image

πŸ”§ Advanced settings: Info.plist editor

You can edit the info.plist text that will be included in the app build, if your app requires it.


What's the Info.plist?

It's the main configuration file of an iOS app, which includes some internal information regarding the app and its features. It's a .plist file, similar to an XML file.

When do I need to edit it?

For the majority of app cases, you do not need to edit it. However, you have the option to change or add extra data if your app requires it.

If your app is in another language, you should edit the existing text in the info.plist editor to the language of your app. These texts are the privacy strings on why you need to access a specific sensitive asset, like the camera or the user location.

πŸ“¦ Upload IPA to App Store Connect

Package upload

Once we get the IPA signed from Bravo, we will upload it to the App Store Connect so we can use Testflight or send it for publication to the App Store.

First of all, access the App Store Connect


Create a new app in the Apps section, clicking on the plus sign.


Select it's an iOS app, select as the Bundle ID the App ID you created before (the bundle WITHOUT the OneSignalNotificationServiceExtension text), and enter an SKU number is not really important, add whatever number you want (the number should be at least 1).

Now we are gonna upload the package to the App Store Connect.

Download the Transporter app available in the Mac App Store.


Enter your credentials and upload the .ipa file we created.




It may take some time for the package to appear in App Store Connect (can be minutes or up to an hour). You can check the status in the Activity section on the App Store Connect page. If you get an alert with the message that some tools are missing and you need Xcode, you will need to install Xcode from the Mac App Store.

The Build section should show a blue button and a + icon when your build has uploaded to App Store Connect.

Remember that for each package you upload to App Store Connect the Build Number on the Bravo publication form needs to be higher than the previous one.


If you encounter this message after clicking DELIVER, you need to download Xcode on your computer, and then click DELIVER again. (Xcode is a big app, so it may take a while to download). Do the same if you get the following error message: "ERROR ITMS-90085: No architectures in the binary. Lipo failed to detect any architectures in the bundle executable."

🐞 TestFlight (Testing environment, optional)


TestFlight allows us to test and share the app before release it to the App Store, it's completely optional to use Testflight, but allow us to be sure our app works as expected before the app store publication.

Once the build is uploaded and processed in the App Store Connect we can enter in the Testflight section and create different groups with the users we want to test our application. First time we add an app to Testflight, the app will need to be reviewed by Apple so it will take some time, if is approved next times we much faster.

We can share our app up to 10.000 testers, we can share using a public link or sending them an email.

The Testflight app is needed to install the apps, and the apps expire after certain days.

πŸš€ App Store publication

App Store Publication

This guide will explain how to fill the App required information in the App Store Connect and submit the app for review.

Version Information

To start you need to upload at least the screenshots for iPhone 5.5'' and 6.5'' screens, be sure to check or Bravo Stores Assets Kit to generate your screenshots easily. Here are the specific sizes required:

  • iOS 6.5'' screen 1242 x 2688px
  • iOS 5.5'' screen 1242 x 2208px


Then it is required to fill in the app information:

  • Promotion Text
  • Description
  • Keywords
  • Support URL
  • Marketin URL
  • Build (select version)
  • Copyright
  • Age rating
  • Contact Information
  • Advertising Identifier β†’ NO

If you get asked if your app uses Encryption or the app uses the Advertisement Identifier (IDFA), answer NO, as Bravo doesn't use any of those. Regarding encryption, Bravo uses the https protocol that is exempt.

App Information


Then it is required to fill in the app information:

  • Name
  • Subtitle
  • Privacy Policy URL
  • Primary Language
  • Category

On Pricing and availability, we can select the desired price tier or if the app will be free, also the availability in the different app store countries.

Regarding the App Privacy section, now is mandatory to be filled in, you will need to answer a questionnaire regarding the tracking that is done in the app. Bravo apps do track data from the apps using some third party providers, we do track some identifiers to allow some of the functionalities like a a DeviceID and UserID which can be used on the API Bridge, we do track some anonymous usage data on the apps which helps us improving our product and resolving issues. And finally we also track crash reports to make our apps better.

Here would be the final result after filling all the information.


Once everything is filled in, add the bundle package via Transporter, locate the one you uploaded, and you're ready to submit for review.

Click on the Submit for Review button to send for publication review πŸš€.

✏️ Updating an app in the App Store

Updating an App in the App Store

If we want only to upload a new Bravo IPA package to App Store Connect without creating a new App store version, we just need to be sure we upload it with a different "Build number", build numbers are increased automatically for each new build you request, these numbers are used internally to identify the different uploads in the App Store Connect.

If for the other hand you want to release a new update on the App store, first we will access to App Store Connect enter in the app you want to create a new version and click on the plus sign. It will ask you which version number you want to use, so if your app was version 1.0, usually you would increase it to 1.0.1, 1.1, or 2.0, depending on the number of features and changes that have been done.

Once done, we will go back to the Bravo Publication Form and fill in the "Version Number" the same Version we've created in the App Store Connect.


The process is equal to the publication, we will wait until get the signed build (IPA file) in your email and upload it to the App Store Connect using the Transporter app.

Now is also the time to change any app information (description, screenshots, etc.) in App Store Connect, as most of the information can only be changed when doing an App Update. Fill in "What's New in This Version" and select the uploaded package in the Build field.

Describe what's new in this version of your app, such as new features, improvements, and bug fixes.
Describe what's new in this version of your app, such as new features, improvements, and bug fixes.

When you are ready to send the new update to review, click Submit for Review. Done!


That's it! πŸŽ‰