Skip to content

Start with
shipit generate.

Start with shipit generate to build a real config from your project, reuse existing env values, and ship iOS or Android from the same workflow without leaking secrets into Shipfile.yml.

Open source
Browse ShipItSwifty on GitHub

⚠️ Beta release. For feedback, bug reports, and feature requests, open an issue in GitHub Issues.

iOS and AndroidSwift 6LinuxKMPAI-first
shipit
$ shipit generate
⠼ Inspecting project and inferring defaults
$ Xcode scheme [MyApp]:
$ Bundle identifier [com.example.myapp]:
$ Apple Developer Team ID [A1A1A1A1A1]:
$ Do you want this Shipfile to include App Store Connect upload settings? [y/N]: y
=== App Store Connect Environment ===
ShipIt will reference env vars instead of storing secrets in Shipfile.yml.
ASC_KEY_ID [set] App Store Connect API key ID
ASC_ISSUER_ID [set] ASC issuer UUID
ASC_PRIVATE_KEY_PATH [set] Path to .p8 key file (preferred)
ASC_PRIVATE_KEY (not set) Raw .p8 PEM content (CI fallback)
$ Override ASC_KEY_ID? [y/N]: no
$ Override ASC_ISSUER_ID? [y/N]: no
$ Override ASC_PRIVATE_KEY_PATH? [y/N]: no
$ ASC_PRIVATE_KEY (leave blank to skip):
$ Are you using manual code signing (.p12 + provisioning profile)? [y/N]: N
=== Shipfile Preview ===
# Shipfile.yml — generated by `shipit generate` ...
Overview

From zero to release automation
in four steps.

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"]
 
Features

Everything you need to ship.

From local validation to App Store Connect and Google Play. No Ruby, no Fastfile, no fragile shell glue.

One CLI, two stores

Cross-platform

Build, test, archive, and distribute iOS and Android apps from the same Shipfile.yml whether you are targeting App Store Connect or Google Play.

Store delivery

Android

Upload to TestFlight, App Store Connect, or Google Play with native clients, release tracks, metadata flows, and CI-friendly credentials.

Coverage & validation

Cross-platform

Run lint, tests, coverage, and validation commands before shipping. ShipItSwifty reads native build outputs and keeps dry-runs machine-readable.

Code Signing

iOS

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

Guided setup

Cross-platform

Start with shipit generate to infer config from Xcode, Gradle, or shared projects, then use ai-session when you want an agent-ready JSON hand-off.

Composable Workflows

Define reusable step sequences in Shipfile.yml. Parameterized custom actions, plugins, KMP projects, and framework-aware builds all fit the same workflow model.

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
AI-First

Tell your agent
what to ship.

shipit ai-session generates a machine-readable context dump — shipit documentation, available commands, and your project details — so any coding agent can understand the tool and generate a correct Shipfile.yml without guessing.

01
Run ai-session

shipit ai-session generates a machine-readable snapshot: your project structure, available shipit commands, and documentation - everything an AI agent needs to understand your setup.

02
Feed it to your agent

Paste the JSON into your coding agent's prompt. The agent learns about shipit, analyzes your project context, and generates a Shipfile.yml tailored to your app.

03
Agent asks, you confirm

If anything is ambiguous - signing identity, TestFlight group, andexport method - the agent asks for clarification before proceeding.

Example agent prompt
text
Run shipit ai-session --output json and use
the output as context to understand my project
and the shipit tool. Then generate a Shipfile.yml
for my app. Ask me for clarification if anything
is ambiguous or missing.
shipit ai-session
shipit
$ shipit ai-session
▸ analyzing project…
✓ project context captured
✓ shipit documentation included
✓ available commands resolved
✓ session JSON ready — paste into your agent prompt
What the JSON contains
docsFull shipit command documentation and usage
commandsAll available shipit commands and their flags
projectDetected project structure and targets
contextEnvironment details the agent needs to know
Getting Started

Up and running in minutes.

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

Before you start

ShipItSwifty runs iOS workflows on macOS and Android workflows on macOS or Linux. Store credentials are only required for upload flows, so local builds and tests can start much earlier.

macOS 15+, Xcode 16+required for iOS builds, archives, signing, and uploads
Linux or macOS + JDK 17+supported for Android build, test, lint, archive, and Play Store flows
Swift 6 toolchainthe CLI is built with Swift 6 concurrency
Apple Developer accountrequired for iOS code signing and provisioning
App Store Connect API keyneeded only for iOS upload, testflight, metadata, and provision commands
Google Play service accountneeded only for Android play-store uploads
1
Install shipit

ShipItSwifty is a single static binary with no runtime dependencies. Pick whichever install method suits your workflow.

A Homebrew tap is on its way. Until then, building from source is quick and gives you the same binary.

bash
# The Homebrew tap is being prepared.
# In the meantime, build from source — it takes under a minute.
2
Generate your config

Instead of writing YAML by hand, let ShipItSwifty inspect your Xcode project. It detects your scheme, bundle ID, and team — then writes a Shipfile.yml you can review and commit. It can also reuse existing env values or write a local .env for signing setup. This is the recommended starting point for every project.

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
shipit generate in action
Scans your project and writes a complete config in seconds.
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
3
Verify your environment

Before running a build, confirm that Xcode, credentials, and provisioning profiles are wired up correctly. shipit env prints every resolved value, and shipit doctor checks for common issues like missing entitlements or expired certificates.

bash
shipit env
shipit doctor
4
Run your first workflow

Always dry-run first to see exactly what ShipItSwifty will do — which actions run, in what order, and with what options. Once you are satisfied, drop the flag and ship.

bash
# Preview without executing
shipit run beta --dry-run
 
# Ship it
shipit run beta --ci
Running in CI?

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

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

Your data never leaves your machine.

No third-party services. No AI calls baked in. No hidden network requests. ShipItSwifty is a local CLI — what happens on your machine stays on your machine.

Runs on your machine

ShipItSwifty is a native Swift CLI. Every build, archive, signing, and upload step executes locally on your Mac or Linux box — there is no cloud backend processing your project.

No LLM in the pipeline

The tool itself makes zero AI or LLM calls. shipit ai-session generates a context snapshot for your agent to use — ShipItSwifty never calls any model on your behalf.

Zero telemetry

No analytics, no crash reporting, no usage tracking. ShipItSwifty never phones home. Your project structure, credentials, and workflows stay on your machine.

Note

shipit ai-session generates a machine-readable JSON snapshot of your project and shipit documentation. You paste that into your own AI agent — ShipItSwifty itself never calls any LLM or sends data to any third-party service.

Documentation

Everything is documented.

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

Public beta, feedback via GitHub issues.

ShipItSwifty is ready to try, but we are still smoothing edges. Use it, ship with it, and open GitHub issues for bug reports, feedback, or missing features.