# Troubleshoot phone builds and store releases

> This page is about FlutterFlow (the app builder you use by describing your app), not FlutterFlow Studio.

URL: https://docs.flutterflow.io/ffx/troubleshoot-releases

Fix App ID errors, store connection problems, failed phone builds and uploads, and versions that wait on the way to the App Store or Google Play.

Use this page when something goes wrong in [**Releases**](https://docs.flutterflow.io/ffx/glossary#sharing-and-releases) on the way to the App Store or Google Play: the App ID, a store connection, a phone build, a test upload, or store review.

## The App ID won't save {#app-id-wont-save}

**What it means:** FlutterFlow checks the App ID when you save the store listing. If the stores can't use the ID, the **App ID** field explains what's wrong, and the listing shows **Check the App ID.**

**Fix it:**

1. Open **Releases › Store listing › App ID** and read the message under **App ID**.
2. Correct the ID:
   - Use at least two parts separated by dots, such as `com.yourname.app`.
   - Start every part with a letter and use only letters and numbers. iPhone App IDs can't contain underscores.
   - Don't start the ID with `com.example.`, which Google Play refuses.
   - Replace any part that the message flags as a reserved word on Android.
3. Select **Save changes**.

Only an owner can set the App ID. See [App ID](https://docs.flutterflow.io/ffx/app-details#app-id).

## A build or submission says your app has no App ID {#no-app-id}

**What it means:** Your app doesn't have a saved App ID yet. Until an owner saves one, the **App ID** panel shows a suggested ID with a **Suggested** chip. A phone build stops with "The app needs an app id.", a review submission stops with "This project has no app ID.", and the store setup step says "Save the App ID in the store listing first. Store app records cannot change their App ID."

**Fix it:**

1. Open **Releases › Store listing › App ID**.
2. Select **Use suggestion** to keep the suggested ID, or select **Enter manually** and type your own ID in **App ID**.
3. Select **Save changes**.
4. Restart the build or submission.

Save the App ID before creating your app in App Store Connect or Play Console, because store app records can't change their App ID later. See [App ID](https://docs.flutterflow.io/ffx/app-details#app-id).

## Apple won't accept your App ID {#apple-wont-accept-app-id}

**What it means:** Your app uses the same App ID in both stores. Android App IDs allow underscores, but iPhone App IDs don't, so an iPhone build stops when the App ID contains an underscore. The message states that Apple refuses the ID and asks you to use only letters, digits, and dots.

**Fix it:**

1. Open **Releases › Store listing › App ID** and select **Change App ID…**.
2. In **Change the App ID?**, select **Change App ID**.
3. Enter an ID without underscores in **App ID**, and then select **Save changes**.
4. In **On your phone**, select **Prepare for TestFlight** (or **Prepare 0.1 for TestFlight** with your version number).

If your app is already in a store, changing the App ID creates a separate store app without your existing downloads or reviews. See [Change the App ID](https://docs.flutterflow.io/ffx/app-details#change-app-id).

## Apple or Google refuses your key when you connect {#store-key-refused}

**What it means:** FlutterFlow checks your key with Apple or Google before saving it. If the check fails, the connect step explains what's wrong and doesn't save the key.

**Fix it:**

1. Read the message in the connect step.
2. Fix the issue named in the message:
   - **Apple:** Choose the unmodified `.p8` file that Apple let you download when you made the key. Confirm that the **Key ID** matches that file and the **Issuer ID** matches your team.
   - **Google:** Choose the unmodified service-account `.json` key that Google Cloud downloaded. An OAuth client JSON file doesn't work.
3. Select **Connect** for Apple or **Save key** for Google. If a step in **Set up with Google** failed, select **Try again**.

If the message says "Couldn’t reach App Store Connect to check the key." or "Couldn’t reach Google to check the key.", wait a minute and try again.

See [Connect App Store Connect](https://docs.flutterflow.io/ffx/connect-app-store) or [Connect Google Play](https://docs.flutterflow.io/ffx/connect-google-play).

## A store connection shows Needs attention {#store-needs-attention}

**What it means:** Apple or Google refused FlutterFlow's last request using your app's key. The store's card in **Releases** says **App Store Connect connection failed** or **Play Console connection failed**, and the account shows **Needs attention**. The connect step says "App Store Connect refused FlutterFlow’s last request with this key." or "Play Console refused FlutterFlow’s last request with this key.", followed by the store's reason.

**Fix it:**

1. On the store's card, select **Reconnect** and read the store's reason.
2. Create a new key for the same account (from the same Apple team for Apple, or for the same service account for Google).
3. Upload the new key:
   - **Apple:** Enter the key's details and select **Reconnect**.
   - **Google:** Select **Set up with Google**, or select **Set up manually**, add the `.json` file, and select **Replace key**.
4. For Google, confirm that the service account still has its permissions in Play Console.

The new key updates the connection for every app that uses it. Only the owner of the account that holds the store connection can reconnect it; if you can't, the step names who can.

<Mock name="store-needs-attention" alt="The App Store card on Releases showing App Store Connect connection failed and App Store Connect refused FlutterFlow’s last request with this key, with the Set up step in amber, Needs a fix, and the Reconnect button." />

See [Connect App Store Connect](https://docs.flutterflow.io/ffx/connect-app-store) or [Connect Google Play](https://docs.flutterflow.io/ffx/connect-google-play).

## Google Play shows Key saved, not Connected {#key-saved-not-connected}

**What it means:** FlutterFlow saved your Google key, but hasn't reached your app in Play Console with it yet. The **Google Play** drawer shows **Google Play account · Key saved**, and changes to **Connected** once all of the following are true:

- You invited the service account in Play Console with the required permissions.
- You saved your App ID.
- You created your app in Play Console with that App ID and uploaded its first file there.

**Fix it:**

1. In the **Connect FlutterFlow to Google Play** step, follow **2. Grant Play Console access** to invite the service account. New permissions can take a few minutes to apply.
2. Save your App ID in **Releases › Store listing › App ID**.
3. Create your app in Play Console and upload its first file.

Once FlutterFlow reaches your app, **2. Grant Play Console access** shows **FlutterFlow found your app in Google Play.** See [Grant Play Console access](https://docs.flutterflow.io/ffx/connect-google-play#grant-access) and [Add to Play Console](https://docs.flutterflow.io/ffx/add-to-play-console).

## FlutterFlow is waiting for your app in a store's console {#waiting-for-app-record}

**What it means:** FlutterFlow uploads a version only after your app exists in App Store Connect or Play Console with your App ID. Until then, the store's card says "Create the app in App Store Connect before uploading to TestFlight." or "Create the app in Play Console before uploading to Google Play.", and **On your phone** for iPhone shows **Waiting for the app in App Store Connect**. FlutterFlow checks for the app periodically and uploads the version once it finds it. If the app still isn't in the console after about a day, the upload fails; create the app and send the version to testers again. See [An upload to TestFlight or Google Play failed](#store-upload-failed).

**Fix it:**

1. Create the app in App Store Connect or Play Console using the exact App ID in **Releases › Store listing** and the account shown under **Store account**.
2. For Google Play, upload the app's first file in Play Console and confirm that the service account has access. See [Google Play shows Key saved, not Connected](#key-saved-not-connected).
3. In **Releases**, open **Add *your app* in App Store Connect** or **Add *your app* in Play Console**. While the step is open, FlutterFlow checks for your app and shows **App found.** once it finds it.

See [Add to App Store Connect](https://docs.flutterflow.io/ffx/add-to-app-store) or [Add to Play Console](https://docs.flutterflow.io/ffx/add-to-play-console).

## A phone build failed {#phone-build-failed}

**What it means:** FlutterFlow couldn't build your app for the phone. **On your phone** in **Releases** says **Couldn’t prepare the iPhone app.** or **Couldn’t prepare the Android app.**, followed by the reason. If an earlier Android build is still available, the **Android app** row shows **Ready**, its version, and **Latest build failed.** instead. To read a long reason in full, open **Error details** on a computer or select **Details** on a phone.

**Fix it:**

1. Match the reason to the following table:

   | The reason says | What to do |
   | --- | --- |
   | "The build machine stopped responding. Build again." | Build again. |
   | "The app’s icon could not be fetched. Build again." | Build again. |
   | The app's icon isn't a readable PNG or must be square | Set the icon again in **App icon**. See [App icon](https://docs.flutterflow.io/ffx/app-icon). |
   | The build machines are being moved | See [A build says the build machines are being moved](#build-machines-moved). |
   | A file exceeds the size limit | See [A build says the app file is too large](#app-file-too-large). |
   | The App Store takes a version of up to three numbers | See [The App Store won't take this version number](#app-store-version-number). |
2. Select **Try again**.

If the build fails the same way again without a clear fix, [send us feedback](https://docs.flutterflow.io/ffx/send-feedback).

<Mock name="phone-build-failed" alt="The On your phone panel with the iPhone app row saying Couldn’t prepare the iPhone app, its reason, and Try again." />

## A build says the build machines are being moved {#build-machines-moved}

A phone build shows "Couldn’t prepare the Android app." or "Couldn’t prepare the iPhone app.". If an earlier Android build is still ready, the Android row shows its version followed by "Latest build failed." instead. Below that line, the message reads "The build machines are being moved to Flutter {flutter}. Build again in a little while.", with a version number in place of {flutter}.

**What it means:** FlutterFlow builds every app with the same version of its build tools, and the machine that ran your build had a different version. Your app has no error; wait for FlutterFlow to finish updating its build machines.

**Fix it:**

1. Wait a while.
2. Select **Try again** to build again.

## A build says the app file is too large {#app-file-too-large}

**What it means:** The Android APK or iPhone `.ipa` file exceeds the size limit, so the build stops. The reason starts with "The APK is" or "The .ipa is" and states the file's size and the limit.

**Fix it:** [Send us feedback](https://docs.flutterflow.io/ffx/send-feedback) with the reason from the build.

## The App Store won't take this version number {#app-store-version-number}

**What it means:** The App Store requires a version number of up to three numbers, such as `1.2.3`. If your app's version number uses another format, the iPhone build stops and states what the App Store accepts.

**Fix it:**

Your app's version number lives in the app's code rather than in a settings panel. To change it, ask the agent in a thread:

> Example request: "Change my app's version number to 1.0."

For iPhone builds, the version number takes up to three whole numbers separated by dots (such as `1.2.3`), each up to nine digits with no leading zeros (version `1.02` fails on iPhone). Push the change to your app so the next version you send to testers uses the new number.

Then send the new version to testers and submit it for review.

## An upload to TestFlight or Google Play failed {#store-upload-failed}

**What it means:** FlutterFlow built the version, but TestFlight or Google Play refused the upload. The store's card says **Upload of 0.1 to TestFlight failed** or **Upload of 0.1 to Google Play failed** (with your version number), and shows any reason returned by the store.

**Fix it:**

1. Read the reason and fix what it names.
2. Select **Try again**. FlutterFlow uploads the version again, or prepares a new build if the store can't accept the existing one.

See [Send to testers](https://docs.flutterflow.io/ffx/send-to-testers).

## Your testers don't get the first Google Play test upload {#play-test-draft}

**What it means:** Google Play holds your first test upload as a draft until you start its rollout in Play Console. The **Google Play** card says **Roll out 0.1 in Play Console** (with your version number).

**Fix it:**

1. On the **Google Play** card, select **Open Play Console**.
2. In Play Console, start the rollout of the draft test release.

Later test uploads roll out automatically. See [First Google Play rollout](https://docs.flutterflow.io/ffx/send-to-testers#roll-out-in-play-console).

## Google Play takes test versions but not releases for everyone {#google-release-access}

**What it means:** Google Play accepts your test versions, but your Google Play account can't release the app to everyone yet. A new personal developer account must have 12 testers opted in to a closed test continuously for 14 days before applying for production access. FlutterFlow doesn't track your testers or days. The **Google Play** card says **Apply for production access**.

**Fix it:**

1. Run your closed test until it meets Google's requirement.
2. On the **Google Play** card, select **Apply in Play Console** and submit your application there.
3. In FlutterFlow, select **I’ve applied**.

While Google reviews your request, the card shows **Google is reviewing your production access request**. If you selected **I’ve applied** too early, select **I haven’t applied yet**. See [Google's rule for new accounts](https://docs.flutterflow.io/ffx/testers#google-testing-rule).

## App Store Connect already has this version number {#version-number-taken}

**What it means:** App Store Connect already has a version with your app's version number, and Apple doesn't allow duplicate version numbers. The **App Store** card says **Submission of 0.1 to Apple is blocked** and states that the version is already in App Store Connect.

**Fix it:**

Your app's version number lives in the app's code rather than in a settings panel. To change it, ask the agent in a thread:

> Example request: "Change my app's version number to 1.0."

For iPhone builds, the version number takes up to three whole numbers separated by dots (such as `1.2.3`), each up to nine digits with no leading zeros (version `1.02` fails on iPhone). Push the change to your app so the next version you send to testers uses the new number.

Then send the new version to testers and submit it for review.

## Submitting a version for review is blocked {#submission-blocked}

**What it means:** The store won't accept the version for review yet. The store's card says **Submission of 0.1 to Apple is blocked** or **Submission of 0.1 to Google is blocked** (with your version number) and states the reason.

**Fix it:**

1. Read the reason. To inspect the version, select **Open 0.1**.
2. Fix what the reason names. For store listing details, edit **Releases › Store listing**.
3. Submit the version for review again.

See [Submit for review](https://docs.flutterflow.io/ffx/submit-for-review).

## Google didn't approve a version {#google-didnt-approve}

**What it means:** Google reviewed the version and didn't approve it. The **Google Play** card says **Google didn’t approve 0.1** (with your version number). Google provides the reason in Play Console rather than in FlutterFlow.

**Fix it:**

1. On the **Google Play** card, select **Open Play Console** and read Google's reason.
2. Fix what Google asks for. If your app needs changes, ask the agent in a thread and push the changes.
3. Send the new version to testers, and then submit it for review.

## Apple requested changes {#apple-requested-changes}

**What it means:** Apple reviewed the version and requested changes. The **App Store** card says **Apple requested changes to 0.1** (with your version number) and includes Apple's message when available.

**Fix it:**

1. Select **Fix with the agent** to change your app, or select **Reply in App Store Connect** to answer Apple directly.
2. Submit the version again.

See [Apple change requests](https://docs.flutterflow.io/ffx/apple-requested-changes).

## A version waits in review or in a store's console {#review-states}

**What it means:** After you submit a version, the store's card in **Releases** shows whether the next step belongs to the store or to you (with your version number in place of `0.1`):

| The card says | What to do |
| --- | --- |
| **Apple is reviewing 0.1** or **Google is reviewing 0.1** | Wait for the store's decision. |
| **Finish in App Store Connect**, with "Action required for 0.1 in App Store Connect." | Select **Open App Store Connect** and complete the requested action. |
| **See App Store Connect**, with "Check the status of 0.1 in App Store Connect." | Select **Open App Store Connect** and check the version's status. |
| **Roll 0.1 out in Play Console** | Select **Open Play Console** and start the rollout of the draft release. |
| **Send 0.1 for review in Play Console** | Select **Open Play Console** and send the release to Google for review. |
| **Publish 0.1 in Play Console** | Google approved the version. Select **Open Play Console** and publish it. |
| **Finish in Play Console** | Select **Open Play Console** to finish or resume the rollout, or check the release's status. |

**Fix it:**

1. Read the card's title and the line under it.
2. Select **Open App Store Connect** or **Open Play Console** if shown, and complete the step there.

See [Release status](https://docs.flutterflow.io/ffx/release-status).
