automate 1.0.6
automate: ^1.0.6 copied to clipboard
A CLI tool to automate Flutter app deployment to TestFlight and Google Play Store using Fastlane.
Automate #
Stop wasting hours on app deployment. One command, and boom — your app is live on TestFlight or the App Store!
Automate is a CLI tool that handles all the complex Fastlane configurations for you. No need to memorize store requirements, write Ruby scripts, or debug cryptic errors. Just configure once, run one command, and your Flutter app is deployed.
Why Automate? #
- Dead Simple: Run
automate betaand your build is on TestFlight. That's it. - No Fastlane Knowledge Required: We generate all the Fastlane files for you
- One Config File: All your deployment settings in one JSON file
- Version Management: Automatically increments your version and build numbers
Features #
- Beta Mode: Upload builds to TestFlight (iOS) with optional external testing support
- Update Mode: Submit app updates to App Store Connect and Google Play Store
- Automatic version incrementing
- Fastlane configuration generation
- Support for localized changelogs
Important Note #
You must create your app on App Store Connect and Google Play Console manually for the first time. Automate handles all subsequent beta uploads and updates — but the initial app creation must be done through the store dashboards.
Once your app exists on the stores, Automate takes care of everything else! It will:
- Clean your project
- Fetch dependencies
- Increment version and build number automatically
- Build the right artifact (IPA for iOS, AAB for Android)
- Upload to the appropriate store
- Submit for review (in update mode)
Requirements #
- Dart SDK ^3.7.2
- Fastlane - Installation Guide
- For iOS: App Store Connect API Key - How to create API Key
- For Android: Google Play Service Account JSON key - How to create Service Account
iOS dependencies: Automate does not run CocoaPods itself. iOS dependency resolution is handled by
flutter build ipa, which works with both Swift Package Manager (the default since Flutter 3.44) and CocoaPods. CocoaPods is only required if your project still depends on plugins that haven't migrated to SPM, in which case Flutter generates and uses a Podfile automatically.
Installation #
dart pub global activate automate
Quick Start #
1. Initialize #
automate init
2. Configure #
Edit automate_config.json with your credentials.
3. Deploy #
automate beta # Upload to TestFlight
automate update # Submit to App Store / Google Play
That's it! No 50-step tutorials, no Stack Overflow rabbit holes.
Usage #
Beta Mode (TestFlight) #
# Build and upload for all platforms
automate beta
# iOS only
automate beta -p ios
# Skip build (use existing IPA)
automate beta -p ios --skip-build
Update Mode (App Store / Google Play) #
# Build and submit for all platforms
automate update
# iOS only
automate update -p ios
# Android only
automate update -p android
Configuration #
After running automate init, edit automate_config.json:
Minimal Configuration (Internal Testing Only) #
If you just want to upload to TestFlight for internal testing, this is all you need:
{
"android": {
"json_key_path": "path/to/service-account.json",
"changelog": {
"en-US": "Bug fixes and improvements"
}
},
"ios": {
"app_store_connect": {
"key_id": "YOUR_KEY_ID",
"issuer_id": "YOUR_ISSUER_ID",
"key_filepath": "path/to/AuthKey.p8"
},
"changelog": {
"en-US": "Bug fixes and improvements"
},
"testflight": {
"enable_external_testing": false
}
}
}
Note: When
enable_external_testingisfalse, you don't need to provide any other TestFlight fields likegroups,beta_app_feedback_email, orbeta_app_review_info. Keep it simple!
Full Configuration (With External Testing) #
If you want to distribute to external testers, set enable_external_testing to true and provide the required fields:
{
"android": {
"json_key_path": "path/to/service-account.json",
"changelog": {
"en-US": "Bug fixes and improvements"
}
},
"ios": {
"app_store_connect": {
"key_id": "YOUR_KEY_ID",
"issuer_id": "YOUR_ISSUER_ID",
"key_filepath": "path/to/AuthKey.p8"
},
"changelog": {
"en-US": "Bug fixes and improvements"
},
"testflight": {
"enable_external_testing": true,
"groups": "Beta Testers",
"beta_app_feedback_email": "feedback@example.com",
"beta_app_review_info": {
"contact_email": "contact@example.com",
"contact_first_name": "John",
"contact_last_name": "Doe",
"contact_phone": "+1234567890",
"demo_account_required": false,
"demo_account_name": "",
"demo_account_password": "",
"notes": ""
}
}
}
}
Note: If
demo_account_requiredisfalse, you don't need to providedemo_account_nameanddemo_account_password.
Localized Changelogs #
You can add multiple languages for your changelog. Just add more locale keys:
{
"changelog": {
"en-US": "Bug fixes and improvements",
"ar-SA": "إصلاحات وتحسينات",
"fr-FR": "Corrections de bugs et améliorations",
"de-DE": "Fehlerbehebungen und Verbesserungen"
}
}
The locale codes follow the format language-REGION (e.g., en-US, ar-SA, fr-FR). See Apple's locale codes and Google Play's supported languages.
iOS Configuration #
- key_id: Your App Store Connect API Key ID
- issuer_id: Your App Store Connect Issuer ID
- key_filepath: Path to your
.p8private key file
Learn how to create your API Key: Apple Documentation
Android Configuration #
- json_key_path: Path to your Google Play Service Account JSON key
Learn how to create your Service Account: Google Play Documentation
Command Options #
| Option | Short | Description |
|---|---|---|
--platform |
-p |
Target platform: ios or android |
--skip-build |
-s |
Skip the build process and use existing artifacts |
License #
BSD 3-Clause License - see LICENSE for details.