Bravo Studio Help Center
  • Get started with Bravo Studio 👏
  • Get Started
    • 🚀Create your first app
    • 🌟Bravo introduction
      • Get ready to create your app with ChatGPT
      • Create an app
        • Creating an app with Figma
        • Creating an app with Adobe XD
      • Duplicate an app
      • Delete an app
      • Replace linked Figma file
      • The app page
      • Sharing your app
      • Add an editor to your app
      • Fonts
        • Adobe XD - Supported fonts
    • 📱Bravo Vision previewer
    • ✨Unlock power features to create interactive apps
    • 🎓Help and tutorials
      • 📖App guide tutorials
        • Sample app tutorial: Your first binding
        • How to build a Fitness app with Bravo, Xano and RevenueCat
        • Foodgram: Social content sharing
        • Expedition journal: Write and share your adventures
        • My Subscriptions: Display data based on device ID
        • My Notes: using user ID and email from Firebase
        • My Store: Sell physical products with Bravo and Stripe
        • Titan: How to create a Smart Home App with No-Code?
        • n8n: Building an expense tracking app in 10min
      • 📺Learn with videos
      • 📚Learn with articles
      • 🗃️Browse by app feature
        • Save or "bookmark" a page
        • Backend search with Airtable
        • Backend search with Xano
        • Nested lists (list within a list)
        • Create and edit user profile (Firebase + Airtable)
        • Skeleton loader
        • Create albums in your app with Bravo Infinite images
  • Set up your design
    • 🖌️Get your Figma ready for Bravo
      • 🗃️Structuring the design: the layer hierarchy
      • 🪄Bravo Tags: adding functionality to the UI elements
      • 🧱The container
        • Setting up a container on Figma
        • Setting up a container on Adobe XD
      • 📲App navigation
        • Setting up app navigation on Figma
        • Setting up app navigation on Adobe XD
    • 🔌Bravo plugin for Figma
    • 💾Sample design files
    • 🤓Best Practices
  • App components
    • 📒Bravo Tags Master List
    • 🚪Menus
      • Modal Menu
      • Modal pages
      • Tabs Menu
      • Pop Up pages
      • Slide Menu
    • 🍞Pages
      • Modal pages
      • Pop-up pages
      • Swipe page
      • Transitions page
      • Page reveal animations
      • Page tabs
      • 🔮Stateful pages
    • 📦Containers
      • Swipe to delete
      • Top bar
      • Carousel slider
      • Aspect ratio relative to screen
      • Sortable List
      • Layer (sticky element)
    • 👋Intro & Onboarding
      • Intro page
      • Post-login page (Onboarding)
    • ⌛Loading experience
      • Loading page
      • Custom loading page
      • No loading
      • Preload
    • 📝Form & input fields
      • 👁️Password Visibility Toggle
      • 🩷Stateful input
        • ☑️Checkboxes (Multiple select)
        • ✅Required Checkbox
        • 🔘Radio buttons (Single select)
      • ⏳Input time Interval
      • 📄Dropdown selector
      • 🎚️Slider control
      • 🗓️Calendar picker
      • 📄Send form input to a database
    • 💎Components
      • Autoplay Video
      • GIF
      • SVG Component
      • Web view
      • Web Components using AI
      • Web view communication
      • LottieFile
      • Lottie-animated component
      • Flexible text (Flexo)
      • Zoomable image
      • Component states
      • Stateful component (like button)
      • Setting up the backend of Stateful component (like button)
      • Haptic Feedback (Buzzz)
      • Progress bar
      • Rich text
      • Date, Time and Currency Formatter
      • Scrollable text
      • Text Lines & Truncation
      • Status bar
    • ⚡Mobile actions
      • Mobile Actions
      • Play audio
      • Record audio
      • Play video
      • Scan QR code (external URL)
      • Scan codes (remote action)
      • Search & filter
      • Refresh page
      • Share location
    • 📱App Icon & Splash Screen
    • 🗺️Map with markers
    • 📈Charts
  • Data and Backend
    • 🗂️Set up a no-code backend
      • Xano
        • Nested lists (list > list > detail page) with Xano
        • Create a bookmark functionality with remote actions and device ID with Xano
        • Multi-user setup with Xano
        • 🔒Setting up the Xano Log in Snippet
          • ♻️Refresh Token
      • Airtable
        • Nested lists (list > list > detail page) with Airtable
        • Sort list with Airtable
        • Connect multiple tables from Airtable to one app
        • Update Airtable's API key to Access Token
      • Backendless
      • Bubble
      • Notion
        • Getting data from a Notion table
      • Firebase
        • Getting data from Firestore
    • 💾Set up API requests
      • Set up from scratch
        • Airtable
          • Set up an API GET request for list page - Airtable
          • Set up an API GET request for detail page - Airtable
          • Set up an API POST request - Airtable
          • Set up an API DELETE request - Airtable
        • Xano
          • Set up an API GET request for list page - Xano
          • Set up an API GET request for detail page - Xano
          • Set up an API PATCH request - Xano
          • Set up an API POST request - Xano
          • Set up an API DELETE request - Xano
      • Using GraphQL body type
      • Set up with API wizard & importer
        • Using the Airtable API Wizard
        • Using the Xano API wizard
    • 🎲Variables
      • Built-in variables
      • Set Variable
    • 📚Data Collection & Binding: Complete Collection
    • 🗂️Pagination
    • 🐛Debugging API issues
      • ⚙️Debugging requests in the API Collection
      • 📲Event logger
      • 🔗Link property
  • Data binding
    • 🤝Data binding types
      • API binding types
      • Bind multiple API requests to one screen
      • How to connect my API to a mobile actions
      • Remote actions: trigger an API request with a UI element
    • 💡Display data in your app
      • Bind data to design for a list page
      • Bind data to design for a detail page
    • 🆕Create data from your app
    • 🗑️Delete data from your app
    • 🚦Conditional Visibility
    • 🎛️Conditional Actions
  • Integrations & Settings
    • 🖇️Deep Links
      • 🖇️Deep Links for Bravo Vision
      • 🖇️Deep Links for published apps
      • 🖇️Troubleshooting Deep Links
    • 🔔Push Notifications with OneSignal
      • How to get a Bravo page URL
    • ⚙️Firebase Configuration
    • 🔐User Authentication
      • 🔑Authentication with Kinde and Xano
      • 🧙🏽Authentication with OAuth 2.0
        • Using social logins to authenticate users
        • Using AWS Cognito to authenticate users
        • Connecting to Spotify API
      • 📲User login with Firebase
        • ✉️Email and password Login with Firebase
        • 📞Phone Login with Firebase
        • 🍎Social Login with Firebase
        • 👻Anonymous Login with Firebase
      • ⛓️Authentication with custom backend
        • Set up Xano as your user authentication backend
    • 💰Stripe: One-time Payment
    • 💬Chat: CometChat
    • 💸RevenueCat: In-app purchases and subscriptions
    • 📉Bravo Analytics
    • 📳Facebook App Events
    • 📊Google Analytics
    • 🌐Multilingual apps
    • 🕸️How to connect with Webflow API
    • 📡NFC connection
    • 🎯Admob
  • App Publication
    • 🚀Publishing your app
      • iOS Publication: Complete Process
        • 1. Generate Certificates, AppIDs and Provisions
        • 2. Get the IPA
        • 3. Upload IPA to App Store Connect
        • 4. Test your app on TestFlight (optional)
        • 6. App Store publication
        • 7. Updating an app in the App Store
      • Android Publication: Complete Process
        • 1. Create a Keystore File (optional)
        • 2. Get the Debug APK to install
        • 3. Install the Debug APK in your device
        • 4. Get the AAB (Android App Bundle) file to publish
        • 5. Google Play publication
        • 6. Updating an app in Google Play
      • Android APK Installation Guide
      • Rejection from the app stores
    • 🎛️Making changes to your app after publication
    • 🛍️Versioning
    • 🌟App rating alert
  • Good to Know
    • 🤔Troubleshoot
      • Errors when logging in
      • Errors when creating an app
      • Errors in API requests
        • Request timeouts on Bravo
      • Errors after importing
      • Errors in publication form
    • 🧑‍💻Manage your account
    • 💳Billing
      • Bravo Subscription Plans Overview
      • App Add-ons
      • Upgrading a plan
      • Downgrading a plan
      • App allowance
      • Invoices & payment method
      • FAQ
    • ❓FAQs
      • About Bravo Studio
      • Importing a design file
      • Bravo Vision
      • Bravo Tags
      • API & Data Library
      • Login & Account
      • Other Features
  • NEED SOME HELP?
    • 📖Bravo Support Guide
    • 🤝Join the Bravo community
    • 🤖Bravo Assistant
    • 👥Production support
    • 🐞Report an issue
Powered by GitBook
On this page
  • 1. Generate the .p12 certificate
  • 1.1. Create a CSR file from your computer
  • 1.2. Generate a .cer file from Apple
  • 1.3. Generate the .p12 from the is_distribution.cer file
  • 2. Get the first mobileprovision file
  • 2.1 Create the first identifier
  • 2.2. Generate the first provisioning profile file
  • 3. Generate the second mobileprovision
  • 3.1. Create the second identifier
  • 3.2. Generate the second provisioning profile file
  • One more thing

Was this helpful?

  1. App Publication
  2. Publishing your app
  3. iOS Publication: Complete Process

1. Generate Certificates, AppIDs and Provisions

PreviousiOS Publication: Complete ProcessNext2. Get the IPA

Last updated 7 months ago

Was this helpful?

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.

We will access the with our credentials, and follow the instructions below to generate three files (one certificate and two Provisioning Profiles), we will follow the steps to create the necessary files for the Appstore Distribution.

👉 We are going to generate three files:

  • One .p12 certificate

  • 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 .

Keep your .p12 certificate file safe. You will need it for updating your app. Also it is recommended to use the same .p12 file for all of your apps under the same developer account.

1. Generate the .p12 certificate

1.1. Create a CSR file from your computer

1. Open the Keychain Access. It's in the folder Applications and Utilities

2. On the upper menu, select Certificate Assistant -> Request a Certificate From a Certificate Authority.

3. Enter you email address in User Email Address, your name in Common Name and leave the CA Email Address field blank.

4. Select Saved to disk.

5. Click continue and Save the file.

2. Open a command prompt window.

3. Get access to OpenSSL's bin file with this command:

cd C:\OpenSSL-Win32\bin

4. Now create a private key by entering:

set RANDFILE=.rnd

5. Followed by:

openssl genrsa -out mykey.key 2048

6. The mykey.key is sent to OpenSSL's bin file.

7. Using your private key you can now create the CSR file. To do this, a command with the following format is required:

openssl req -new -key mykey.key -out CertificateSigningRequest.certSigningRequest  -subj "/emailAddress=yourAddress@example.com, CN=John Doe, C=US"

You will need to make some changes when typing the preceding command into the command line. Replace the e-mail address and certificate name with the same e-mail address and name you enrolled within the iOS Developer Program. Also, if you live outside the United States, you will need to edit the country code.

A CSR file named CertificateSigningRequest.certSigningRequest will be created and sent to bin folder.

1.2. Generate a .cer file from Apple

2. In Certificates, click on the + button.

3. In Software, select iOS Distribution (App Store and Ad Hoc) and click Continue.

  1. Now click Choose File and select the .csr file created before.

  2. On the Download Your Certificate screen, Click Download to get the .cer file.

1.3. Generate the .p12 from the is_distribution.cer file

  1. On your computer, double click on the .cer file and click on Add, so it gets installed in our Mac Keychain. (The following popup might appear, but sometimes it's 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.

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. Note that sometimes it's somewhere else.

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. Also make sure you are on the same computer that you generated the .cer file on the first place, otherwise you won't have the option to export.

Before exporting, a dialog will appear asking for a password (this is optional). Add a password or leave it blank, but make sure you remember it later (it's one of the most common cause for a failed app build request).

Great! 🎉 Save your .p12 file in a safe place.

2. Get the first mobileprovision file

2.1 Create the first identifier

1. In Identifiers, click on the + button.

2. Select App IDs and click Continue.

3. Select Type App and click continue.

4. Enter a short description and fill the Bundle ID:

The naming recommendation is using an inverse domain that you own. For example com.domainname.appname. You can choose whatever app identifier you want but should be unique in the App Store.

5. In Capabilities, select the following checkboxes: - Associated Domains - Push Notifications - NFC tag reading (Only if your app needs to read NFC)

6. Click Continue and next Register.

2.2. Generate the first provisioning profile file

1. In Profiles, click on the + button.

2. In Distribution, select App Store and click Continue.

3. Select the App ID created in the "2.1 Create the first identifier" step. Click continue.

4. Fill the Provisioning Profile Name field. We recommend "Main mobileprovision". Click generate. Next download.

Great! 🎉 You already have your first .mobileprovision file. Let's generate the second, we're almost there!

3. Generate the second mobileprovision

Now we need to follow the same steps as for the first mobileprovision but for push notifications.

3.1. Create the second identifier

1. In Identifiers, click on the + button.

2. Select App IDs and click continue.

3. Select App and click continue.

4. Fill the description and Bundle ID:

In this case the Bundle ID should be the same as the first identifier but adding the suffix ".OneSignalNotificationServiceExtension".

So following our previous example the Bundle ID would be com.domainname.appname.OneSignalNotificationServiceExtension

5. In Capabilities, select the checkboxes: - Push notifications And click the Continue button.

3.2. Generate the second provisioning profile file

1. In Profiles, click on the + button.

2. In Distribution, select App Store.

3. Select the App ID created on the previous step, the one ending with OneSignalNotificationServiceExtension and click Continue.

4. Fill the Provisioning Profile Name. We recommend to use "your app name + OneSignal" and click Generate. Finally download.

Awesome! 🎉 Now you've got all the needed files needed to generate the IPA file.

One more thing

Make sure you have enabled and configured all integrations of your app before generating the IPA file.

1. Install on your desktop. Download and run Win32 OpenSSL Light (or Win64 OpenSSL Light). The wizard will ask you to select where OpenSSL should be installed. Keep the default location set to C:\OpenSSL-Win32. Additionally, when prompted, instruct the installer to copy OpenSSL's DLLs to The Windows system directory.

1. Go on Certificates, Identifier & Profiles on your developer space on the left-hand menu of the .

If you haven't done this before, you must have the intermediate signing certificate in your system keychain. To do so, go to , scroll down until Intermediate Certificates and click on "Worldwide Developer Relations Certificate Authority (Expiring 02/20/2030)". Then double click on the AppleWWDRCAG3 file.

Also, we recommend adding an app icon and a splash screen to your app design, since you will need to generate a new build if you haven't. Copy the icon and splash frames from our or from our Figma plugin to your Figma file and design them as you like, then update it in Bravo Studio and you're good to go.

🚀
OpenSSL
Apple Developer Portal
this page
Bravo Store Assets Kit
Apple Developer Portal
these steps