Skip to content

AI & TechnologyExpo and Flutter Build Errors: 12 Fixes (2026)

Disclosure: App369 publishes this guide and sells a fixed-price App Fix Ticket for single bugs like these.

Key takeaways

  • EAS Build uploads your project without anything listed in .gitignore, so a file or .env value that exists only on your machine is missing on the build server.
  • Each Expo Go build runs one SDK version, and Expo Go on the Apple App Store stops at SDK 54.
  • An EAS Update only reaches builds with the same runtime version, on a channel linked to the branch you published to.
  • "Unsupported class file major version" means the Java running your Flutter build is newer than your Gradle can handle.
  • From Android 9, apps can't use plain http:// addresses unless they opt in for that domain.

Pricing an app? Try the free app cost calculator or get a range for your project in the instant quote.

Short answer: a mobile build error tells you which layer failed: the cloud build, the native iOS or Android toolchain, the store setup, or the release build itself. Find your error below; each one links to a full fix page checked against the documentation from Expo, Flutter, Apple, Google, Firebase or RevenueCat.

Mobile build errors are easiest to fix once you know whether the build, the store or the running app failed. The 12 errors below stop Expo and Flutter apps from building, reaching testers or working after release, including apps generated by AI builders. Facts about each tool come from its own documentation, as checked on the linked fix page; the advice on what to do and in which order is App369’s.

Expo and EAS

Expo apps fail in five places: the EAS cloud build, the release build, EAS Update, Expo Go and push notifications. Each has its own fix page.

EAS build failed, but the app runs locally

Expo’s troubleshooting guide says: “When you run eas build, your project’s files are uploaded to Expo’s build servers. However, any file or directory mentioned in the .gitignore is not uploaded.” Values from .env are missing for the same reason, so add them as EAS environment variables. If the JavaScript doesn’t bundle, run npx expo export locally to see the error faster. Full steps: Expo EAS build failed.

Works in Expo Go, crashes in TestFlight or production

Read the crash report first: the Crashes Organizer in Xcode for iOS, the Play Console for Android. Then, as Expo’s runtime debugging guide puts it, “Running your app in production mode locally will show errors that normally wouldn’t be thrown.” Full steps: Expo app crashes in production.

EAS Update published, app still shows the old version

By default, according to Expo’s download updates docs, “the end user will only load the update when they cold boot the app after an update has been published, and then at some point kill and restart the app.” If restarts don’t help, check the runtime version and the channel the build uses. Full steps: EAS Update not showing.

“Project is incompatible with this version of Expo Go”

Each Expo Go build runs one SDK version. According to Expo’s version mismatch guide, “Expo Go on the Apple App Store stops at SDK 54, and SDK 55 and later are not available there.” For SDK 55 and later on iPhone, build Expo Go with eas go or use a development build. Full steps: Expo Go project incompatible.

Expo push notifications not arriving

Read the push ticket and the push receipt before changing anything: the receipt says whether Apple or Google took the message, with an error code if not. Works in development but not in the store build points to production credentials that are wrong or missing. Full steps: Expo push notifications not working.

Flutter and iOS

iOS builds fail on the native side: CocoaPods, push setup, code signing and App Store Connect. These four errors come from the native iOS toolchain and App Store Connect, not from Dart.

Flutter iOS build fails at pod install

A plugin upgrade asks for a newer native pod than ios/Podfile.lock records. According to the CocoaPods guide, “When you run pod install, it only resolves dependencies for pods that are not already listed in the Podfile.lock.” Update just the pod it names, or raise the iOS deployment target if the output asks for it. Full steps: Flutter pod install failed.

“APNS token has not been set yet”

FCM was called before iOS delivered the APNs token. Firebase’s Flutter guide says: “In iOS SDK 10.4.0 and higher, it is required that the APNs token is available before making API requests.” Request permission, wait for getAPNSToken(), and check push is enabled in Xcode with an APNs key uploaded to Firebase. Full steps: Flutter APNS token not set.

Signing for “Runner” requires a development team

No team is selected for the Runner target. In Xcode, open Signing & Capabilities and pick your team; if it isn’t listed, add the Apple account you use for the Apple Developer Program. Check the Bundle Identifier matches the App ID you registered. Full steps: Xcode signing requires a development team.

TestFlight build stuck on “Missing Compliance”

Each new version waits for the export compliance answers before testers can install it. Answer them on the build in App Store Connect, and add ITSAppUsesNonExemptEncryption to Info.plist so later builds don’t ask again. Full steps: TestFlight Missing Compliance.

Android

Android build and network errors can appear after a tool update or an Android version change, with no change to your code. These two errors are specific to Android.

“Unsupported class file major version”

The Flutter Java and Gradle guide says this “is an indication that your Java version is newer than the version of Gradle you are running can handle.” Flutter builds with the Java bundled with Android Studio, so an Android Studio update can cause it. Run flutter analyze --suggestions and update Gradle. Full steps: Unsupported class file major version.

http:// requests blocked: cleartext not permitted

According to Android’s network security docs, “Starting with Android 9 (API level 28), cleartext support is disabled by default.” Serve the API over HTTPS, or allow cleartext only for one domain in a Network Security Configuration. Full steps: Android cleartext blocked.

In-app purchases

Purchases depend on store agreements and product setup as much as on code, so a store build can show no products with nothing wrong in the app.

RevenueCat: products could not be fetched

Check the store agreements and banking, that product IDs match exactly, and that each platform uses its own RevenueCat API key. On Android, RevenueCat’s docs say: “Google Play requires all apps to be published on a closed track before products can be fetched, even when just testing.” Full steps: RevenueCat products could not be fetched.

Which to check first

The fastest route is the first error in the build log, not the last. App369’s full order for a mobile app that just stopped building or started crashing:

  1. Note where it fails: the cloud build, the local native build, the store upload, or the app at runtime.
  2. Read the first error in the build log, and search for the exact message.
  3. Compare what the build server sees with your machine: files in .gitignore, .env values, Java and CocoaPods versions.
  4. For a crash, read the crash report, then run a release build locally.
  5. Check what changed since the last good build: packages, SDK version, Android Studio or Xcode.

The /fix/ index lists every fix by platform. For testing before release, see the mobile app beta testing and crash reporting guide.

Need a hand?

App369 fixes single build and release bugs at a fixed price. If one bug is the whole problem, the App Fix Ticket covers it in two fixed-price steps: a $450 diagnosis that finds the root cause and gives you a fixed quote for the fix, then the fix itself. If the app was built with an AI builder and more is going on, the AI-Built App Rescue starts with a Launch Check of the whole app. Or describe the problem and get a written quote.

Want this done at a fixed price?

Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.

Frequently asked questions

Why does my Expo app build locally but fail on EAS Build?
EAS uploads your project without the files listed in .gitignore, which usually includes .env. An import of an ignored file fails, and values from .env are empty unless you add them as EAS environment variables. Check the path in the error against .gitignore.
Why does my Expo app work in Expo Go but crash in TestFlight?
A release build behaves differently from development, and values from .env may be missing from the build. Read the crash report in Xcode's Crashes Organizer or the Play Console, then run the app locally in production mode to see the error.
Why did my Flutter Android build break when nothing in the project changed?
Android Studio may have updated the Java it bundles, and Flutter builds with that Java. If the new Java is newer than your Gradle can handle, the build fails with "Unsupported class file major version". Run flutter analyze --suggestions and update Gradle to a compatible version.
Can App369 fix a mobile build error for me?
Yes. The App Fix Ticket covers one reproducible bug in two fixed-price steps: a $450 diagnosis that finds the root cause and gives you a fixed quote for the fix, then the fix itself.

Sources

  1. Expo docs, Troubleshoot build errors and crashes
  2. Expo docs, Debugging runtime issues
  3. Expo docs, Download updates
  4. Expo docs, Expo Go version mismatch
  5. CocoaPods guides, pod install vs. pod update
  6. Firebase docs, Get started with FCM in Flutter apps
  7. Flutter docs, Android Java Gradle migration guide
  8. Android Developers, Network security configuration
  9. RevenueCat docs, Troubleshooting empty products and offerings
Tags
#expo build errors #flutter build errors #eas build failed #expo app crashes in production #flutter pod install failed #unsupported class file major version #testflight missing compliance #revenuecat products could not be fetched
Share:

Related Resources

Related guides