Skip to content
xcross
Documentation menu

Introduction

xcross runs, hot-reloads and debugs Flutter iOS apps on a real iPhone, natively from Windows or Linux, with no Mac required.

xcross reimplements the Flutter iOS run pipeline and the iOS 17+ CoreDevice launch protocol in pure Dart. It prepares your Flutter app with the official Swift and LLVM toolchains, puts it on a physical iPhone with your Apple ID or an App Store Connect API key, launches it, and gives you full hot reload and breakpoints - all from a Windows or Linux machine. No Mac, no Xcode, no macOS anywhere.

Capabilities

FeatureDetails
Native Windows & LinuxRuns directly on the host with official Swift and LLVM toolchains - no macOS VM, no remote Mac. WSL works too, with usbipd-win for the device
Hot reload & hot restartFull r / R workflow on a real iPhone over an iOS 17+ RSD tunnel
Real devices, your Apple IDApple ID (free account works) or App Store Connect API key; provisioning runs in-process
SwiftPM pluginsSwift Package Manager iOS plugins work on both Windows and Linux
IDE debuggingOne command sets up VS Code (F5, breakpoints, DevTools) or JetBrains IDEs via DAP
No Xcode in the loopFlutter’s own engine artifacts are used unmodified; Xcode’s toolchain is never installed or executed

Typical workflow

A full session with xcross looks like this:

  1. One-time machine setup: xcross setup, xcross sdk install, and xcross auth.
  2. Once per device reconnect: xcross tunnel to mount the Developer Disk Image and start the RSD tunnel.
  3. From your Flutter project: xcross flutter run to launch on the device and hot-reload as you edit.
  4. Optionally, xcross ide vscode or xcross ide idea to wire up debugging in your editor.

With multiple iPhones connected, an interactive terminal shows a numbered device picker; pass -u <UDID> for CI or piped runs.

While your app is running

KeyAction
rHot reload
RHot restart
q / Ctrl-C / Ctrl-DQuit

What xcross is not

Importantxcross targets debug (JIT) runs on a device only. Launching with xcross requires iOS 17 or later on the device.

  • Not a release/AOT path. Flutter’s gen_snapshot for iOS AOT only runs on macOS hosts, so release output still requires Flutter’s macOS tooling.
  • Not a Compose Multiplatform tool. xcross currently supports Flutter applications only.
  • Not a full plugin replacement. Plugins that provide only a CocoaPods podspec are skipped with a warning - plugins need ios/<package_name>/Package.swift.
  • Not for older devices. Launching requires iOS 17 or later, since xcross relies on the CoreDevice launch protocol and RSD tunnel introduced in iOS 17.

About the project

xcross is MIT-licensed and developed at github.com/arxdeus/xcross; the current version is shown in the header. It draws on ideas from xtool, which pioneered deploying iOS apps with SwiftPM from Linux and Windows, and from Provision and anisette-v3-server for Apple ID authentication without Apple hardware.

xcross is free and open source. Contributions and bug reports are welcome on GitHub, and the project accepts donations to support ongoing development.

TipNew to xcross? Start with Requirements, then follow Quick start end to end.

Where to go next

  • Requirements - the five host ingredients you need before installing.
  • Installation - install xcross on Windows or Linux.
  • Quick start - set up your machine and run your first app.
  • How it works - a conceptual tour of what happens on every run.
ESC