build: compile the lux desktop crate for iOS#76
Merged
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
First step of the iOS brick: make the
luxdesktop 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:
DmxSinkhas 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_osin Cargo.toml so Cargo resolves them only on desktop;#[cfg(desktop)]on the matching code):libftd2xx+enttecopendmx(USB/FTDI) and thetray.rsmodule + thetray-icontauri 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 --libis green and warning-free;cargo check -p lux(desktop) still passes, so desktop is unchanged. (The device targetaarch64-apple-iosshares the sametarget_osand dependency set; only the simulator target was built here.) Thegen/schemas/{iOS,mobile}-schema.jsonfiles 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.