mrkeyoor.com_
Fri 16 Oct 18:52 UTC
Open Source6 min read

Xtool Gains 936 Stars, With Apple's SDK Still Required on Linux

Xtool moves Swift iOS builds to Linux and WSL. Its growing audience still faces Apple's SDK requirements, signing limits and permissions for app capabilities.

Xtool's Linux setup starts with a download from Apple: Xcode. MrKeyoor's October 13 GitHub Trending snapshot listed xtool as gaining 936 stars that day. Yet its installation guide still requires Apple's SDK. Developers get more choice over the computer that builds an app while Apple continues to supply the platform components it needs.

The repository describes a command-line tool that turns a Swift Package Manager package into an iOS app, signs it and installs it on a device. Its documented hosts are Linux, Windows through WSL, and macOS. For someone working primarily on Linux, that offers a route from Swift source to an iPhone without switching computers for the documented build-and-install cycle. Those are the maintainers' stated capabilities, rather than results from a MrKeyoor hardware test.

The star gain is a dated interest signal, not a count of successful installations. There is, however, a recent release to inspect: version 1.21.0, published on October 5, updates the tool's build to Swift 6.4 and changes how it obtains Clang resources and handles Xcode extraction. The practical story is how much of an iOS development workflow you can move, and which dependencies move with it.

Xcode supplies the SDK even when Linux does the build

The Linux installation instructions currently call for Swift 6.4 and an Xcode 27 download. You obtain the Xcode archive through Apple's authenticated developer download page and accept its license agreement. During setup, xtool takes the path to that archive, extracts it and generates an iOS Swift SDK. The guide's check is swift sdk list, which should report darwin.

That makes the boundary fairly concrete. Linux supplies the host environment, while the SDK comes from Apple's distribution. On a Mac, the separate installation guide also requires Xcode for the SDK and toolchain, though xtool doesn't use Xcode's build system. You can leave the IDE out of the daily build command without removing its installed components from the setup.

The Mac guide offers Homebrew installation or a downloadable app that adds the command to your shell. This means the project also addresses developers who already own Apple hardware and want to use SwiftPM as their build workflow. Read that alongside the repository's command list: setup, SDK management and device operations are exposed separately. The appeal is partly the ability to perform those operations from a terminal.

Windows support includes a USB handoff

The Windows route runs through WSL. For the documented device workflow, xtool's setup guide points users to USB passthrough and relies on usbmuxd to communicate with an iOS device from Linux. If your phone isn't visible inside that environment, compilation alone won't get the app onto it.

Microsoft's USB instructions explain the additional step: install usbipd-win, share the selected device from Windows, then attach it to WSL. Binding requires administrator privileges. While attached to WSL, the device cannot be used by Windows. For an iPhone development session, that handoff is something to establish before diagnosing a failed app installation.

The distinction matters when describing xtool as a Windows tool. Its documented path is a Linux environment with access to the physical device. Microsoft's guide recommends verifying the attachment inside Linux with lsusb; it also notes that non-root access may require udev configuration. These are host setup details a developer has to resolve outside the Swift application itself. Microsoft documents the connection procedure here.

A Swift package becomes the app project

Once setup is complete, the first-app tutorial uses a small command sequence:

xtool new Hello
cd Hello
xtool dev

The generated project contains Package.swift and Swift source files. An xtool.yml file supplies app bundling metadata, including the bundle identifier. A .bsp/xtool.json file lets an editor request build information through the Build Server Protocol. This arrangement makes the package and a few text files the starting point for the app, according to the tutorial's project-creation steps.

On the first build, SwiftPM may spend several minutes compiling SDK modules. The tutorial says subsequent builds benefit from a global module cache, without giving a benchmark. Installation then involves device pairing, Apple Developer Services registration and generation of signing material. You may need to enable Developer Mode or trust the developer certificate on the phone. Editing the sample's SwiftUI text and running xtool dev again completes the documented development loop.

Signing still depends on your Apple account

Setup presents two authentication routes. The macOS guide recommends an API key for paid Apple Developer Program members, using the public App Store Connect API. It specifies a team key with the App Manager role. Password authentication works with an Apple account outside the paid program but uses private Apple APIs. The maintainers suggest a throwaway account for that route as a precaution.

Apple's developer account overview describes the limits of a free Personal Team in Xcode: up to 10 App IDs and three registered devices, each expiring after seven days, plus up to three installed apps per device. Provisioning profiles expire seven days after issuance, requiring a rebuild and reinstall. Those are Apple's published account rules; xtool's ability to call developer services doesn't establish an exemption.

The same Apple documentation places more advanced capabilities and distribution resources behind developer program membership. Getting a sample onto your own phone therefore answers a narrower question than preparing an app for testers or distribution. If you're evaluating xtool for a project, account permissions belong in the evaluation alongside build compatibility. Apple lists the account distinctions, including access to App Store Connect for members.

App packaging exposes the remaining permission work

Xtool provides explicit controls for an app bundle. Its structure guide explains how to merge custom Info.plist values, copy resources and supply an app icon. SwiftPM resources go into nested bundles, while the YAML configuration can place files at the app bundle's root. That difference matters when a dependency expects a configuration file in a particular location.

Entitlements, which declare access to specific system features, need closer inspection. The guide describes an entitlementsPath setting, but warns that some entitlements require paid membership or special Apple permission. Others need a corresponding capability enabled in the developer portal. Xtool automates capability handling only where its code includes the necessary mapping. The maintainers explicitly ask for reports of missing mappings. A successful build won't by itself settle whether your app can use its intended system service.

There is also a worked widget-extension guide. It adds another SwiftPM library product and target, identifies the extension in YAML, and supplies its own Info.plist. The guide says xtool doesn't yet support ExtensionKit, Apple's newer framework for certain extension types. A team whose app depends on extensions should check the specific extension mechanism before treating the sample widget as evidence of full compatibility.

Follow SDK changes and capability fixes

The 1.21.0 release notes show the maintenance work this approach needs: compiler changes, SDK extraction adjustments and updated deployment targets for the tool's Darwin hosts. The release sets those targets to macOS 14.0 and iOS 17.0, a change the notes say may matter to users of its libraries. Those are targets for xtool and its libraries, not a blanket statement about every app built with it.

Watch how future releases handle new Apple SDKs and whether missing entitlement mappings get implemented. The current capability documentation gives developers a useful place to start: test the permission your app actually needs. For someone considering a Linux iOS workflow, a small app that exercises that permission will answer more than another rise in the repository's star count.

We reviewed this

  1. xtool — our honest review

Sources

  1. Xtool repository and command overview
  2. Xtool installation on Linux and Windows
  3. Xtool 1.21.0 release notes
  4. Xtool installation on macOS
  5. Microsoft: Connect USB devices to WSL
  6. Xtool: Build your first iOS app on Linux or Windows
  7. Apple: Developer account overview
  8. Xtool: Control your app's structure