Files
xtool-mirror/Documentation/xtool.docc/Installation-Linux.md
Kabir Oberai 430cbd144b Bump Swift version, dependencies (#166)
Notably:

- Build xtool with Swift 6.2
- Resolve https://github.com/advisories/GHSA-xvr7-p2c6-j83w. That
advisory shouldn't really affect us since we don't use NIO as a server
but good hygiene anyway.
2025-09-28 19:04:06 -04:00

140 lines
4.5 KiB
Markdown

# Installation (Linux/Windows)
Set up xtool for iOS app development on Linux or Windows.
## Overview
This article outlines the steps to install `xtool` and begin developing iOS apps on Linux (or Windows via WSL).
## Prerequisites
### WSL (for Windows users)
If you're on Windows, you can use xtool via [Windows Subsystem for Linux](https://learn.microsoft.com/en-us/windows/wsl/install) (WSL).
Once you install WSL, you'll also need to set up USB passthrough. See Microsoft's instructions on [installing USBIPD](https://learn.microsoft.com/en-us/windows/wsl/connect-usb). Make sure you're able to bind your iOS device to WSL via USB.
### Swift
Install the Swift 6.2 toolchain for your Linux distribution from <https://swift.org/install/linux>.
After following the steps there, confirm that Swift is installed correctly:
```bash
swift --version
# should say something like:
# Swift version 6.2 (swift-6.2-RELEASE)
```
### usbmuxd
xtool relies on [usbmuxd](https://github.com/libimobiledevice/usbmuxd) to talk to your iOS device from Linux.
Your Linux distro probably offers this package, and it may be preinstalled. To check if it is, run
```bash
usbmuxd --help
# Usage: usbmuxd [OPTIONS]
# ...
```
If instead you get "command not found", you need to install `usbmuxd` yourself. On Ubuntu/Debian, for example, you can do this with
```bash
sudo apt-get install usbmuxd
```
> Other useful tools:
>
> `usbmuxd` is part of the [libimobiledevice](https://libimobiledevice.org) project. You may want to install other libimobiledevice tools, such as `ideviceinfo`, that offer many ways to interact with your iOS device from the command line. On Ubuntu/Debian, you can run
>
> ```bash
> sudo apt-get install libimobiledevice-utils
> # The following NEW packages will be installed:
> # libimobiledevice-utils
> # 0 upgraded, 1 newly installed
> ideviceinfo
> # DeviceName: Kabir's iPhone
> # SerialNumber: ...
> # UniqueDeviceID: ...
> # ...
> ```
### Xcode.xip
Download **Xcode 26** from <https://download.developer.apple.com/Developer_Tools/Xcode_26.0.1/Xcode_26.0.1_Apple_silicon.xip>. Note the path where `Xcode_26.0.1_Apple_silicon.xip` is saved.
> Note:
>
> The URL above requires authentication, so make sure to visit it in your browser rather than running `curl`. You'll be asked to log in with your Apple ID and accept the license agreement to download Xcode.
## Installation
### 1. Download xtool
Once you have the prerequisites, download the [latest GitHub Release](https://github.com/xtool-org/xtool/releases/latest) of `xtool.AppImage` for your architecture. Rename it to `xtool` and add it to a location in your `PATH`.
```bash
curl -fL \
"https://github.com/xtool-org/xtool/releases/latest/download/xtool-$(uname -m).AppImage" \
-o xtool
chmod +x xtool
sudo mv xtool /usr/local/bin/
```
Confirm that xtool is installed correctly:
```bash
xtool --help
# OVERVIEW: Cross-platform Xcode replacement
# ...
```
### 2. Configure xtool: log in
Perform one-time setup with
```bash
xtool setup
```
You'll be asked to log in:
```
Select login mode
0: API Key (requires paid Apple Developer Program membership)
1: Password (works with any Apple ID but uses private APIs)
Choice (0-1):
```
> Choosing a login mode:
>
> **API Key:** If you have a paid [Apple Developer Program](https://developer.apple.com/programs/enroll/) membership, this is the recommended option. It relies on the public App Store Connect API. You'll want to follow the [instructions](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api) to generate a **Team Key** with the **App Manager** role.
>
> **Password:** If you aren't enrolled in the paid developer program, you'll want to use password-based authentication. This relies on private Apple APIs to authenticate, so you may want to create a throwaway Apple ID to be extra cautious.
Once you select a login mode, you'll be asked to provide the corresponding credentials (API key or email+password+2FA). Needless to say, *your credentials are only sent to Apple* and nobody else (feel free to build xtool from source and check!)
### 3. Configure xtool: SDK
After you're logged in, you'll be asked to provide the path to the `Xcode.xip` file you downloaded earlier.
```
Choice (0-1): 0
...
Path to Xcode.xip:
```
Enter the path (for example `~/Downloads/Xcode_16.3.xip`) and hit enter. xtool will extract the Xcode XIP to generate and install an iOS Swift SDK for you.
Confirm that it worked:
```bash
swift sdk list
# darwin
```
## Next steps
You're now ready to use xtool! See <doc:First-app>.