How to Build vorssaint-utils Without Xcode: Complete CLI Guide
You can build vorssaint-utils on macOS using only the Xcode Command-Line Tools and the provided build.sh script, which invokes swiftc directly to compile the Swift package without opening the Xcode IDE.
vorssaint-utils is a pure-Swift macOS utility project hosted at vorssaint/vorssaint-utils. While it includes a standard Swift Package Manager structure defined in Package.swift, the repository ships with a self-contained build script that eliminates the need for the full Xcode application. This makes it possible to build vorssaint-utils without Xcode using only freely available command-line tools.
Prerequisites: Command-Line Tools Only
To build vorssaint-utils without Xcode, you only need the Xcode Command-Line Tools (CLT) installed. These provide the Swift compiler (swiftc), SDK location utilities (xcrun), and code signing tools (codesign) that the build script requires.
Install the tools by running:
xcode-select --install
Verify installation by checking that swiftc is available:
swiftc --version
Understanding the Build Architecture
The project uses a hybrid Swift Package Manager and custom script approach. According to the source code, the [Package.swift](https://github.com/vorssaint/vorssaint-utils/blob/main/Package.swift) defines the package structure targeting macOS 14+, including two system-library targets (HIDEventSystem and VMStatisticsCompat) and one executable target (Vorssaint).
However, the actual compilation orchestration happens in [build.sh](https://github.com/vorssaint/vorssaint-utils/blob/main/build.sh) at the repository root. This script handles:
- SDK Detection – Prefers the macOS 26 SDK if present, otherwise defaults to
xcrun --show-sdk-path - Direct Compilation – Invokes
swiftcwith specific target triples (arm64-apple-macosx14.0) and optimization flags (-Ofor release,-Ononefor development) - Auxiliary Binaries – Builds the fan-control helper (
Sources/FanControlHelper/main.swift), now-playing XPC service (Sources/NowPlayingAdapter/NowPlayingAdapter.swift), and icon generator (Tools/MakeIcon.swift) - Bundle Assembly – Constructs the
.appbundle structure usingdittoandplutil - Code Signing – Attempts Developer ID first, then falls back to ad-hoc signing
Step-by-Step: Build vorssaint-utils Without Xcode
Follow these steps to compile the project entirely from the terminal:
-
Clone the repository
git clone https://github.com/vorssaint/vorssaint-utils.git cd vorssaint-utils -
Execute the build script
The default invocation creates a release-optimized bundle in
build/stage:./build.shDuring execution, the script performs these actions:
- Compiles the main executable to
build/Vorssaint - Builds the fan-control helper to
build/com.vorssaint.utils.fan-control - Generates the now-playing library to
build/libVorssaintNowPlaying.dylib - Creates the adaptive app icon using
Tools/MakeIcon.swift→build/AppIcon.icns - Assembles the final bundle at
build/stage/Vorssaint.app - Signs the bundle (ad-hoc if no Developer ID is present)
- Compiles the main executable to
-
Run the application
Launch the freshly built app without installing it system-wide:
open build/stage/Vorssaint.app
Build Options and Variants
The build.sh script supports several flags to customize the build vorssaint-utils without Xcode for different scenarios:
Install System-Wide
To replace any existing installation in /Applications and restart the service:
./build.sh --install
This command stops running instances using the bundle identifier, copies the new bundle to /Applications, and re-signs it after the copy operation using the available identity.
Development Build
Create a parallel "Developer" build that coexists with the stable release by using the --dev flag:
./build.sh --dev
This variant modifies the bundle identifier in Resources/Info.plist, changes the executable name, and embeds the current Git commit hash, allowing you to test changes without affecting your production installation.
Technical Implementation Details
When you run build.sh, the script executes a specific compilation pipeline defined in the source code:
SDK Resolution – The script queries the SDK path using xcrun --show-sdk-path to ensure compatibility with macOS 14.0+ (arm64-apple-macosx14.0).
Compiler Flags – The script passes include paths for system library headers:
-I Sources/VMStatisticsCompat-I Sources/HIDEventSystem
Code Signing Strategy – According to the implementation in build.sh, the script attempts three signing methods in order:
- Developer ID identity (for distribution)
- Legacy self-signed identity
- Ad-hoc signing (for local builds)
If no suitable identity exists, the script can generate a stable local signing identity via [Tools/setup-signing.sh](https://github.com/vorssaint/vorssaint-utils/blob/main/Tools/setup-signing.sh).
Source Organization – Production code resides in Sources/Vorssaint/**/*.swift, while helper binaries compile from separate entry points to create the complete utility suite.
Summary
- vorssaint-utils requires only the Xcode Command-Line Tools, not the full Xcode IDE, thanks to the custom
build.shscript. - The build process uses direct
swiftcinvocation withxcrunfor SDK detection, compiling both the main executable and auxiliary XPC services. - Run
./build.shto create a release bundle inbuild/stage/Vorssaint.app. - Use
./build.sh --installto deploy to/Applicationsor./build.sh --devfor side-by-side development builds. - All build steps rely on standard Unix utilities (
ditto,plutil,codesign) available in the Command-Line Tools.
Frequently Asked Questions
Do I need the full Xcode application to build vorssaint-utils?
No. The repository is specifically designed to build vorssaint-utils without Xcode using only the Command-Line Tools. The build.sh script handles compilation directly via swiftc and xcrun, requiring no IDE interaction or .xcodeproj files.
Which macOS versions are supported?
According to Package.swift in the repository root, the project targets macOS 14.0 and later. The build script uses the arm64-apple-macosx14.0 target triple and detects the appropriate SDK using xcrun --show-sdk-path, ensuring compatibility with macOS 14 and newer systems.
What if code signing fails during the build?
The script implements a three-tier fallback strategy: it first tries Developer ID, then legacy self-signed identities, and finally ad-hoc signing. If all methods fail, run Tools/setup-signing.sh to create a stable local signing identity specifically for development builds.
Can I run the app without installing it to /Applications?
Yes. After running ./build.sh, you can launch the application directly from the build directory with open build/stage/Vorssaint.app. The --install flag is only required if you want the utility available system-wide in your Applications folder.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →