Quick answer: Unity Burst-compiled jobs falling back to managed at runtime on iOS/Android? Burst code must be AOT-compiled at build time — check Burst Inspector for errors and enable Burst on target platform.

A job runs at fast Burst speeds in the editor and slow managed speed on device. Burst didn’t compile that job for the target platform.

Burst AOT Settings

Project Settings → Burst AOT Settings. Ensure your target platforms are enabled and the right CPU targets selected (ARM64 for modern mobile). Disable platforms you don’t ship to keep build time down.

Burst Inspector

Window → Burst Inspector. Each Burst job has a status line per platform — Native means compiled, Managed means fell back. Click the job to see the error: unsupported instruction, container, or function call.

Common Causes

Calling managed APIs from a Burst job (string ops, GameObjects, Debug.Log), using non-blittable types, or accessing static fields. Replace with NativeContainers and FixedString.

Synchronous Compile (Dev)

For repro, use [BurstCompile(CompileSynchronously = true)] — errors surface immediately rather than on the first job run.

Verifying

Burst Inspector reports Native for all jobs on device. Profile on mobile and the job time matches editor Burst, not editor Mono.

“Burst must be AOT-compiled per platform. Check the inspector and fix the errors it lists.”

Wire a Burst Inspector check into your CI — fail the build if any job is Managed for a shipped platform.