Skip to content
Public betaSwift 6macOS 15+iOS + AndroidAI-first

Tell your agent
what to ship.

ShipItSwifty is in public beta today. Start with shipit generate to build a real config from your project, then hand the repo to your agent to validate, dry-run, and ship the workflow.

Open source
Browse ShipItSwifty on GitHub

Beta release. Use GitHub Issues for bug reports, feedback, and feature requests.

shipit
$ shipit run beta --ci
▸ loading Shipfile.yml
→ step 1/4 version
✓ bumped build: 41 → 42
→ step 2/4 archive
✓ MyApp.xcarchive (14.2s)
→ step 3/4 export
✓ MyApp.ipa
→ step 4/4 testflight
✓ distributed to Internal QA
✓ workflow beta completed in 2m 14s
Overview

From zero to TestFlight
in four steps.

ShipItSwifty replaces a Ruby toolchain with a single Swift binary. One YAML file. One command.

Create a Shipfile.yml at the project root. Declare your app identifiers, signing, and workflow steps.

yaml
# Shipfile.yml
app:
bundle_id: com.example.myapp
scheme: MyApp
 
app_store_connect:
key_id: ${ASC_KEY_ID}
issuer_id: ${ASC_ISSUER_ID}
key_path: ./asc.p8
 
workflows:
beta:
- action: version
options: { bump: build }
- action: archive
options: { export_method: app-store }
- action: export
- action: testflight
options:
groups: ["Internal QA"]
Getting Started

Up and running in minutes.

Install the binary, generate a config, and run your first workflow. No Gemfile. No Bundler. No Ruby.

1
Install shipit

Build the public 0.1.0 release from source, or audit every line before running it.

bash
git clone https://github.com/ShipItSwifty/shipitswifty.git
cd shipitswifty
git checkout 0.1.0
swift build -c release
# Binary at .build/release/shipit
2
Generate your config

Run shipit generate to inspect your project and scaffold a Shipfile.yml in seconds. It walks through the missing answers, detects your scheme and bundle ID, and writes a reviewable config you can commit.

bash
shipit generate
 
# Or target a specific release flow
shipit generate --goal beta
 
# Machine-readable output for CI or agents
shipit generate --goal beta --non-interactive --output json
3
Verify your environment

Check that Xcode, credentials, and profiles are all in order before running a build.

bash
shipit env
shipit doctor
4
Run your first workflow

Dry-run first to preview steps. Then run for real.

bash
# Preview without executing
shipit run beta --dry-run
 
# Ship it
shipit run beta --ci
shipit generate in action
Inspects your project and writes Shipfile.yml with the answers it can infer.
shipit
$ shipit generate --goal beta
▸ scanning Xcode project…
detected scheme: MyApp
detected bundle_id: com.example.myapp
workflow: version → archive → export → testflight
▸ writing Shipfile.yml…
✓ Shipfile.yml ready — run: shipit run beta --dry-run

Generate produces a stable, reviewable config. Edit it once if you need to, then commit it. Every CI run after that is just shipit run.

Prerequisites
macOS 15+, Xcode 16+
Swift 6 toolchain
Apple Developer account
App Store Connect API key
Running in CI?

Every command is non-interactive by default. Export credentials as environment variables and set --ci to disable TTY prompts.

yaml
# GitHub Actions
- run: shipit run beta --ci
env:
ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }}
ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
AI-First

Describe the goal.
Your agent ships the build.

shipit ai-session is the agent hand-off step after generation. It gives your coding agent a grounded, machine-readable snapshot of the resolved project so it can validate the setup and run the release workflow without guessing.

01
Generate the Shipfile first

Start with shipit generate so the config is grounded in the real project and checked into source control before an agent takes over.

02
Capture the JSON snapshot

Run ai-session when you want a machine-readable view of the resolved project state, signing setup, and the exact next shipit command.

03
Let the agent drive

The agent runs the suggested commands, handles any questions, and iterates until your beta is in TestFlight. You just review the diff.

Example agent prompt
text
Run shipit generate --goal beta first.
Then run shipit ai-session --goal beta --output json
and use that result as the source of truth.
Validate the setup and tell me the exact
shipit command to run next.
shipit ai-session
shipit
$ shipit ai-session --goal beta --output json
▸ inspecting project…
detected scheme: MyApp (high confidence)
detected bundle_id: com.example.myapp
signing: automatic — provisioning profile valid
workflow: version → archive → export → testflight
nextAction: shipit run beta --dry-run
✓ session ready — attach this JSON to your agent prompt
What the JSON contains
schemeDetected app target with confidence score
bundle_idResolved from your project, not guessed
signingProfile expiry, cert validity, entitlements
nextActionThe exact shipit command to run next
warningsGaps your agent should ask you about
Features

Everything you need to ship.

From first build to App Store submission. No Ruby, no Fastfile, no surprises.

Build & Archive

Compile with xcodebuild. Archive to .xcarchive, export your IPA, and move straight to distribution — one step, no shell scripts.

TestFlight & App Store

iOS

Upload IPA, distribute to beta groups, push metadata, and submit for review — all automated.

Guided Setup

Start with shipit generate to scaffold Shipfile.yml from the real project, then use ai-session when you want an agent-ready JSON hand-off.

Code Signing

iOS

Encrypted cert vault from a Git repo. Create certs and profiles via ASC API. CI-safe keychain management.

Composable Workflows

Define reusable step sequences in Shipfile.yml. Parameterized custom actions with cycle detection.

Migrating from fastlane?
matchshipit sign sync
gymshipit archive + export
pilotshipit testflight
delivershipit metadata + upload
Built-in validation
$ shipit validate yml
$ shipit validate metadata
$ shipit validate archive
$ shipit doctor
Documentation

Everything is documented.

Reference docs, guides, and CI playbooks — all in one place.

Public beta, feedback welcome.

ShipItSwifty is ready to try, but we are still smoothing edges. Use it, ship with it, and send bug reports or missing-feature feedback through GitHub Issues.