> For the complete documentation index, see [llms.txt](https://docs.thunkable.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.thunkable.com/ai/publishing/ios-publishing.md).

# iOS Publishing

## Create an Apple Developer Account <a href="#create-an-apple-developer-account" id="create-an-apple-developer-account"></a>

You need an Apple Developer Account to publish an app to the App Store. To get a Developer Account, you must enroll in the [Apple Developer Program](https://developer.apple.com/programs/). Enrollment is approximately $99 USD (or in local currency where available) per membership year.

## Each time you create a new app <a href="#each-time-you-create-a-new-app" id="each-time-you-create-a-new-app"></a>

### Register your App ID&#x20;

To register an App ID:

1. Access your [Identifiers](https://developer.apple.com/account/resources/identifiers/list)
   1. Open your [Apple Developer account page](https://developer.apple.com/account).
   2. Under the **Certificates, IDs & Profiles** heading, select **Identifiers**.
2. Click the blue **+** icon to add a new identifier to your account.\
   \
   ![](/files/Q4WfsBlXX7afta9hluyj)<br>
3. Choose **App IDs** from the list of options.
4. Click **Continue**.
5. Select **App**.
6. Click **Continue**.
7. On the **Register an App ID** screen, complete the following fields:
   1. **Description** - This is the name you want to give your app. It appears next to the app icon when downloaded on a user's device. It must be unique to the App Store and cannot use special characters such as @, &, \*, "
   2. **Bundle ID** - This is also unique to your app, but not visible to your app users. Apple recommends reversing your domain name to create your bundle ID, i.e. *com.yourDomainName.yourAppName* to avoid conflicts with other apps.

      Uploading apps to the App Store requires an Explicit Bundle ID. Wildcard bundle IDs are no longer accepted. **Note down your Bundle ID for later steps.**
   3. **\[Only for Manual Provisioning] App ID Prefix (Team ID)** - Record your App ID Prefix or Team ID. This automatically created, unique identifier is linked to your Apple Developer Program membership. The same ID can be used for every app you publish.<br>

      <figure><img src="/files/fAHIy5Fxi0m7lP2XQdD5" alt=""><figcaption></figcaption></figure>
8. Click **Continue**.
9. Confirm that the details are correct.
10. Click **Register**.
11. The new App ID you created is included in your list of Identifiers. Click the app's name to review its Description, App ID Prefix (Team ID), or Bundle ID.

### Create an App Listing on App Store Connect <a href="#create-an-app-listing-on-app-store-connect" id="create-an-app-listing-on-app-store-connect"></a>

Your app listing on App Store Connect is where you will manage your submission to the App Store.

1. Go to the [App Store Connect website](https://appstoreconnect.apple.com/login) and log in.
2. Click **Apps**.

![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252Fq7gHw3kaiCBPZ55jLy7D%252Fapp_store_connect_my_apps.png%3Falt%3Dmedia%26token%3Ded6d3cfa-9d56-4bd3-8b04-6faf25ac8144\&width=768\&dpr=4\&quality=100\&sign=3ddcaa02\&sv=2)

1. Click the blue **+** button next to the heading **Apps**.
2. Select **New App** from the provided menu.
3. Complete the New App modal.
   1. **Platforms** - iOS
   2. **Name** - The name you gave your app when you registered it. This is how it will appear on the App Store. It can't be longer than 30 characters.
   3. **Primary Language** - If localized app information isn’t available in an App Store country or region, the information from your primary language will be used instead. [Learn more](https://developer.apple.com/help/app-store-connect/manage-app-information/localize-app-store-information).
   4. **Bundle ID** - Select the Bundle ID you registered previously.
   5. **SKU** - A unique ID for your app that is not visible on the App Store. This is an identifier you create to track your apps on the App Store. You should stick to a pattern with your apps' SKU numbers to better organize them and keep track of app versions. Characters a-z, A-Z, 0-9, underscores, periods and dashes are all allowed.
   6. **User Access** - You can limit which users see the app in App Store Connect. If you select Full Access, all users will have access to the app. Users with the Admin, Finance, and Reports roles cannot have their app access limited.

      ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FtQIRVLsyvcIg7VTjYKSr%252FApp%2520Store%2520Connect%2520-%2520New%2520App%2520modal.png%3Falt%3Dmedia%26token%3D5cbda024-a994-44be-bc6c-9191448b2030\&width=768\&dpr=4\&quality=100\&sign=47170d2b\&sv=1)
4. Click **Create**.

## Publishing Process in Thunkable <a href="#start-the-publishing-process-in-thunkable" id="start-the-publishing-process-in-thunkable"></a>

Thunkable enables you to send your build directly to the App Store without the need for any specialized software or hardware.&#x20;

There are two methods to publish your Thunkable app, **Automated Provisioning** and **Manual Provisioning**. Each method has their own requirements and steps and is located in their respective section. **Automated Provisioning** is **highly recommended** for its simplicity.

## Automated Provisioning (Recommended) <a href="#start-the-publishing-process-in-thunkable" id="start-the-publishing-process-in-thunkable"></a>

To use automated provisioning, you must first configure your App Store Connect API credentials. Configure it by following the steps here: <https://ai.thunkable.com/account/appstore>

### Configure App Store Connect API

{% hint style="warning" %}
If you already configured your App Store Connect API, you should skip these steps and proceed to **Publishing with Automated Publishing**.
{% endhint %}

1. Access your [App Store Connect API settings](https://ai.thunkable.com/account/appstore).
   1. Click on the dropdown icon next to your profile image.\ <img src="/files/9zFZx68f9sgyC58ssRzY" alt="" data-size="original">
   2. Select App Store Connect API.
2. Select **Continue to Setup.**
3. In a new tab, access your [Apple API Integration](https://appstoreconnect.apple.com/access/integrations/api).
4. &#x20;Click the blue **+** icon next to **Active.**
5. Fill out the fields in thee **Generate API Key** form.\
   \ <img src="/files/XN761oqx5HrbQRiDhPhd" alt="" data-size="original">
   1. Give your key a name (e.g., "Thunkable Provisioning").
   2. Select Admin access level (required for managing certificates and provisioning profiles).
   3. Click **Generate** to create your new API Key.
6. Download the private key (.p8 file) and save it. This file can only be downloaded once.<br>

   <figure><img src="/files/CMn01DxinHeNpK1nuJCZ" alt=""><figcaption></figcaption></figure>
7. Note down the following:
   1. **Key ID** - Found in the same row as the API key just created & downloaded.
   2. **Issuer ID** - Found at the top of the [API Integrations](https://appstoreconnect.apple.com/access/integrations/api) page.
8. Back in Thunkable, click **Continue to Enter Credentials.**\ <br>

   <figure><img src="/files/DD3CdOZzQEAY7Aay2sk3" alt=""><figcaption></figcaption></figure>
9. Add your **Key ID**, **Issuer ID**, and upload the **private key (.p8 file)** downloaded earlier.
10. Click **Save Credentials.**

You have now successfully configured your App Store Connect API. You are now able to use **Automated Publishing**.

### **Publishing with Automated Publishing**

1. Access the publishing wizard.
   1. Click **Publish** to open the dropdown list.
   2. Click **Publish IOS.**\
      ![](/files/JR2VCvI1YYVlP1EPaKTb)
2. Click **Get Started**.
3. Select **Automated Publishing**, then click **Next**.\
   \
   ![](/files/lojMEPTFEssGoW4sPHrg)<br>
4. Input your **App Name** and **Bundle ID** from when you registered your [App Name](#create-an-app-listing-on-app-store-connect) and [App ID](#register-your-app-id).
5. Click **Next**.&#x20;
6. Upload your **App Icon**.
   1. Recommended size: 1024x1024 px. This icon must not have any transparent pixels.
7. **(Optional)** Increment the version number. Thunkable automatically increments the version number. However, you may choose any version number you want as long as it is larger than the prior version number.
8. Click **Send**.

Congrats! You have just published your app! Your app now will be built and sent to your [App's page on Apple](https://appstoreconnect.apple.com/apps) automatically. The process will take about 45 minutes and you will receive an email upon completion.

## Manual Provisioning <a href="#start-the-publishing-process-in-thunkable" id="start-the-publishing-process-in-thunkable"></a>

1. Set Apple ID (Your App Store account's email, it does not need to be the same as your Thunkable account's email)
2. Click the **Next** button.

**Register app**

1. Input your **App Name**, **Team ID**, and **Bundle ID** from when you completed these steps: [Register Your App with Apple](https://docs.thunkable.com/publishing/publish-to-app-store-ios/user-guide#register-your-app-with-apple).

   ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FbSDZfHnky0Xv9606bYe4%252Fios_publish_register.png%3Falt%3Dmedia%26token%3D06c4e248-aba7-403a-98a0-2d9cae062fd3\&width=768\&dpr=4\&quality=100\&sign=c7b21152\&sv=2)
2. Click **Next**.

These values will remain the same every time you publish or update this app, so record them somewhere safe.

#### Generate an app-specific password <a href="#generate-an-app-specific-password" id="generate-an-app-specific-password"></a>

You only need one app-specific password for Thunkable to send any build to App Store Connect on your behalf.

You do not need separate app-specific passwords for separate Thunkable projects.

1. Navigate to the [Apple ID account website](https://appleid.apple.com/#!\&page=signin).
2. Enter the **email address** and **password** associated with your Apple ID.
3. If prompted, enter your **two-factor** **authentication code**.
4. On the **Sign-In and Security** page, select **App-specific passwords**.

   ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FRNHcvp5WtPu30qJjS0xm%252Fapple_id_app_specific_password.png%3Falt%3Dmedia%26token%3D852fa0b6-daf8-4625-b3d4-48ea9222a9e4\&width=768\&dpr=4\&quality=100\&sign=856c467d\&sv=2)
5. Click **Generate an app-specific password** if this is your first time creating an app-specific password or the **plus icon** if you've created an app-specific password previously.

   ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FtWMKTHtgVANHjmwc0Rdi%252Fios_create_app_specific_password.png%3Falt%3Dmedia%26token%3D48f735fa-bd7e-4c7a-97b7-1ffc19f45864\&width=768\&dpr=4\&quality=100\&sign=eaa62528\&sv=2)
6. Give your app-specific password a meaningful name so you can recognize it later.

   Remember:

   * You can use the same app-specific password for all of your Thunkable projects.
   * Creating a new one every time you publish a new project is unnecessary and not recommended.
   * Creating a new one when you want to update an existing project is unnecessary and not recommended.
7. Your app-specific password is provided. You cannot retrieve this password once you close this modal, so make sure you save it somewhere safe.
8. Click **Done**.

#### Create an iOS Distribution Certificate <a href="#create-an-ios-distribution-certificate" id="create-an-ios-distribution-certificate"></a>

A CSR is an encoded file containing information about your app, which Apple uses to create a certificate to encrypt traffic to your app. The following instructions walk you through how to:

* Download a certificate signing request (CSR) from Thunkable
* Use the CSR to generate a certificate from Apple
* Download the certificate from Apple
* Upload the certificate in Thunkable

To generate an Apple certificate and upload it to Thunkable:

1. Click **Click to download CSR** to download a certificate signing request (CSR) file.
2. Open your [Apple Developer account page](https://developer.apple.com/account).
3. Under the **Certificates, IDs & Profiles** heading, select **Certificates**.
4. Click the blue **+** icon to add a new certificate to your account.
5. Choose **iOS Distribution (App Store Connect and Ad Hoc)** from the list.

![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252Fc8J4X2U4iZSruFIm2UBh%252FCertificates%252C%2520Identifiers%2520%2526%2520Profiles%2520-%2520Apple%2520Developer.jpeg%3Falt%3Dmedia%26token%3Dee74b483-20f6-4ef8-9df2-804a3721a12d\&width=768\&dpr=4\&quality=100\&sign=47d87bb4\&sv=2)

1. Click **Continue**.
2. Click **Choose file**.
3. From your computer, select the **Certificate Signing Request (CSR)** you download from Thunkable.
4. Click **Continue**.
5. Click **Download** to save a copy of the certificate to your computer.
6. Return to Thunkable.
7. Click **Upload Certificate**.
8. From your computer, select the **`.cer`** file you just downloaded.
9. Click **Next**.

#### Create a Provisioning Profile <a href="#create-a-provisioning-profile" id="create-a-provisioning-profile"></a>

Apple requires a provisioning profile to install an app on a device. You need to create a `.mobileprovision` file in your Apple account and then return to Thunkable to upload this file.

1. Open your [Apple Developer account page](https://developer.apple.com/account).
2. Under the **Certificates, IDs & Profiles** heading, select **Profiles**.
3. Click the blue **+** icon to add a new certificate to your account.
4. Under the **Distribution** heading, select **App Store Connect**.
5. Click **Continue**.
6. Select the **App ID** for the app you want to publish.
7. Click **Continue**.
8. Select the certificate you wish to include in this provisioning profile.
9. Click **Continue**.
10. Name your provisioning profile.
11. Click **Generate**.
12. Click **Download** to save the provisioning profile to your computer.

Your provisioning profile name should only contain letters (A-Z, a-z), numbers (0-9), or spaces.

**App Credentials**

Upload the Distribution Certificate created in [Create an iOS Distribution Certificate](https://docs.thunkable.com/publishing/publish-to-app-store-ios/user-guide#create-an-ios-distribution-certificate)

1. Click **Upload Certificate**.
2. From your computer, select the **`.cer`** file you just downloaded.
3. Click **Next**.

   ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252F4e8cmShVKfFfDq5PoaE6%252Fios_publish_credentials_certificate.png%3Falt%3Dmedia%26token%3De42062d3-2a27-4bab-9248-d4fab9022d06\&width=768\&dpr=4\&quality=100\&sign=adbb9865\&sv=2)

Upload the Provisioning Profile created in Create a Provisioning Profile

1. Click **Upload Profile**.
2. From your computer, select the **`.mobileprovision`** file you just downloaded.
3. Click **Next**.

   ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252F2hlcm4XZRYOnFumwVLEI%252Fios_publish_upload_profile.png%3Falt%3Dmedia%26token%3D1438fc20-7c84-4fa7-be59-4db0db44bddd\&width=768\&dpr=4\&quality=100\&sign=bd0c86a7\&sv=2)

Enter your App Specific Password as created in Generate an app-specific password

1. **Paste your app-specific password** into the provided field in the Thunkable publishing modal.
2. Click **Next**.

   ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FGgp6d5j4SdhUlkG5J9bc%252Fios_publish_copy_app_specific_password.png%3Falt%3Dmedia%26token%3D35884c6d-17ee-4d80-9d36-35aed07d78c4\&width=768\&dpr=4\&quality=100\&sign=f98c003f\&sv=2)

**App Store Connect**

1. Make sure that you have completed the previous step to create an App Listing on App Store Connect
2. Click **Next** to confirm you've created a new app with App Store Connect.

   ![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252F1F3IxvCisjh8EBx3Tpp8%252FiOS%2520Publishing%2520Wizard%2520-%2520App%2520Store%2520Connect.png%3Falt%3Dmedia%26token%3D2ccb94cd-4ff8-4e1c-9bc2-bdb52480a79b\&width=768\&dpr=4\&quality=100\&sign=50865a52\&sv=1)

**App Info**

* **App icon:** This app icon appears when a user downloads your app from the App Store. Recommended size: 1024x1024 px. This icon must not have any transparent pixels.
* **Version Number:** The version number is visible to your users when they download a new version of your app. See here for additional information: Set a Version Number.

![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FgYoZav1W78dzrp8ns410%252FPublish%2520ios.png%3Falt%3Dmedia%26token%3D9a9341a9-f367-4f89-91f5-90c70d3f4667\&width=768\&dpr=4\&quality=100\&sign=5e497f77\&sv=2)

When the necessary fields are populated, click **Submit**.

You should shortly receive an email from Thunkable informing you that your build is being sent to the App Store. There are still a number of steps you need to complete on App Store Connect before your app can be published, but that's everything completed from the Thunkable side of things - congratulations!

Because of Apple's thorough review process, app submissions are sometimes not approved on the first attempt. See here to assist you in troubleshooting the issues Apple flags with your submission: #troubleshooting.

## To update your app <a href="#to-update-your-app" id="to-update-your-app"></a>

Repeat the following steps each time you create a new app:

1. Start the Publishing Process in Thunkable, except for App Store Connect
2. (Optionally) Set a new Version Number
   1. Thunkable automatically handles this process but you may select your own number.
   2. The version number selected must be at least 1 higher than the previous version's number.

## After each successful build <a href="#after-each-successful-build" id="after-each-successful-build"></a>

Once your build has completed, you will receive several emails from Thunkable or Apple. The email from Thunkable will tell you if your build has been successfully sent to App Store Connect or if there is an issue. If there is an issue, follow the instructions in the email or Contact Support with your Reference ID for assistance.

## FAQ

#### **The uploaded build for \<App Name> has one or more issues.**

![](https://docs.thunkable.com/~gitbook/image?url=https%3A%2F%2F1223006790-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LAn5scXl2uqUJUOqkJo-84897653%252Fuploads%252FwyKTjciltENFI0m8eNYT%252Fpublish_ios_entitlements_email.png%3Falt%3Dmedia%26token%3Db5d8e688-9508-4299-86cf-6074f2df81ed\&width=768\&dpr=4\&quality=100\&sign=3fcee84a\&sv=2)

This is merely a notice from Apple, no further action is necessary on your part. They send this because they detect a snippet of code for Push Notifications that is present, but always deployed, in every Thunkable app.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.thunkable.com/ai/publishing/ios-publishing.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
