A native macOS GUI for setting up, running, and deploying fastlane
lanes for Flutter apps. LaunchFast removes the command-line friction of fastlane —
bundle exec fastlane …, sourcing env files, remembering lane names, match, secrets —
and turns building and shipping iOS + Android apps into a point-and-click flow.
Built with Avalonia on .NET 10.
- Launcher grid — Android-Studio-style projects/recents grid; opens any Flutter root and detects its iOS/Android fastlane setups (and launcher icons).
- Setup wizard — surfaces Flutter projects with no fastlane (or a missing platform)
and generates the complete file set (Fastfile, Appfile, Matchfile, Gemfile) from scratch,
or merges a new lane / platform block into an existing Fastfile. Five-step guided flow
(Platforms · iOS · Android · Lanes · Review, with iOS/Android steps shown only for the
platforms you select) with diff preview and one-click apply (writes files + stores secrets
in Keychain + runs
bundle install). - Lane runner — runs lanes with live streaming output, a preflight check
(Gemfile/bundler) before launch, one-run-at-a-time gating, and stop. Uses a pipe-based
process backend; interactive prompts (2FA, match passphrase) are not fully supported —
configure credential-based auth (ASC API key,
MATCH_PASSWORD, Play service account) so lanes run non-interactively. - Keychain secrets — per-project secrets stored in the macOS login Keychain; resolved into the lane environment at run time.
- Per-lane store version — surfaces the current App Store Connect / Google Play version for release lanes, refreshed on demand and degrading gracefully when offline or uncredentialed.
# Build the app and unit/UI tests
dotnet build LaunchFast.slnx
# Run the unit + headless UI test suites
dotnet test LaunchFast.slnx
# Launch the app
dotnet run --project src/LaunchFast.App
# Integration smoke suite (owner's Mac only — drives real fastlane / Keychain).
# These Assert.Ignore when prerequisites are missing; they are NOT run in CI.
dotnet test IntegrationTests/IntegrationTests.slnxThe SDK version is pinned via global.json; packages use Central Package Management.
Pre-built macOS apps are attached to each GitHub Release.
- Download
LaunchFast-<version>-osx-arm64.zip(Apple Silicon). - Unzip and drag
LaunchFast.appto/Applications. - First launch: right-click the app → Open, then confirm (once — the app is ad-hoc signed but not notarized).
The app is ad-hoc signed, not Apple-notarized, so macOS quarantines the download. If right-click → Open still reports the app is "damaged" / can't be opened, clear the quarantine flag and launch it:
xattr -dr com.apple.quarantine /Applications/LaunchFast.app
open /Applications/LaunchFast.appThe app checks GitHub on launch and shows an "⬆ Update available" banner in the launcher toolbar when a newer release exists; click it to open the release page, then repeat the steps above.
Cutting a release (maintainer): push a semver tag — the release workflow builds
and publishes the app:
git tag v0.2.0
git push origin v0.2.0You can build the same artifact locally with build/macos/make-app.sh 0.2.0.
- Launcher + detect + run existing lanes — done.
- Set up fastlane from scratch / add a lane — done (the setup wizard).
- Deeper match / code-signing management.
- Release-to-prod checklist.
- Richer multi-project organisation.
claude.md— goals, architecture, and conventions (single source of truth).PROGRESS.md— the live phase-by-phase checklist.
MIT — © 2026 Brandt Vavasour.