Skip to content

build: compile the lux desktop crate for iOS#76

Merged
johncarmack1984 merged 1 commit into
mainfrom
build/ios-compile
Jun 26, 2026
Merged

build: compile the lux desktop crate for iOS#76
johncarmack1984 merged 1 commit into
mainfrom
build/ios-compile

Conversation

@johncarmack1984

Copy link
Copy Markdown
Owner

First step of the iOS brick: make the lux desktop crate compile for iOS, with zero change to desktop behavior. It does not run on iOS yet (no Xcode project scaffolded, no Simulator) — that's the next step. build: so it doesn't cut a release.

The output abstraction already isolates this cleanly: DmxSink has a USB impl (EnttecSink) and a network impl (SacnSink), so iOS keeps sACN-over-WiFi and simply doesn't compile the USB path.

Gated to desktop (real target_os in Cargo.toml so Cargo resolves them only on desktop; #[cfg(desktop)] on the matching code):

  • libftd2xx + enttecopendmx (USB/FTDI) and the tray.rs module + the tray-icon tauri feature — no system tray on iOS, output is found over the network only.
  • tauri-plugin-updater — mobile updates ship through the App Store.

iOS-only: keyring's Apple backend requires the data-protection Keychain (apple-native-keyring-store/protected) on iOS (the only Keychain iOS exposes); keyring's default feature set doesn't enable it, so it's added via an iOS target table.

Everything else compiles for iOS unchanged — the AWS SDK (Cognito), cloud sync, rumqttc/IoT, rustls, and the sACN output path.

Verified: cargo build --target aarch64-apple-ios-sim -p lux --lib is green and warning-free; cargo check -p lux (desktop) still passes, so desktop is unchanged. (The device target aarch64-apple-ios shares the same target_os and dependency set; only the simulator target was built here.) The gen/schemas/{iOS,mobile}-schema.json files are Tauri-generated capability schemas, committed alongside the existing desktop/macOS ones.

Behind this: the in-app output picker (mobile has no tray), gating the updater UI component on mobile, and the local-network entitlement for sACN on a device.

Gate the desktop-only pieces (USB/FTDI via libftd2xx + enttecopendmx, the
system tray + tray-icon feature, and the self-updater) behind target_os so
they're excluded on iOS/Android, and add keyring's data-protection Keychain
backend (apple-native-keyring-store/protected) for iOS. sACN-over-WiFi remains
the output path. No change to desktop behavior.
@johncarmack1984 johncarmack1984 merged commit caec8ee into main Jun 26, 2026
7 checks passed
@johncarmack1984 johncarmack1984 deleted the build/ios-compile branch June 26, 2026 03:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant