Game Won't Export? 7 Common Fixes That Actually Work
A game that won't export has already compiled and runs — the failure is the step that packages it for a specific platform such as Android, iOS, or the web. Export errors are a distinct class from build errors, which stop compilation, and runtime bugs, which only appear during play. Almost every export failure traces to one of seven causes: a missing or version-mismatched Godot export template, the wrong scripting backend in Unity where ARM64 needs IL2CPP, an unsigned Android keystore, missing iOS certificates and provisioning profiles, an unmet store requirement such as Google Play's API level 35 target, resources filtered out of the export preset, or a corrupted cache. This guide walks each fix for Godot, Unity, GameMaker, and MonoGame, with the exact settings and a diagnostic order that works in any engine.
A game that fails to export has already done the hard part — it compiles, it runs, you can play it in the editor or even as a desktop build. The failure is the step after that: packaging the runnable game for a specific platform such as Android, iOS, or the web. Export errors are a distinct class from build errors, which stop compilation, and runtime bugs, which only appear during play. They almost always trace to a small number of platform-config issues rather than anything wrong with your gameplay code.
This guide walks the seven export failures that recur across Godot, Unity, GameMaker, and MonoGame, with the exact setting behind each and a diagnostic order that works in any engine. The rule throughout is simple: read the export log, find the stage that fails, and fix the configuration it names.
One thing to internalize before the fixes: export errors are rarely about your code. They are about the bridge between "a game that runs on my machine" and "a signed package a store will accept" — keystores, certificates, export templates, target architectures, and SDK versions. The fixes below address those bridges.
Build error, export error, or runtime bug?
The useful distinction is which stage fails.
| Build error | Export error | Runtime bug | |
|---|---|---|---|
| When it fails | Compiling or packaging the project | Producing a platform-specific package | While the game is running |
| Result | No runnable build at all | A desktop build may work, but Android, iOS, or web does not | A build runs but misbehaves |
| Typical cause | Code that will not compile, missing assets | Platform config: templates, signing, architecture, SDK | Logic that compiles but is wrong at play time |
| Where to look | The compile log | The export log | The running game |
If your game runs in the editor and even produces a Windows build, but the Android export hangs or throws, you are in the export-error column, and the rest of this guide applies. For failures that happen before you have a runnable build, read the companion piece on build errors instead.
The diagnostic order (works in any engine)
- Read the export log. Export failures almost always name the missing piece — "no export template", "no keystore set", "ARM64 not selected", "provisioning profile not found". That message is the fix.
- Identify the stage. Does it fail at template load, code generation for the target (IL2CPP), signing, or the final package step? Each maps to one of the fixes below.
- Check the target's requirements, not just your project. Stores raise their requirements over time, so an export that worked last year can fail today because Google Play now demands a newer API level.
The seven fixes
1. Install the matching export templates (Godot)
Godot exports through per-platform export templates — prebuilt binaries that do the actual packaging. If the template for your target is missing, or if its version does not match your editor exactly, the export fails with a "templates missing" or version-mismatch message. This is the single most common Godot export failure.
Install them from Editor → Manage Export Templates → Download and Install, for the exact editor version you run. Two gotchas: the template version must match the editor down to the patch (a 4.5.1 editor needs 4.5.1 templates), and if you use the .NET/C# build of Godot you need the mono templates, not the standard ones. Re-download after every editor upgrade.
2. Switch to IL2CPP and enable ARM64 (Unity mobile)
Google Play has required 64-bit (ARM64) Android packages since 2019, and Apple requires 64-bit for iOS. In Unity, ARM64 is only available with the IL2CPP scripting backend — the Mono backend does not support ARM64 on mobile at all. An export configured for Mono, or with ARM64 unticked, therefore fails store requirements even though it builds.
The fix is in Player Settings → Other Settings: set Scripting Backend to IL2CPP, then under Target Architecture enable ARM64. IL2CPP builds are slower to produce, which is a separate problem covered in the guide to slow builds, but it is the only path to a store-accepted mobile package.
3. Set up Android signing (keystore)
An unsigned Android package cannot be uploaded to a store, and most engines refuse to produce a release build without a keystore configured. The failure shows up as a signing error at the end of the export or a "package not signed" rejection from the Play Console.
Create a keystore once (Unity does this in Player Settings → Publishing Settings; the underlying tool is the Android keytool command) and point your export preset at it, with the alias and passwords filled in. Keep the keystore and its passwords safe — losing the store keystore means you cannot update the app under the same listing.
4. Sort out iOS certificates and provisioning
iOS export is the strictest because Apple ties every build to a signing identity. To export for iOS you need an Apple Developer Program membership (99 USD per year), a signing certificate, a provisioning profile that lists your app's bundle ID and your test devices, and a Mac running Xcode — there is no supported path to produce an iOS store build from Windows or Linux. The export fails when any of these is missing, expired, or mismatched.
Generate the certificate and profile in the Apple Developer portal, download them, and reference them in your engine's iOS export settings (or, in Unity, let Xcode manage signing when you build an Xcode project). Add the device you want to test on to the profile first, or the build installs on nothing.
5. Meet the store's target API level and SDK
Stores raise their required platform versions on a schedule, and an export that targets an older level is rejected — often after the export succeeds, at upload time. Google Play now requires new apps and updates to target Android 15 (API level 35); the same bar applies to existing apps to stay visible on newer devices. Apple requires a 64-bit package built with a current Xcode, and the App Store periodically raises the minimum iOS version it accepts.
In your export settings, set the target to the current required level, keep the platform SDK and build tools up to date, and rebuild. This is a moving target, so check the store's current requirement before each release rather than trusting last year's setup.
6. Check your export preset's resource and scene filters
An export can finish cleanly and then crash on the device because a resource the game needs was filtered out of the package. In Godot, the export preset's resource filters decide what ships; a filtered-out scene or asset exists in the editor but not in the exported game. In Unity, the equivalent is the Scenes In Build list in Build Settings — a scene referenced from code but absent from that list works in the editor and is missing from the build.
Open the preset, confirm every scene and asset the game loads at runtime is included, and export again. This failure often looks like a runtime bug ("my level is blank") but is really an export-config gap.
7. Clean the export cache
A few export failures have no logical cause — an asset that packaged fine yesterday now fails, or the export breaks on one machine and not another. The cause is a corrupted intermediate cache, and the fix is a clean re-export. This is the one case where clearing the cache first is correct, because there is no real misconfiguration to read.
| Engine | What to clean | Notes |
|---|---|---|
| Unity | Delete Library, Temp, and the obj folders | Forces a full re-import; next export is slower |
| Godot | Delete .godot/imported (or the whole .godot folder) | Re-imports every asset on next open |
| MonoGame / .NET | dotnet clean, or delete bin and obj | Recompiles from scratch |
| GameMaker | Clean Build in the build menu | Clears cached compile output |
Always clean on a backed-up project, and prefer the engine's own clean command where it has one.
Preventing export failures
Most export problems are process, not code.
- Export early, to every target. The longer you go without testing the Android or iOS export, the more changes pile up that could have broken it. An export that runs in CI on every check-in catches regressions while the cause is still recent.
- Keep one known-good export preset per platform, checked into source control. When a target breaks, diff against the preset that last worked.
- Re-check store requirements before each release. API levels and SDK minimums move; a target that was fine at your last launch may now be rejected.
- Treat signing credentials as infrastructure. Store the keystore, certificates, and profiles somewhere durable, and record which app uses which. Recreating a lost keystore means a new store listing.
- Pin toolchain versions — editor, SDK, export templates — so an upgrade cannot silently break an export between developers or machines.
If the export itself is not the problem but the broader publishing process is — choosing stores, signing up, submitting — see the guide to publishing on all platforms, and for why you would target many platforms at all, multiplatform export explained.
How Egmatic fits
Egmatic is a 2D IDE and engine built on MonoGame, and that shapes the export story in a way that removes a few of these failure classes outright. There is no IL2CPP step, so the ARM64 and scripting-backend trap in fix 2 does not exist; the game compiles with the standard .NET toolchain and produces platform packages through the regular MonoGame pipeline. The content pipeline (MGCB) processes every asset at build time and reports a missing or invalid asset as a named error, which is exactly the gap fix 6 describes — a filtered-out or broken asset surfaces as an explicit message, not a blank screen on the device. And the live preview lets you run the game inside the editor without a full export, so most issues are caught before the export step rather than during it.
The trade-off is that MonoGame's mobile and console paths are more manual than Unity's or Godot's — you bring the platform SDK and signing setup yourself. For desktop platforms (Windows, macOS, Linux) the path is straightforward. If you want the foundation Egmatic compiles to, the MonoGame explainer covers it, and for telling an export failure apart from a compile failure, the build errors guide is the companion piece to this one.
The bottom line
An export failure is a packaging problem, not a gameplay problem. Your game works; the bridge to the platform is misconfigured. Read the export log, find which stage fails — templates, scripting backend, signing, store requirements, resource filters, or cache — and fix that configuration. Do it early, on every target, and export failures stop blocking your release.