Skip to main content

Linux support and configuration

The released archive targets Ubuntu 24.04 ARM64. The validated setup uses an Apple-hardware Linux VM, Swift 6.4.2, Swift Build 6.4.0, and SDK data from Xcode.

Platform coverage​

OperationStatus
Build iOS apps and extensionsSupported by the experimental Linux engine.
Sign development iPhone productsSupported with a P12 identity and matching profiles.
Discover, install, launch, stop, and log an iPhone appValidated through Linux USB and Wi-Fi.
Build iOS unit and UI test productsSupported, including the documented automatic manifests.
Execute Apple testsRequires a Mac with Xcode.
Operate an iOS SimulatorRequires a Mac.
Build macOS appsSupported for the validated resource and compiler paths; native execution requires a Mac.
Build tvOS, watchOS, and visionOS simulator targetsCompilation and linking coverage exists; runtime and device signing remain unverified.
Build Mac Catalyst targets on LinuxRemains unverified.
Export a development iOS IPASupported from a signed device archive.
Export distribution IPAs or custom export optionsRequires Xcode.
Debug a device or inspect device readiness on LinuxUnsupported.

Current Xcode and Swift Build reject deprecated WatchKit extension products. Use modern standalone watchOS apps for new platform validation.

Project and resource support​

The portable build path covers these common inputs:

  • Local and remote Swift packages, including binary XCFrameworks
  • Swift, Objective-C, C, and C++ targets
  • Frameworks, static libraries, app extensions, and widgets
  • Asset catalogs, storyboards, XIBs, String Catalogs, and ordinary strings
  • Core Data models and common mapping models
  • Supported SwiftData, Predicate, Preview, SwiftUI Entry, and TipKit macros
  • Package macros whose sources build for the Linux host
  • Supported App Intents metadata and shortcut language models.

Explicit schemes from resolved Git packages are available after dependency resolution. Listing schemes does not fetch missing packages. Package manifests run on Linux. Host-only conditions that select Apple resources or libraries can require a compatibility patch.

Metal shaders, Core ML model classes, SceneKit assets, and RealityKit assets require native tools. Scripts that import Darwin or call other macOS-only tools need adaptation or a Mac preparation stage. Advanced Core Data mapping expressions remain outside the supported mapping-model forms.

Phone startup checks do not validate App Groups, push, payments, or extension behavior. Those flows need matching profiles and their own execution checks.

Modern icons and stickers​

Icon Composer support produces static light, dark, and tinted appearances. Interactive glass lighting and native material effects remain unsupported.

Sticker packs support ordered PNG, GIF, and JPEG members and message-extension icons. Sticker sequences and localized sticker-pack strings remain unsupported.

Swift and C++ interoperability​

The MMKV validation uses the current generated-header correction rather than its former fixture shim. The affected bridge helpers use the supported lazy inline-helper behavior. Other compiler versions and interoperability forms need separate validation.

App Intents​

The portable processors generate registration metadata, extracted strings, and shortcut language models. Supported forms include primitive parameters, optional and array values, file images, dialog or snippet results, enums, basic entities, widget intents, and basic shortcuts.

Dynamic frameworks and embedded extensions retain separate registrations. Unsupported schemas, static dependency registration, and unsupported language-model options fail explicitly. Siri voice invocation on a physical device remains unverified.

Localized shortcut models use the app's translated names and AppShortcuts string tables. The trainer emits per-language models and removes models for deleted shortcuts. AssistantIntents catalogs and catalog variations remain unsupported.

Localized phrase resources​

Mac execution of toolchain setup exports the system phrase resources into the private SDK. For an independently prepared Ubuntu host, export those resources on the Mac using the setup sources from the archive:

python3 /path/to/sweetpad-install/setup/sweetpad-lib/ci/linux-appintents-resources.py \
--xcode /Applications/Xcode.app --out /path/to/appintents-phrases.json

Transfer the export privately, then provide it to Linux setup:

SWEETPAD_SKIP_RUST=1 \
SWEETPAD_APPINTENTS_RESOURCE_EXPORT=/path/to/appintents-phrases.json \
XCODE_APP=/path/to/Xcode.app \
bash "$HOME/.local/share/sweetpad/setup/sweetpad-lib/ci/linux-setup.sh"

Missing localized resources produce a preparation error. The export is SDK data and stays outside your source repository and public artifacts.

Environment variables​

VariablePurpose
SWEETPAD_DARWIN_SDKSelect another extracted Darwin SDK bundle.
SWEETPAD_SWBUILDSelect the Swift Build driver instead of the executable on PATH.
SWEETPAD_MACROSSelect the macro launcher instead of the executable on PATH.
SWEETPAD_CODE_SIGN_P12Select the P12 development identity.
SWEETPAD_CODE_SIGN_P12_PASSWORDSupply that identity's password.
SWEETPAD_PROVISIONING_PROFILESSelect a directory of matching profiles.
SWEETPAD_DEVICE_PYTHONSelect Python with the pinned modern device adapter.
SWEETPAD_DEVICE_NETWORK_CONFIGSelect a private Wi-Fi device configuration.
SWEETPAD_SKIP_RUSTSetup only: use 1 to omit Rust for the prebuilt CLI.
SWEETPAD_REFRESH_SDKSetup only: use 1 to refresh an existing SDK extraction.

Run sweetpad help environment for runtime variables. The two setup controls apply to the setup script.

Wi-Fi transport​

With trusted USB available, create an isolated network record:

sweetpad device pair-network IPHONE_UDID \
--out "$HOME/.local/share/sweetpad/iphone-network" --json --non-interactive
export SWEETPAD_DEVICE_NETWORK_CONFIG="$HOME/.local/share/sweetpad/iphone-network/devices.json"
sweetpad device list --json --non-interactive

The command preserves existing default pairing records and rejects an existing output directory. The new directory contains private credentials. Discovery uses multicast advertisements or the system DNS-SD resolver.

The validated OrbStack bridge uses DNS-SD because raw LAN multicast does not cross the bridge. For networks without discovery, the configuration can select an explicit RemotePairing host and port.

Run sweetpad help linux-devices for configuration details and bounded app-log commands. See Ubuntu and USB setup for the primary iPhone workflow.