During debug mode, Flutter uses a virtual machine (VM)
to run its code in order to enable stateful hot reload,
a feature that lets you make changes to your running code
without recompilation. You’ll see a “debug” banner in
the top right-hand corner of your app when running in this mode,
to remind you that performance is not characteristic of
the finished release app.

How does Flutter run my code on iOS?

The engine’s C and C++ code are compiled with LLVM.
The Dart code (both the SDK’s and yours)
are ahead-of-time (AOT) compiled into a native, ARM library.
That library is included in a “runner” iOS project,
and the whole thing is built into an .ipa.
When launched, the app loads the Flutter library. Any rendering,
input or event handling, and so on,
are delegated to the compiled Flutter and app code.
This is similar to the way many game engines work.