Skip to content
xcross
Documentation menu

How it works

What happens when you run xcross flutter run or xcross compose run, from source to a running app on an iPhone.

xcross does not wrap Apple’s tools. It reimplements the iOS build, signing and launch pipeline in pure Dart, on top of the official Swift and LLVM compilers.

Shared pipeline

Both frameworks end in the same place: a signed .app launched over the iOS 17+ CoreDevice tunnel.

Compileframework-specific
Link Runnerclang + ld64.lld
Signin-process, no codesign
Installpymobiledevice3
LaunchCoreDevice RSD tunnel

Per framework

Engine artifactsthe exact engine your Flutter SDK pins
Kernel compilefrontend_server → app.dill (JIT)
SwiftPM pluginsbuilt into one libFlutterPluginsGenerated.dylib
Hot reloadDevFS upload + reloadSources over the VM Service

Why no Mac is needed

Darwin SDKExtracted once from Xcode.xip by pure-Dart readers.
Upstream compilersSwift + LLVM target iOS from any host.
Native signingApple Developer Services, spoken directly.
Open device protocolspymobiledevice3 over USB or Wi-Fi.

The only thing that truly needs macOS is Flutter’s AOT gen_snapshot, which is why Flutter runs are debug (JIT) only.

Deep dive: Architecture.

ESC