Run and debug cross-platform
(Flutter / CMP) iOS apps from Windows or Linux.
Build, install, launch and debug on a real iPhone. No Mac. No Xcode.
irm https://raw.githubusercontent.com/arxdeus/xcross/main/install.ps1 | iexcurl -fsSL https://raw.githubusercontent.com/arxdeus/xcross/main/install.sh | shHow it works
Two frameworks. One tool. Zero Macs.
xcross reimplements the iOS build, signing and CoreDevice launch pipeline in pure Dart, on top of the official Swift and LLVM toolchains.
New in 2.0
A rebuilt core, and a lot more of it.
xcross 2.0 is a major reimplementation. Here is what changed for you.
Offline signing
After the first online run, xcross signs from cached profiles. XCROSS_OFFLINE=1 skips Apple entirely.
Your real App ID
Pick the original bundle id or an XCR- one on first run. Saved to the project, so CI agrees.
ARM64 hosts
Native Windows ARM64 builds, signing and self-update, next to Linux arm64.
Read more 2.0Native SwiftPM
SwiftPM resolves the whole plugin graph itself. No clones, no rewritten Package.swift.
SwiftUI + #Preview macros
SwiftUI, Previews and FoundationModels macros expand through a prebuilt Open Apple Macros server.
Read more 2.0Per-framework doctor
flutter doctor and compose doctor check only what each needs, grouped by section.
Capabilities
Everything you need on the device.
Hot reload for Flutter, fast restart for Compose
Flutter gets the full r / R loop. Compose gets --watch: rebuild, reinstall, relaunch, with cached Kotlin/Native builds.
Native on Windows & Linux
x64 and ARM64. No VM, no remote Mac. WSL works too with usbipd-win.
Real debugging
Breakpoints and DevTools in VS Code or JetBrains through DAP.
Your Apple ID, even offline
A free account works. Signing happens in-process, and after the first run it works without a network.
USB or Wi-Fi
Pair once over a cable, then go wireless.
ScopeDevice runs on iOS 17+. Flutter builds are debug (JIT), release still needs a Mac.
Why?Quick start
Four commands to a running app.
- 1
Set up the host
$xcross setup - 2
Extract the iOS SDK (once)
$xcross sdk install ~/Downloads/Xcode.xip - 3
Sign in with an Apple ID
$xcross auth --apple-id you@example.com - 4
Tunnel + run
$xcross tunnel && xcross flutter run
- 1
Set up the host + Kotlin/Native
$xcross setup && xcross compose setup - 2
Extract the iOS SDK (once)
$xcross sdk install ~/Downloads/Xcode.xip - 3
Sign in with an Apple ID
$xcross auth --apple-id you@example.com - 4
Tunnel + run
$xcross tunnel && xcross compose run --watch
Ship to iPhone from the machine you already have.
One installer, one Xcode archive, one free Apple ID. Then hot reload on a real device.
irm https://raw.githubusercontent.com/arxdeus/xcross/main/install.ps1 | iexcurl -fsSL https://raw.githubusercontent.com/arxdeus/xcross/main/install.sh | sh