Getting Started
Migrating from fastlane
Lane-by-lane mapping from fastlane to shipit equivalents.
On this page
Why migrate?
ShipItSwifty replaces a Ruby toolchain with a single Swift binary. No Gemfile, no Bundler, no plugin compatibility matrix — just one CLI you can install via Homebrew or build from source.
Lane-by-lane mapping
| fastlane | shipit |
|---|---|
match | shipit sign sync |
gym | shipit archive + shipit export |
pilot | shipit testflight |
deliver | shipit metadata + shipit upload |
scan | shipit test |
snapshot | shipit screenshot (coming soon) |
frameit | shipit screenshot --frame (coming soon) |
pem | covered by ASC API integration |
produce | covered by ASC API integration |
increment_build_number / increment_version_number | shipit version (or a version workflow step) |
supply | shipit play-store |
add_git_tag / push_to_git_remote | git workflow steps (operation: tag / commit / push), tagging with the {{version}} token |
Release lane: tagging the released version
A typical fastlane release lane bumps the version, ships, then tags and pushes:
lane :release do
capture_screenshots
build_app
upload_to_app_store(submit_for_review: true)
increment_version_number(bump_type: "patch")
commit_version_bump
add_git_tag(tag: "v#{lane_context[SharedValues::VERSION_NUMBER]}")
push_to_git_remote
endThe same flow in Shipfile.yml — note that lane_context[SharedValues::VERSION_NUMBER] becomes the {{version}} token, and the tag step is gated by when: "{{version_changed}}" so build-only bumps don't re-tag:
workflows:
release:
- action: screenshot
- action: archive
options: { configuration: Release, export_method: app-store }
- action: export
- action: upload
options:
submit_for_review: true
phased_release: true
- action: version
options: { bump: patch }
# add_git_tag with the bumped version becomes the {{version}} token —
# no lane_context plumbing. The tag is skipped on build-only bumps.
- action: git
options: { operation: commit, commit_message: "chore: release v{{version}}" }
- action: git
when: "{{version_changed}}"
options: { operation: tag, tag_name: "v{{version}}" }
- action: git
options: { operation: push, push_tags: true }shipit generate --goal release scaffolds this commit/tag/push tail automatically for both iOS and Android. See Workflow tokens & step conditions for the full list of reserved tokens.
What you gain
- Single binary — no Ruby, no Bundler, no plugin compatibility matrix
- Native Swift — same language as your app, debuggable with Xcode
- Guided setup —
shipit generatewalks you through config creation interactively - Validation built-in — YAML, metadata, and archive checks before upload
Tool comparison
| Common Tool | ShipItSwifty Equivalent | Notes |
|---|---|---|
| Archive / build | shipit build + shipit archive | Split into distinct steps |
| Test runner | shipit test | JSON structured output |
| Screenshot capture | shipit snapshot | Simulator management built-in |
| App Store upload | shipit upload + shipit metadata | Split metadata from binary upload |
| TestFlight upload | shipit testflight | Full TestFlight management |
| Code signing sync | shipit sign sync | Git/S3 encrypted cert vault |
| Metadata validation | shipit validate metadata | Precheck alias also supported |
| Build number bump | shipit version --bump build | Multiple strategies |
| Version bump | shipit version --bump minor | SemVer support |
| Workflow file | Shipfile.yml workflows | YAML-based, Swift-native |
Next steps
- Installation — install and verify your environment
- iOS Quickstart — end-to-end guide from config to TestFlight
- Android Quickstart — set up Gradle builds and Play Store uploads