# Apple App Store Deployment

FlutterFlow allows you to deploy your apps directly to the App Store from within the platform. This guide covers all the necessary prerequisites, a step-by-step deployment process, and common troubleshooting tips.

Prerequisites

* Create an [**Apple account**](https://appleid.apple.com/account?appId=632\&returnUrl=https%3A//developer.apple.com/account/).
* [**Purchase an Apple Developer membership**](https://developer.apple.com/programs/enroll/). Learn more about the program and enrollment process [here](https://developer.apple.com/programs/).
* Set an App Launcher Icon for your app under **Settings & Integrations > General > App Assets**. **Note**: The launcher icon cannot be transparent or contain an alpha channel.
* It's recommended to test your app on a real device before deployment. Follow [**these instructions**](/testing/local-run.md) to test your app locally.

## Deploy to App Store[​](/deployment/apple-app-store-deployment.md#deploy-to-app-store "Direct link to Deploy to App Store")

The App Store deployment involves the following steps:

### 1. Create a Bundle Identifier[​](/deployment/apple-app-store-deployment.md#1-create-a-bundle-identifier "Direct link to 1. Create a Bundle Identifier")

A **Bundle Identifier (ID)** is a **unique string** that identifies your app within the Apple ecosystem, typically formatted in reverse domain name notation like `com.example.myapp`.

To create a Bundle ID, visit the [**Certificates, IDs & Profiles**](https://developer.apple.com/account/resources/identifiers/list) page, add a new **App ID**, and provide these details:

1. **Bundle ID:** Copy the **Package Name** from FlutterFlow.
2. **Description:** Add a brief description of your app.
3. **Capabilities:** Select the necessary app capabilities. Ensure you select **Push Notifications** if your app uses them, and **Sign In with Apple** if your app includes that feature.

### 2. Add New App[​](/deployment/apple-app-store-deployment.md#2-add-new-app "Direct link to 2. Add New App")

[App Store Connect](https://developer.apple.com/help/app-store-connect/get-started/app-store-connect-homepage) is the platform used for submitting apps, managing app metadata, and much more. To add a new app, open the [App Store Connect](https://appstoreconnect.apple.com/) and then follow the official steps outlined [here](https://developer.apple.com/help/app-store-connect/create-an-app-record/add-a-new-app).

### 3. Add Apple App ID to FlutterFlow[​](/deployment/apple-app-store-deployment.md#3-add-apple-app-id-to-flutterflow "Direct link to 3. Add Apple App ID to FlutterFlow")

An App ID is used by Apple to identify your app and associate it with your development team.

To add your App ID to FlutterFlow, go to **[App Store Connect](https://appstoreconnect.apple.com/) > My Apps**, copy your **Apple ID** from **App Information**, and paste it into the **App ID** field in **FlutterFlow > Settings & Integrations > Mobile Deployment > App Store**.

### 4. Generate API key and add to FlutterFlow[​](/deployment/apple-app-store-deployment.md#4-generate-api-key-and-add-to-flutterflow "Direct link to 4. Generate API key and add to FlutterFlow")

To generate your API Key, go to [**App Store Connect**](https://appstoreconnect.apple.com/) > **Users and Access** > **Integrations > [Team Keys](https://appstoreconnect.apple.com/access/integrations/api)**. If you haven't added a key before, you will see a **Request Access** button. For further details, watch a [demo](https://youtu.be/L2BpgVog4so?si=yS9r_PBeORgd6Uhp\&t=240) here.

Generate a new API key by selecting **Add (+)**, entering a name, and assigning the **App Manager** role. Once the key is generated, download it and upload it to **FlutterFlow** under **Settings & Integrations > App Settings > Mobile Deployment > App Store > Private Key**.

### 5. Add issuer ID to FlutterFlow[​](/deployment/apple-app-store-deployment.md#5-add-issuer-id-to-flutterflow "Direct link to 5. Add issuer ID to FlutterFlow")

Copy the **Issuer ID** from [**App Store Connect**](https://appstoreconnect.apple.com/) by navigating to **Users and Access** > **Integrations > [Team Keys](https://appstoreconnect.apple.com/access/integrations/api)**, and then paste it into the **Issuer ID** field under **App Store settings** in FlutterFlow.

### 6. Add Key ID to FlutterFlow[​](/deployment/apple-app-store-deployment.md#6-add-key-id-to-flutterflow "Direct link to 6. Add Key ID to FlutterFlow")

Return to **[App Store Connect](https://appstoreconnect.apple.com/) >** **Users and Access** > **Integrations > [Team Keys](https://appstoreconnect.apple.com/access/integrations/api).** Find the row for the API Key you generated [here](/deployment/apple-app-store-deployment.md#4-generate-api-key-and-add-to-flutterflow), select **Copy Key ID,** and then paste it into the **Key ID** field under **App Store settings** in FlutterFlow.

### 7. Deploy[​](/deployment/apple-app-store-deployment.md#7-deploy "Direct link to 7. Deploy")

To deploy your app from FlutterFlow, go to **Settings & Integrations > App Settings > Mobile Deployment > App Store** and click **Deploy To App Store**. Once deployed, you will receive an email from App Store Connect that a new build has been added to your app.

![deploy-to-appstore.avif](/assets/images/deploy-to-appstore-5aa199888f377af25dcdcfb05c5c4102.avif)

info

* Every time you deploy, we'll auto increment the **Build Number** (i.e., version code in Android) to ensure that each release is identifiable. If needed, you can update the *App Version* and *Build Number* yourself.
* If another deployment is already in progress, deploying a new build will cancel the previous one.
* It may take a few minutes for the request to process. Once completed, the status will be updated to **Submitted**.

tip

If you prefer to manage your deployment process outside of FlutterFlow, such as integrating with your own CI/CD pipeline, or if you want more control over versioning and custom code management directly on GitHub. You also have the option to [**Deploy apps from your GitHub repository**](/deployment/deploy-from-github.md).

### 8. Submit your app for App Store approval[​](/deployment/apple-app-store-deployment.md#8-submit-your-app-for-app-store-approval "Direct link to 8. Submit your app for App Store approval")

From [**App Store Connect**](https://appstoreconnect.apple.com/), select **My Apps** and choose your app. Select **Prepare for Submission**, add the app assets and metadata, and then click **Add for Review**.

![add-for-review.avif](/assets/images/add-for-review-e313a116a9022d701e69edc01833f304.avif)

Your app will now be reviewed by Apple. For additional information on Apple's review guidelines, please see [this link](https://developer.apple.com/app-store/review/guidelines/).

***

## Video guide[​](/deployment/apple-app-store-deployment.md#video-guide "Direct link to Video guide")

Watch this video if you prefer watching a video tutorial.

[Sharing a Project with a User](https://www.youtube.com/embed/4GFMsYep_S0)

***

## FAQs[​](/deployment/apple-app-store-deployment.md#faqs "Direct link to FAQs")

Invalid App Store Icon. The App Store Icon in the asset catalog in 'Runner.app' can't be transparent nor contain an alpha channel.

You need to update your App Launcher Icon (under Settings & Integrations --> General) with an image that isn't transparent and/or doesn't contain an alpha channel.

After submitting my iOS app to the App Store, I am getting an 'ITMS-91053: Missing API declaration' issue. What should I do?

Apple requires that apps using certain APIs have a Privacy Manifest file that declares the [**reason for using the API**](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api). Apple will begin requiring this file for App Store approval on May 1, 2024.

Most packages that FlutterFlow uses already have a Privacy Manifest created by the package author or FlutterFlow team. However, there may be some cases where packages don't have the necessary privacy manifest needed.

Similarly, if you have written custom code that calls these APIs directly or uses a package that calls the APIs, you must ensure that your app has the required manifest file.

Here are the steps you can take to resolve this issue:

1. See if the custom package you use is listed [here](https://developer.apple.com/support/third-party-SDK-requirements/); ensure to use the latest version if you are using any of these.

2. If unsure which package is using protected APIs, you may be able to use a tool like [this](https://github.com/crasowas/app_store_required_privacy_manifest_analyser) to identify them. Once identified, update to the latest versions, as the package author may have addressed compliance issues.

   <!-- -->

   1. To verify, look into the package's changelog or source code for a `PrivacyInfo.privacy` file, which indicates compliance (examples [here](https://github.com/fluttercommunity/plus_plugins/blob/main/packages/share_plus/share_plus/ios/PrivacyInfo.xcprivacy) and [here](https://github.com/flutter/packages/blob/main/packages/url_launcher/url_launcher_ios/ios/Resources/PrivacyInfo.xcprivacy)).
   2. If the current package hasn’t resolved the issue, consider using an alternative package that complies, or contact the package's maintainer for a fix.

3. If you have written a custom iOS code that is accessing the APIs:

   <!-- -->

   1. In FlutterFlow, navigate to **Settings & Integrations > App Settings > Privacy Manifest Configuration**.
   2. Activate the necessary API reasons and select the appropriate reasons from the dropdown. A detailed explanation of each API reason can be found [here](https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api).

![privacy-manifest-configuration](/assets/images/privacy-manifest-configuration-519c68fd856e18c19a57e7c2e76147ab.avif)
