← All posts

How silicondevkit.com builds your app with Swift Package Manager

Every app you get from silicondevkit.com is built on a real Mac with the Swift toolchain. This post explains what that means, and how the finished .app is put together.

Why a Mac

Swift itself is open source and runs on Linux. But a SwiftUI app imports Apple's frameworks (SwiftUI, AppKit), and those ship in Apple's macOS SDK, which comes with Xcode and is licensed for use on Apple hardware. So the build has to run on a Mac. Our build machines are Apple-silicon Macs with full Xcode installed.

Swift Package Manager, not an Xcode project

Each project is a Swift package: a Package.swift with one executable target called App, and your source files in Sources/App/. The AI writes the SwiftUI code. The build itself is one command:

swift build -c release

We do not use an .xcodeproj or xcodebuild. An Xcode project file is a large generated file that is hard to edit reliably by hand or by machine, while a package is a small text manifest. If the build fails, the compiler errors go back to the AI to fix, up to two times, before the job is marked failed.

Swift and Swift Package Manager are open source under the Apache 2.0 license with a Runtime Library Exception, so apps built this way carry no attribution requirement.

From binary to .app

swift build produces a bare executable, not a double-clickable app. The build pipeline assembles the bundle:

  1. Create YourApp.app/Contents/MacOS/ and copy the executable into it.
  2. Write Contents/Info.plist with the bundle identifier, name, version and minimum macOS version (13.0).
  3. Ad-hoc sign the bundle with codesign -s -.
  4. Zip it with ditto, keeping the bundle structure, and upload the zip.

What this means for your app

For an overview of the whole flow from prompt to download, see How silicondevkit.com works.