Una CLI Rust per automatizzare il workflow di sviluppo Flutter
F-Run Γ¨ uno strumento da riga di comando scritto in Rust che automatizza operazioni ripetitive nello sviluppo Flutter. Γ un orchestratore di tool esterni (Flutter SDK, Fastlane, Shorebird, xcrun) che riduce errori manuali e accelera il ciclo di sviluppo.
Non replica tool esistenti, ma li coordina intelligentemente per flussi complessi come build multi-flavor, upload su store e generazione di asset.
F-Run scansiona il progetto e popola frun.yaml con informazioni rilevate automaticamente:
- Flavors Android da
android/app/src/ - Supporto iOS da
ios/Runner/Info.plist - Fastlane da
android/Fastfile - Shorebird da
shorebird.yaml - Supporto generatori da
pubspec.yamlpericons_launcher,flutter_native_splash,katana_localization,easy_localization
- Android APK: build dellβAPK standard
- Android AAB: build dellβApp Bundle
- iOS IPA: build e upload su App Store Connect (solo macOS)
- Build per flavor: supporto per flavor selezionabili se presenti nel progetto
- Stage
development/production: gestito dal menu di build
- Icone:
icons_launcher:createcon config inassets/icons/oassets/{flavor}/icons/ - Splash screen:
flutter_native_splash:createcon config inassets/icons/oassets/{flavor}/icons/ - Localizzazioni: generazione con
katana_localizationoppure coneasy_localization, in base alle dipendenze rilevate
- Fastlane: supporto Android + iOS con flusso basato su
android/fastlane/Appfileesupply_{flavor}.json - Shorebird: build e deploy via CLI Shorebird quando
shorebird.yamlè presente - xcrun / altool: usati per il deployment iOS su macOS
- Dart build_runner: build e watch integrati nel menu
- Menu interattivi per selezionare azioni, piattaforme e flavor
- Pulizia progetto con
flutter cleane rimozione delle build temporanee - Spostamento automatico di APK/AAB/IPA nella cartella
~/Downloads - Supporto per terminale esterno in modalitΓ
build_runner watchsu macOS, con fallback su esecuzione integrata su altre piattaforme
- Rust 1.70+: Download da https://rustup.rs/
- Cargo (incluso con Rust)
- Progetti testati su: macOS 10.14+, Linux (Ubuntu/Debian), Windows (limitato)
# Clone il repository
git clone https://github.com/yourusername/f-run.git
cd f-run
# Semplice: build debug
cargo build
# Ottimizzato: release con profilo custom
cargo build --release# Format (Rustfmt)
cargo fmt
# Lint strict (come da Cargo.toml)
cargo clippy
# Entrambi assieme
cargo c && cargo clippy./run.shMostra un menu con opzioni:
- Build: compila release, sposta binario in
~/Downloads - Documentazione: apre
cargo doc --open - Analizza: esegue
cargo clippyecargo check
Opzioni avanzate:
# Specifica operazione
./run.sh -s 1 # Diritto a build
# Help
./run.sh -hF-Run usa un profilo release aggressivo (configurato in Cargo.toml):
[profile.release]
opt-level = "z" # Minimizza dimensione
lto = "fat" # Link-time optimization globale
codegen-units = 2 # Riduce parallelismo (miglior ottimizzazione)
strip = "symbols" # Rimuove simboli di debug
panic = "abort" # Crash istantaneo, no unwinding
debug = false # Nessun info debug
incremental = false # Build completaRisultato: binario compatto (~8 MB) e veloce. Trade-off: tempi di build aumentano.
F-Run crea e gestisce un file frun.yaml nella radice del progetto.
features:
fastlane: true # Rilevato automaticamente
shorebird: false # Rilevato automaticamente
icons_launcher: true # Rilevato da pubspec.yaml
flutter_native_splash: true # Rilevato da pubspec.yaml
katana:
enabled: true # Rilevato: katana_localization in pubspec.yaml
language_path: "lib/language.dart" # Path del file di lingua (se Katana attivo)
easy_localization:
enabled: false # Rilevato: easy_localization in pubspec.yaml
flavors:
enabled: true # Se true, la build richiede di scegliere un flavor
list:
- "myflavor"
- "otherflavor"
- "testflavor"
ios:
enabled: true # Rilevato: Info.plist in ios/Runner/
app_store_acc: "your-apple-id@example.com" # Per upload
app_store_password: "xxxx-xxxx-xxxx-xxxx" # App-specific password (non password Apple ID!)Alla prima esecuzione, F-Run:
- Legge
pubspec.yamlper cercare Katana, easy_localization, Fastlane, flutter_native_splash, icons_launcher - Scansiona
android/app/src/per trovare flavors (es. myflavor, production) - Verifica
ios/Runner/Info.plistper supporto iOS - Cerca
shorebird.yamlnella radice - Scrive
frun.yamlcon i risultati
Se il progetto cambia, cancella frun.yaml per riavviare il rilevamento.
project/
βββ environment/
β βββ production.json # Ambiti globali (tutti i flavor)
β βββ staging.json
β βββ myflavor/
β β βββ production.json # Specifico del flavor
β β βββ staging.json
β βββ otherflavor/
β βββ production.json
β βββ staging.json
F-Run non crea questi file, ma li usa quando gli chiedi una build (scegli development o production).
project/
βββ assets/
β βββ icons/
β β βββ icons_launcher.yaml
β β βββ flutter_native_splash.yaml
β βββ myflavor/
β β βββ icons/
β β βββ icons_launcher.yaml
β β βββ flutter_native_splash.yaml
Quando generi icons/splash, F-Run legge ogni config icons_launcher.yaml e flutter_native_splash.yaml e esegue dart run icons_launcher:create / dart run flutter_native_splash:create.
project/
βββ lib/
β βββ main.dart # Senza flavor
β βββ flavors/
β βββ main_myflavor.dart
β βββ main_otherflavor.dart
project/
βββ android/
β βββ Fastfile # Configurazione principale
β βββ supply.json # Credenziali (no flavor)
β βββ supply_myflavor.json # Credenziali specifiche del flavor
| Feature | macOS | Linux | Windows |
|---|---|---|---|
| Clean | β | β | β |
| Build Runner | β | β | β |
| Build APK | β | β | β |
| Build AAB | β | β | β |
| Build IPA | β | β | β |
| Upload App Store | β | β | β |
| Terminale separato (watch) | β | β | |
| Katana localization | β | β | β |
| Easy localization | β | β | β |
| Fastlane | β | β |
Note:
- iOS/IPA: Richiede macOS e Xcode. Usa
xcrunealtool(solo Apple) - Fastlane: Cross-platform, ma alcune feature richiedono macOS
- Terminale separato: Fallback a shell normale se non supportato
| Feature | Detection method | Fallback |
|---|---|---|
| Flavors Android | Legge android/app/src/ |
enabled: false |
| iOS | Verifica ios/Runner/Info.plist |
enabled: false |
| Katana | Cerca katana_localization in pubspec.yaml |
enabled: false |
| Easy Localization | Cerca easy_localization in pubspec.yaml |
enabled: false |
| Icons Launcher | Cerca icons_launcher in pubspec.yaml |
enabled: false |
| Native Splash | Cerca flutter_native_splash in pubspec.yaml |
enabled: false |
| Shorebird | Verifica shorebird.yaml in radice |
enabled: false |
| Fastlane | Cerca Fastfile in android/ |
enabled: false |
- Organizzazione: Rispetta la struttura modulare (config, core, features, ui)
- Naming: Inglese tecnico per simboli, italiano per messaggi utente
- Lint:
cargo fmt && cargo clippy(strict warnings abilitati in root) - Unwrap: Vietato! Usa
unwrap_or_else()+error_and_exit()oppureResult - Doc: Rustdoc con sezioni
# Parametri,# Return,# Panics - Test: Non obbligatori (no test suite principale), ma consigliati
- Fork il repo
- Crea branch:
git checkout -b feature/my-feature - Commit:
git commit -am "Descrizione in italiano" - Push:
git push origin feature/my-feature - Pull Request
- π Segnala bug: GitHub Issues
- π‘ Proposte: GitHub Discussions
- π Doc interna:
cargo doc --open
Strumento costruito per streamlineare lo sviluppo Flutter. β€οΈ
