dartdosh 0.9.2 copy "dartdosh: ^0.9.2" to clipboard
dartdosh: ^0.9.2 copied to clipboard

Flutter build and release CLI. Bumps the version, names artifacts, and uploads to Firebase, Telegram, App Store and Google Play.

0.9.2 #

Bug Fixes #

  • πŸ› Builds with a custom flavor name are no longer lost. Output files were located by matching against a hardcoded list of exact paths, which only covered flavors literally named production, staging and development. A project using prod, stg, dev, qa or any other flavor produced app-prod-release.aab at bundle/prodRelease/, which was not in the list β€” so the artifact was never renamed, never copied to output_path, and never uploaded to the Play Store.

    dartdosh now finds artifacts by scanning build/app/outputs/ for files written by the build that just ran, so any flavor name works, including ones invented later. When several are present, the one matching the requested environment wins; otherwise the most recent one does.

  • πŸ› Failures are no longer silent. The file-moving step swallowed every exception, so a build that moved nothing still reported success. Errors are now logged, and a missing artifact prints which directories were searched.

  • πŸ› output_path starting with ~ now works. It was treated as a relative path and pasted under the project directory (<project>/~/Desktop/builds). Windows drive paths (C:\...) and UNC paths were misread the same way and are now recognised as absolute.

  • πŸ› Split APKs: with --split-per-abi, every architecture is now moved, each keeping its ABI suffix. Previously the scan could stop after the first match. Duplicate copies that Flutter writes to both flutter-apk/ and apk/<flavor>/<type>/ are deduplicated, and *-unsigned.apk intermediates are ignored.

Documentation #

  • πŸ“ Rewrote the README for the pub.dev landing page: badges, a real terminal transcript of dartdosh build aab -p, a comparison against fastlane, a three-line quick start, and a scannable feature list. Previously the page opened with a video thumbnail and a table of 14 off-site links, with no example of what running the tool looks like.
  • πŸ” Sharper description and added topics (cli, build, deployment, ci-cd, automation) in pubspec.yaml, so the package surfaces in pub.dev topic browsing. The old description omitted uploading and Play Store support entirely.

0.9.1 #

New Features #

  • βš™οΈ Telegram credentials can now live in dartdosh_config/settings.json, under telegram.api_id / api_hash / bot_token, for keeping everything about one project in a single file. dartdosh init fills the keys in empty and keeps the file gitignored.

Resolution order is now: environment variables β†’ project settings.json β†’ ~/.dartdosh/credentials.json. A source with any field blank is skipped entirely, so a half-filled settings.json cannot shadow a working credentials.json.

~/.dartdosh/credentials.json remains the recommended location β€” it sits outside the project tree and is shared by every project on the machine. dartdosh telegram status prints a reminder when credentials are read from inside the project.

0.9.0 #

⚠️ Security β€” action required #

The shared dartdosh Telegram bot has been revoked and removed. Its token, api_id and api_hash were hardcoded in telegram_uploader.dart, which ships in the published package and the public repo β€” meaning anyone who installed dartdosh 0.8.1–0.8.5 could read them, and at least one third party did. Published pub.dev versions are immutable, so revocation was the only effective remedy.

If you use Telegram upload, you must now bring your own bot:

dartdosh telegram setup

Nothing else changes β€” telegram.enabled and telegram.<env>.chat_id work exactly as before.

Breaking Changes #

  • πŸ” Telegram upload now requires your own credentials. dartdosh no longer ships any bot. Register an app at my.telegram.org, create a bot with @BotFather, then run dartdosh telegram setup. Builds with telegram.enabled: true but no credentials now log a clear error and skip the upload instead of using a shared bot.

New Features #

  • ✨ dartdosh telegram setup: interactive wizard that collects api_id, api_hash and bot_token, verifies the token against the Telegram Bot API, and stores it in ~/.dartdosh/credentials.json with owner-only (0600) permissions. Secrets are typed with terminal echo disabled.
  • ✨ dartdosh telegram status: shows which credentials are in effect and where they came from, with the bot token masked, and re-checks the token against Telegram.
  • πŸ€– CI support: DARTDOSH_TG_API_ID, DARTDOSH_TG_API_HASH and DARTDOSH_TG_BOT_TOKEN environment variables take precedence over the credentials file.

Security Fixes #

  • πŸ” Removed all hardcoded credentials from the published package
  • πŸ” Credentials are passed to the Python uploader through the environment instead of argv β€” command-line arguments are readable by every user on the machine via ps
  • πŸ” The telethon session file is now created in a temp directory and deleted after each upload. Previously it was written to the working directory, dropping an auth-bearing dartdosh_tg_session.session file inside the user's repo; dartdosh init now deletes any leftover copy
  • πŸ” dartdosh init also adds dartdosh_config/play_store_key.json (Google service account key) and *.session to .gitignore, and re-applies all gitignore rules on existing projects

Documentation #

  • πŸ“„ Rewrote doc/en/07-telegram.md for the bring-your-own-bot flow, with CI and troubleshooting sections
  • πŸ“„ Added a "Secrets" section to doc/en/02-configuration.md documenting where each credential belongs
  • πŸ“„ Updated Telegram setup steps in the Uzbek, Russian and Turkish READMEs

0.8.5 #

New Features #

  • πŸͺ Google Play Store upload: AAB files now auto-upload to Play Store after build
    • Auth via service account JSON β€” no extra tools required
    • Per-environment track config: internal, beta, production
    • google-api-python-client auto-installed if missing
    • dartdosh init now generates play_store section in config files

Documentation #

  • πŸ“„ Added doc/en/11-play-store.md with full setup guide and usage examples

0.8.4 #

New Features #

  • 🧹 New dartdosh clean command: Remove accumulated build output files with a single command
    • dartdosh clean all β€” removes everything in the output folder
    • dartdosh clean apk/ipa/aab β€” removes files for a specific target
    • dartdosh clean apk -d/-p/-s β€” removes only environment-specific files
    • Reports number of files deleted and space freed

0.8.3 #

Documentation #

  • πŸ“š Added numbered doc files: doc/en/ files now use numeric prefixes (01-, 02-, ...) for logical ordering in file explorers
  • πŸ”— Updated all doc links: README.md FAQ links and internal cross-links updated to match new filenames

0.8.2 #

Documentation #

  • πŸ“š Restructured docs into modular files: Each feature now has its own dedicated doc page (doc/en/)
  • πŸ“ Added English documentation index (doc/README.en.md) with links to all modules
  • ✈️ Telegram setup guide updated: Added @dartdosh_manager_bot as the official bot to add as Admin
  • 🏠 Simplified README landing page: Clean FAQ-style table of contents linking to GitHub docs

0.8.1 #

Bug Fixes #

  • πŸ› Fixed missing telegram_uploader.dart in published package: File was incorrectly gitignored causing build failure on install

0.8.0 #

New Features #

  • πŸš€ Telegram Channel Upload: APK files can now be uploaded directly to Telegram channels via MTProto protocol
    • Bypasses Telegram Bot API's 50MB limit β€” supports files up to 2GB
    • Auto-installs required telethon Python package if not present
    • Users only need to add the bot as admin to their channel and set chat_id
    • Configure per environment in build_config.json (telegram.<env>.chat_id)
    • Enable/disable in settings.json (telegram.enabled)
    • Works alongside Firebase Distribution (both can be enabled simultaneously)
    • dartdosh init now generates telegram sections in config files automatically

0.7.9 #

Bug Fixes #

  • πŸ› Fixed APK File Selection Bug: Fixed issue where wrong APK file was copied after build
    • Now correctly selects APK based on actual build environment (dev/prod/staging)
    • Supports both short (dev, prod, stg) and full (development, production, staging) flavor names
    • Prevents copying old prod APK when building dev, and vice versa

0.7.8 #

Documentation #

  • πŸ“š Enhanced --dart-define-from-file Documentation: Added comprehensive usage guide
    • Direct command line usage examples
    • build_config.json configuration method (recommended for teams)
    • Benefits comparison between approaches
    • Example config file structure
    • Positioned prominently for new user visibility
    • Updated all language READMEs (English, Uzbek, Russian, Turkish)

0.7.7 #

Improvements #

  • βœ… Smart Migration Logic: Improved dartdosh init to preserve existing configuration
    • No longer overwrites existing config files
    • Only adds missing fields during migration/validation
    • Automatically deletes old build_config.json after successful migration
    • Better nested field validation for firebase_distribution

0.7.6 #

Bug Fixes #

  • πŸ› Fixed Missing Firebase Upload Translation: Fixed "Missing translation: firebase_upload_starting" error
    • Regenerated embedded translations from JSON source files
    • All Firebase upload messages now display correctly in all languages

New Features #

  • πŸ“Š Real-time Firebase Upload Progress: Added live progress monitoring for Firebase Distribution uploads
    • Shows progress percentage (50%, 75%, 100%)
    • Displays status messages during upload process
    • Real-time feedback for uploading and processing stages
    • Better user experience with visual progress indicators

0.7.5 #

Bug Fixes #

  • πŸ› Critical Firebase Upload Fixes: Fixed three major issues preventing Firebase Distribution from working
    • Release Notes Prompt: Now correctly prompts for release notes on APK builds with environment-specific enabled check
    • Upload Logs: Fixed missing upload starting log and added detailed progress logs (App ID, tester groups, command)
    • Infinite Hang: Fixed async/await issue causing uploads to hang - now properly awaits upload completion
    • All upload functions now properly awaited to ensure completion before proceeding

Improvements #

  • πŸ“Š Enhanced Logging: Added detailed Firebase upload logs showing App ID, tester groups, and exact command being executed
  • ⚑ Better Async Handling: Properly structured async operations for file renaming and upload functions

0.7.4 #

Documentation #

  • πŸ“š Fixed README Links: Updated multi-language documentation links to use absolute GitHub URLs
    • Links now work correctly on pub.dev
    • All language switcher links point to GitHub repository

0.7.3 #

Bug Fixes #

  • πŸ› Firebase Distribution Upload Fix: Fixed critical bug where Firebase couldn't upload APKs
    • Was incorrectly reading from settings.json instead of build_config.json for app_id and tester_groups
    • Now properly reads team-shared config (app_id, tester_groups) from build_config.json
    • Personal settings (enabled flag) still read from settings.json
    • Resolves "Missing translation: firebase_upload_missing_app_id" error

0.7.2 #

New Features #

  • πŸ”₯ Environment-Specific Firebase Distribution: Firebase App Distribution now supports separate configurations for production, staging, and development
    • Team-shared config (app IDs, tester groups) in build_config.json
    • Personal settings (enable/disable per environment) in settings.json
    • Better team collaboration - no credential conflicts
    • Example:
      // build_config.json
      "firebase_distribution": {
        "production": {
          "app_id": "1:123456789:android:prodabc123",
          "tester_groups": "production-testers,management"
        }
      }
      
      // settings.json
      "firebase_distribution": {
        "production": { "enabled": false },
        "staging": { "enabled": true }
      }
      

Improvements #

  • πŸ”„ Automatic Migration: Existing configs automatically upgraded to new Firebase structure
  • 🎯 Smart Validation: dartdosh init validates and adds missing Firebase config fields
  • πŸ’ Donation Messages: Added friendly donation prompts after successful Firebase and IPA uploads
  • πŸ“š Enhanced Documentation: Updated README with prominent Turkish language support and new Firebase structure

Bug Fixes #

  • βœ… Complete Migration Logic: All new Firebase configuration fields are now properly handled in migrations
  • βœ… Config Validation: Missing firebase_distribution section is automatically added when upgrading

0.7.1 #

New Features #

  • πŸ‡ΉπŸ‡· Turkish Language Support: Added complete Turkish (tr) translation
    • All log messages and progress tasks translated to Turkish
    • "Patron" style messaging for Turkish users
    • Usage: dartdosh build apk --language tr or -l tr

Improvements #

  • 🌍 Expanded Language Support: Now supporting 4 languages (uz, en, ru, tr)
  • πŸ“ Better Localization: Turkish translation includes embedded fallback

0.7.0 #

Major Changes - Refactoring #

  • πŸ”§ Centralized Translation System: All translations moved to JSON files
    • Created separate JSON files for each language (uz.json, en.json, ru.json)
    • Removed 500+ lines of hardcoded translations from logger.dart
    • Removed 200+ lines of inline translations from version_manager.dart
    • New TranslationLoader class with caching and fallback support
    • Embedded translations as fallback for reliability

New Features #

  • ✨ Easy Language Addition: Adding new languages now takes minutes instead of hours
    • Copy existing JSON file
    • Translate values
    • Add language code to supported list
    • Done!

Improvements #

  • πŸ“¦ Smaller Codebase: 64% reduction in logger.dart size (646 β†’ 230 lines)
  • πŸ“¦ Smaller VersionManager: 55% reduction in size (350 β†’ 157 lines)
  • 🎯 Better Maintainability: All translations in one place, easier to manage
  • πŸš€ Performance: Translation caching prevents repeated file reads
  • πŸ”„ Separation of Concerns: Logic separated from translation data

Technical Changes #

  • Added TranslationLoader class for JSON-based translation loading
  • Added embedded_translations.dart as fallback
  • New LogType enums for version manager and Firebase operations
  • Refactored Logger to use TranslationLoader
  • Refactored VersionManager to use Logger system
  • Fixed hardcoded Firebase upload messages in BuildManager

0.6.5 #

Bug Fixes #

  • πŸ› Fixed Upgrade Command: Changed from dart pub global activate to pub global activate
    • The upgrade command now uses correct syntax for activating global packages
    • Resolves upgrade failures when using dartdosh upgrade

0.6.4 #

Bug Fixes #

  • πŸ› Fixed Config Validation: dartdosh init now properly validates nested fields
    • Validates nested fields in ipa_upload and firebase_distribution config objects
    • Adds missing fields like enabled, apple_id, app_id, tester_groups
    • Ensures complete config structure even when parent object exists but is empty
    • Reports all missing nested fields properly with detailed field paths

0.6.3 #

Changes #

  • πŸ”§ Simplified IPA Upload: Removed "What to Test" notes prompt for IPA builds
    • Apple's altool doesn't support sending notes to TestFlight automatically
    • Notes need to be added manually in App Store Connect
    • Simplified upload process for better user experience

0.6.2 #

New Features #

  • πŸ”₯ Firebase App Distribution Integration: APK builds can now auto-upload to Firebase
    • Automatic upload to Firebase App Distribution after APK build
    • Interactive release notes prompt before build starts
    • Configure via firebase_distribution in settings.json
    • Support for tester groups
    • Real-time upload progress
    • Requires Firebase CLI installed (npm install -g firebase-tools)

0.6.1 #

Improvements #

  • πŸ“ Better Init Completion Messages: Init messages now show config location and usage examples
    • Shows exactly where config files were created (dartdosh_config/)
    • Instructs users to review configs before use
    • Provides specific example commands (e.g., dartdosh build apk -p)
    • Updated across all languages (uz, en, ru)
    • Makes initialization process clearer for first-time users

0.6.0 #

Major Changes - Breaking #

  • πŸ”§ New Configuration Structure: Split config into 2 files for better team collaboration
    • dartdosh_config/build_config.json - Team shared (Git tracked) - Build commands
    • dartdosh_config/settings.json - Personal (Gitignored) - Credentials & preferences
    • No more credential conflicts in team!
    • Old build_config.json automatically migrated to new structure

New Features #

  • ✨ dartdosh init Command: Initialize or validate configuration
    • Creates config files from scratch
    • Validates existing config and adds missing fields
    • Migrates old single-file config to new structure
    • Auto-adds settings.json to .gitignore
    • Smart logging for each scenario

Improvements #

  • πŸ“ Simplified File Names: user_settings.json β†’ settings.json
  • πŸ“š Updated Documentation: README with clear explanation of 2-file structure
  • πŸš€ Better Team Workflow: Build commands shared, credentials private
  • πŸ”„ Auto Migration: Old config users get seamless upgrade path

Build Command Changes #

  • Build commands now require dartdosh init first
  • No auto-config creation - explicit initialization required
  • Clear error message if config not found

0.5.11 #

Changes #

  • πŸ“ Updated Config Examples: All ipa_upload examples now show enabled state with example credentials
    • Changed enabled: false to enabled: true in all config examples
    • Updated empty credentials to example values (developer@example.com, abcd-efgh-ijkl-mnop)
    • Users can see complete working example instead of empty template
    • Affects: README.md, example/README.md, build_config.example.json

Documentation #

  • Configuration examples now demonstrate active IPA upload setup
  • Makes it clearer how to configure IPA auto-upload feature
  • Users can simply replace example values with their own credentials

0.5.10 #

Bug Fixes #

  • πŸ› Fixed Incomplete Config Examples: All build_config.json examples now complete
    • Added missing development flavor for ipa section in README.md
    • Added missing development flavor for ipa and appbundle sections in example/README.md
    • All three build targets (apk, ipa, appbundle) now have all three flavors (production, staging, development)

Changes #

  • README.md configuration example now includes complete IPA section
  • example/README.md configuration example now fully matches build_config.example.json
  • Consistency across all documentation files

0.5.9 #

Documentation Updates #

  • πŸ“± Added iOS (IPA) Build Quick Guide: Comprehensive guide for building and uploading iOS apps
    • Prerequisites and setup instructions
    • Basic IPA build commands with examples
    • Step-by-step guide for automatic upload to App Store Connect
    • How to get App-Specific Password from Apple
    • Output file organization and naming format
    • Important notes and troubleshooting tips
  • πŸ“š Updated All Documentation: README.md, example/README.md, and build_config.example.json
    • Added ipa_upload configuration in all examples
    • Updated feature lists to include IPA auto-upload
    • Enhanced example outputs showing upload process
    • Improved file structure documentation

Changes #

  • Updated README.md with detailed iOS build section
  • Updated example/README.md with IPA upload examples
  • All config examples now include complete ipa_upload section
  • Documentation now reflects all current features (v0.5.x)

0.5.8 #

Bug Fixes #

  • πŸ› Fixed Version Display Bug: Version commands now correctly show dartdosh package version instead of user's project version
  • βœ… Smart Version Detection: Automatically locates and reads dartdosh's own pubspec.yaml from installation directory
  • πŸ”§ Accurate Version Info: --version, upgrade, and downgrade commands now display correct dartdosh version

Technical Changes #

  • Changed currentVersion from constant to getter that dynamically reads dartdosh package's pubspec.yaml
  • Uses Platform.script.toFilePath() to locate dartdosh installation path
  • Navigates directory tree to find package's pubspec.yaml
  • Validates package name matches 'dartdosh' before returning version
  • Fallback to version 0.5.8 if reading fails
  • Re-added yaml package import for version reading

0.5.7 #

Improvements #

  • πŸ’¬ Even More Fun Messages: Enhanced version-related messages with more personality
    • --version: "Sizdahoz DartDosh X.X.X versiya ekan, Xo'jayiin!"
    • --check-version: "Update yo'q ekan, sizda eng oxirgi versiya, Xo'jayiin!" or "Yangilash uchun mana bu commandni yozing: dartdosh upgrade"
    • upgrade: 4 random cheerful variants including "Endi bemalol maqtanib yursangiz bo'ladi!" and "Do'stlaringizga aytib yurasiz!"
    • More encouraging and personalized messages throughout

0.5.6 #

Major Improvements #

  • 🎯 Dynamic Version Management: Version now read from pubspec.yaml instead of hardcoded
    • No more duplicate version maintenance
    • dartdosh --version shows actual installed version
    • Automatic version sync across all commands
  • πŸ’¬ Enhanced Version Messages: More personalized and fun version-related logs
    • --version: "Sizda DartDosh X.X.X versiya bor ekan, Xo'jayiin!"
    • --check-version: Shows current vs latest with upgrade hint
    • upgrade: "Versiyangiz X.X.X dan Y.Y.Y ga yangilandi. Endi bemalol maqtanib yursangiz bo'ladi, Xo'jayiin!"
    • All messages support uz/en/ru languages

Technical Changes #

  • Removed hardcoded currentVersion constant from VersionManager
  • Added _getCurrentVersion() getter that reads from pubspec.yaml
  • Upgraded logs show version transition (old β†’ new)
  • Downgrade logs show version rollback with confirmation

0.5.5 #

Improvements #

  • πŸ”§ Complete Default Config: Added development flavor to IPA builds in default config
    • Now all build types (APK, IPA, AAB) have production, staging, and development flavors
    • Consistent configuration across all platforms
  • πŸ“‹ Better Log Ordering: Donation message now appears at the very end after total time
    • More logical flow: success β†’ time β†’ donation

Configuration #

Default config now includes:

"ipa": {
  "production": "flutter build ipa --release --flavor production",
  "staging": "flutter build ipa --release --flavor staging",
  "development": "flutter build ipa --debug --flavor development"
}

0.5.4 #

Improvements #

  • ⏱️ Execution Time Tracking: Now tracks and displays total time for each build command
    • Shows total execution time at the end with positive motivational messages
    • Displays time in seconds with one decimal precision
    • Multilingual support (uz/en/ru) for time messages
  • πŸ“Š Enhanced Upload Logging: Improved IPA upload progress visibility
    • All upload output now uses the Logger system
    • Removed hardcoded print statements
    • Shows altool stdout/stderr as structured progress logs
    • Better error messages during upload failures
  • 🎨 Clean Logging Architecture: Converted all print statements to Logger
    • Consistent multilingual logging throughout the codebase
    • Added uploadProgress and totalTime LogType enums
    • Structured and organized log messages

Technical Changes #

  • Added Stopwatch to track build execution time
  • Added progress and time parameters to Logger.log()
  • Updated switch statement to handle new LogType cases
  • Upload output parsing and line-by-line progress logging

0.5.3 #

Bug Fixes #

  • πŸ”§ IPA Upload Fix: Switched from iTMSTransporter to altool for IPA uploads
    • altool accepts .ipa files directly (iTMSTransporter expected directories)
    • Simpler and more reliable upload process
    • Fixes "is NOT a directory" error from iTMSTransporter

0.5.2 #

Bug Fixes #

  • πŸ› IPA Upload Fix: Fixed iTMSTransporter "Unknown transport specified: ios" error
    • Removed invalid -t ios parameter from iTMSTransporter command
    • Upload to App Store Connect should now work correctly
  • πŸ“Š Upload Visibility: Added stdout output display for upload process
    • Shows complete iTMSTransporter output for better visibility
    • Helps users understand what's happening during upload

0.5.1 #

Bug Fixes #

  • πŸ› Upload Error Details: Added detailed error messages for IPA upload failures
    • Shows stderr output when upload fails
    • Helps debug Xcode/Transporter issues

0.5.0 #

Features #

  • 🎯 Version Commands: New version management commands with fun, localized messages
    • dartdosh --version or dartdosh -v - Show current version
    • dartdosh --check-version - Check for updates on pub.dev
    • dartdosh upgrade - Upgrade to latest version
    • dartdosh downgrade - Downgrade to previous version (0.4.1)
    • dartdosh downgrade <version> - Downgrade to specific version
  • 🌍 Multilingual Support: All version commands support Uzbek, English, and Russian
  • 😎 Fun Messages: Random cheerful messages for each operation (Boss/Xo'jayiin/Босс style)

Commands #

# Check version
dartdosh --version
dartdosh -v

# Check for updates
dartdosh --check-version

# Upgrade to latest
dartdosh upgrade

# Downgrade
dartdosh downgrade          # to previous version
dartdosh downgrade 0.4.1    # to specific version

0.4.2 #

Bug Fixes #

  • πŸš€ Universal IPA Upload: Fixed IPA upload to work for both flavor and non-flavor builds
    • Now works with dartdosh build ipa (no environment)
    • Also works with dartdosh build ipa --production (with environment)
    • Upload process is consistent across all build commands

0.4.1 #

Improvements #

  • πŸ“Ί Video Tutorial: Added YouTube tutorial link at the top of README.md
  • 🧹 Simplified Config: Removed upload_after_build field - IPA upload now controlled only by enabled flag
  • πŸ“ Enhanced Logging: All upload process messages now use Logger system for multilingual output
  • 🎨 Consistent Output: Replaced all print() statements with Logger.log() calls throughout codebase

Breaking Changes #

  • The upload_after_build field has been removed from ipa_upload configuration
  • If you have this field in your config, simply remove it - upload is now controlled only by the enabled flag

0.4.0 #

Features #

  • πŸš€ IPA Auto Upload to App Store: Automatically upload IPA files to App Store Connect after build
  • πŸ“€ Transporter Integration: Uses xcrun iTMSTransporter for reliable uploads
  • βš™οΈ Configurable Upload: Control upload behavior via ipa_upload.enabled flag
  • πŸ” Secure Credentials: Store Apple ID and App-Specific Password in config
  • 🎨 Localized Upload Logs: Upload process messages in Uzbek, English, and Russian
  • πŸ“ Clean Logging: All messages use Logger system for consistent multilingual output

Configuration #

New ipa_upload section in build_config.json:

{
  "ipa_upload": {
    "enabled": false,              // Enable/disable IPA upload
    "apple_id": "your@apple.id",   // Your Apple ID
    "app_specific_password": "xxxx-xxxx-xxxx-xxxx"  // App-specific password
  }
}

How It Works #

  1. Build IPA with dartdosh
  2. If ipa_upload.enabled is true and credentials are set
  3. Automatically uploads to App Store Connect using Apple's Transporter
  4. Shows localized upload progress and results

Requirements #

  • macOS with Xcode installed (for xcrun iTMSTransporter)
  • Apple ID with app-specific password
  • Valid iOS distribution certificate and provisioning profile

Technical Changes #

  • Removed upload_after_build field (simplified to just enabled)
  • Added 4 new LogTypes: uploadStarting, uploadSuccess, uploadFailed, uploadCredentialsMissing
  • All upload messages now support uz/en/ru languages
  • Replaced all print() calls with Logger.log() for consistency

0.3.3 #

Features #

  • πŸ“‚ Type-Based Subfolders: Build files now organized by type (apk/ipa/aab) within project folder
  • πŸ”§ AAB Command Support: Added support for aab as alternative to appbundle command
  • πŸ”’ Git Push Confirmation: Added pre-push hook to confirm before pushing to remote

Changes #

  • Output structure now: output_path/project_name/{apk|ipa|aab}/file.ext
  • CLI now accepts dartdosh build aab (normalized to appbundle)
  • Git hook prompts for confirmation before every push

File Structure #

~/Desktop/dartdosh-builds/
└── my_app/
    β”œβ”€β”€ apk/
    β”‚   β”œβ”€β”€ prod_1.0.0_100.apk
    β”‚   └── dev_1.0.0_101.apk
    β”œβ”€β”€ ipa/
    β”‚   └── prod_1.0.0_100.ipa
    └── aab/
        └── prod_1.0.0_100.aab

0.3.2 #

Changes #

  • πŸ”§ Removed Auto-Open Config: Config file no longer opens automatically in IDE after creation
  • βœ… Improved Config Creation: Added async write with flush to ensure file is properly written
  • πŸ“ Better User Experience: User manually opens and reviews config file instead of auto-open

Technical #

  • Removed _openConfigFile() method
  • Made _createDefaultConfig() async with flush: true parameter
  • Added 100ms delay after write to ensure file system flush

0.3.1 #

Bug Fixes #

  • πŸ› Fixed Config File Creation: Ensure build_config.json is fully written before opening in IDE
  • βœ… Improved File Write Order: File is now verified to exist before attempting to open
  • πŸ”§ Prevent Empty Config Files: Added file existence check to prevent race conditions

Changes #

  • Added file existence verification after config creation
  • Config file is only opened if successfully written
  • Prevents empty or incomplete config files from being opened

0.3.0 #

Features #

  • πŸ—‚οΈ Multi-Project Support: Added project_name field for organizing builds by project
  • πŸ“ Project-Based Folders: Each project gets its own subfolder in output directory
  • 🎯 Auto Project Detection: Reads project name from pubspec.yaml by default
  • 🏒 Multi-Project Workflow: Use same output directory for multiple projects

Changes #

  • Added project_name field to build config (defaults to pubspec.yaml name)
  • Output path now includes project subfolder: output_path/project_name/
  • All builds are organized: ~/Desktop/dartdosh-builds/my_app/prod_1.0.0_100.apk
  • Updated all documentation with multi-project examples

File Structure #

~/Desktop/dartdosh-builds/
β”œβ”€β”€ my_app/
β”‚   β”œβ”€β”€ prod_1.0.0_100.apk
β”‚   └── dev_1.0.0_101.apk
└── ecommerce_app/
    β”œβ”€β”€ prod_2.0.0_50.apk
    └── stg_2.0.0_51.ipa

Configuration #

{
  "project_name": "my_app",  // New field
  "output_path": "~/Desktop/dartdosh-builds",
  ...
}

0.2.9 #

Documentation #

  • πŸ“š Updated All Documentation: All docs, examples, and configs updated to reflect latest features
  • πŸ“ Updated build_config.example.json: Added language and auto_increment_build_number fields
  • πŸ“– Updated example/README.md: Updated all examples with new file naming format and features
  • 🎯 Consistent Examples: All examples now show correct output format (prod_1.2.3_46.apk)

Changes #

  • Updated example outputs to show new short environment naming
  • Updated feature descriptions to reflect current behavior
  • Added multi-language support and auto-increment info to examples
  • Removed outdated version increment references from examples

0.2.8 #

Features #

  • πŸ“ Shorter File Names: Build files now use short environment names instead of full names
  • 🎯 Clean Naming: Files are named as {shortEnv}_{version}_{buildNumber}.{ext} (e.g., prod_1.0.9_2155.apk)
  • ✨ Consistent Format: All flavor builds follow the same compact naming pattern

Changes #

  • Environment name mapping: production β†’ prod, development β†’ dev, staging β†’ stg
  • Removed target name from flavor build file names for cleaner output
  • File extension indicates the type (.apk, .ipa, .aab)

Examples #

Before:

apk_production_1.0.9_2155.apk
ipa_staging_2.0.0_12.ipa

After:

prod_1.0.9_2155.apk
stg_2.0.0_12.ipa

Split APKs:

prod_1.0.9_2155_arm64-v8a.apk
prod_1.0.9_2155_armeabi-v7a.apk

0.2.7 #

Changes #

  • πŸ”§ Default Behavior Update: auto_increment_build_number now defaults to false
  • πŸ“ Documentation Update: All docs updated to reflect new default behavior
  • βš™οΈ Opt-in Version Management: Users must explicitly enable auto increment by setting config to true

Rationale #

  • Prevents unexpected version changes
  • Gives users explicit control over version management
  • More predictable default behavior

0.2.6 #

Features #

  • 🎯 Better Config Creation UX: When build_config.json doesn't exist, it's created and opened in IDE
  • πŸ›‘ Smart Config Workflow: Execution stops after config creation, prompting user to review and re-run
  • βš™οΈ Optional Build Number Increment: Added auto_increment_build_number boolean field in config (default: false)

Changes #

  • Config file now automatically opens in default IDE when created
  • Added buildConfigCreated LogType with instructions to review config and re-run
  • Build number increment is now disabled by default, can be enabled by setting auto_increment_build_number: true
  • Execution stops after config creation instead of continuing with build

Configuration #

{
  "language": "uz",
  "auto_increment_build_number": false,  // New field (default: false)
  "output_path": "~/Desktop/dartdosh-builds",
  ...
}

Examples #

# First run - creates config and stops
dartdosh build apk --production
# Output: Config created, opened in IDE, asks to re-run

# Second run - proceeds with build
dartdosh build apk --production
# Output: Normal build process (version not incremented by default)

# Enable auto increment in config
"auto_increment_build_number": true
# Build runs with version increment

0.2.5 #

Features #

  • πŸ“¦ File Management for All Builds: Files are now renamed and moved to output_path even without environment flags
  • 🎯 Consistent Output: Both flavor and plain builds get organized file naming

Changes #

  • Non-environment builds now rename files to {target}_{version}_{buildNumber} format
  • Files are moved to output_path regardless of environment flag presence
  • Only version increment is skipped for non-environment builds
  • File organization works for all build types

Examples #

# With environment - increments version, renames: apk_production_1.2.3_46.apk
dartdosh build apk --production

# Without environment - no version increment, renames: apk_1.2.3_46.apk
dartdosh build apk

0.2.4 #

Features #

  • 🎯 Optional Environment: Environment flags are now optional - run plain Flutter commands without flavors
  • πŸ”§ Flexible Builds: Use dartdosh build apk for simple builds without version management
  • πŸ“¦ Smart Behavior: Version increment and file renaming only happen when environment is specified

Changes #

  • Environment parameter is now nullable in CLI and BuildManager
  • When no environment specified, runs plain flutter build <target> command
  • Build number increment only happens for flavor builds (when environment is specified)
  • File renaming/moving only occurs for flavor builds
  • Default environment display shows "default" in logs when no environment provided

Examples #

# With environment (flavor build) - increments version, renames files
dartdosh build apk --production
dartdosh build apk -p

# Without environment (plain Flutter build) - no version management
dartdosh build apk
dartdosh build ipa --release

0.2.3 #

Features #

  • ⚠️ Language Validation: Unsupported languages now show warning and fallback to English
  • πŸ“š Comprehensive Documentation: Updated README with detailed language support, flag variants, and examples
  • 🌍 Language Configuration Guide: Clear documentation on how to set and use language preferences

Changes #

  • Added language validation in Logger.setLanguage() with user-friendly warning
  • Unsupported languages automatically fallback to English with informative message
  • Updated README with multi-language examples in Uzbek and English
  • Documented all environment flag variants (-p, -prod, -d, -dev, -s)
  • Added language support notes and behavior documentation

Documentation #

  • Added multi-language support section with examples
  • Documented all short flag variants for environments
  • Added language fallback behavior explanation
  • Improved configuration examples with language field
  • Added comprehensive feature descriptions

0.2.2 #

Features #

  • 🌐 Localized Progress Bar: Progress bar tasks now translate according to selected language
  • πŸ“Š Multi-Language Build Stages: All build stages (Gradle, Dependencies, Compiling, etc.) display in user's language

Changes #

  • Added Logger.getProgressTask() static method for progress task translations
  • Created _progressTasks map with translations for all build stages
  • Updated _handleProcessOutput() to use localized progress messages
  • Progress stages now support Uzbek, English, and Russian

Technical #

  • New progress task keys: starting, gradle, dependencies_downloading, dependencies_ready, compiling, bundling, assembling, signing, finishing, ready
  • BuildManager now calls Logger.getProgressTask() for all stage updates

0.2.1 #

Features #

  • ⚑ Short Flag Support: Added convenient shorthand flags for environments
    • Production: --production, -p, -prod
    • Staging: --staging, -s
    • Development: --development, -d, -dev

Changes #

  • Enhanced CLI flag parsing to accept multiple variants for each environment
  • Updated environment flag filtering in extra flags extraction
  • Improved documentation for flag options

Examples #

# All these commands work the same:
dartdosh build apk --production
dartdosh build apk -p
dartdosh build apk -prod

dartdosh build apk --development
dartdosh build apk -d
dartdosh build apk -dev

dartdosh build apk --staging
dartdosh build apk -s

0.2.0 #

Features #

  • 🌍 Multi-Language Support: Full support for Uzbek (uz), English (en), and Russian (ru) languages
  • 🎯 Language Configuration: Added language field to build_config.json (default: "uz")
  • πŸ’¬ Localized Messages: All log messages translated with positive, encouraging tone across all languages
  • 🌟 Cultural Adaptation: Language-appropriate addressing - "Xo'jayiin" (uz), "Boss" (en), "Босс" (ru)

Changes #

  • Completely rewrote Logger class with multi-language support
  • Added static language state management in Logger
  • Implemented nested Map structure for translations: Map<String, Map<LogType, List<String>>>
  • All LogTypes now support 3 languages with multiple message variants
  • Language is read from build_config.json and applied to all log messages
  • BuildManager now sets language from config before executing builds

Technical #

  • Added Logger.setLanguage(String language) static method
  • Language validation: only accepts 'uz', 'en', 'ru'
  • Default language: 'uz' (Uzbek) if not specified in config
  • Maintains random message selection within each language

0.1.12 #

Features #

  • 🎯 Clean Progress Display: Build output is now hidden, showing only clean progress bar
  • ⚠️ Smart Error Display: Warnings and errors are still shown when they occur
  • πŸ“Š Enhanced Stage Detection: Added dependency resolution (30%) and "Got dependencies" (40%) stages

Changes #

  • Removed verbose Flutter build output for cleaner terminal
  • Only show warnings, errors, and failures from build output
  • Added dependency-related progress stages
  • Progress bar updates smoothly through all build stages (20% β†’ 40% β†’ 60% β†’ 95%)

0.1.11 #

Bug Fixes #

  • πŸ”§ Fixed Terminal Clearing: Progress bar now properly clears on macOS instead of creating new lines
  • πŸ“Š Enhanced Progress Detection: Added more build stage patterns (bundling, signing, assembling) for accurate progress tracking
  • 🎯 Better Stage Recognition: Progress now advances beyond 20% by detecting bundle, sign, and assemble stages

Changes #

  • Clear progress bar before showing stdout to prevent line duplication
  • Added comprehensive lowercase pattern matching for build stages
  • Added new build stages: bundling (60%), signing (80%), improved detection for assembling (70%)
  • Progress bar only shows after first stdout output to avoid premature display

0.1.10 #

Features #

  • ⚑ Faster Progress Updates: Progress bar now updates every 1 second (improved from 2 seconds)
  • πŸ“± Build Info Display: Progress bar now shows target and flavor being built (e.g., [apk - production])
  • 🍎 macOS Terminal Fix: Improved terminal clearing for better compatibility on macOS

Changes #

  • Changed progress update interval from 2 seconds to 1 second for more responsive feedback
  • Added target and environment info to progress bar display
  • Improved ANSI escape codes for terminal clearing on macOS

0.1.9 #

Features #

  • πŸ”„ Live Progress Updates: Progress bar updates every 2 seconds with current task info
  • πŸ“‹ Task Indicator: Shows what's happening: "Gradle ishlayapti...", "Flutter kodi kompilyatsiya qilinyapti..."
  • 🎯 AAB Support: Full support for aab and appbundle commands with proper file detection
  • πŸ”§ Better File Detection: Improved APK/AAB path detection for all flavors

Changes #

  • Progress bar now updates periodically (every 2 seconds) instead of on-demand
  • Added Timer.periodic for continuous progress updates
  • Fixed appbundle/aab not being copied to output path
  • Fixed flavor name duplication in Android build files
  • Improved split APK architecture extraction (only arch name, no flavor duplication)
  • Added more AAB path variants: productionRelease, stagingRelease, developmentDebug
  • Added more APK path variants for different flavor configurations

Bug Fixes #

  • Fixed: aab command not recognized
  • Fixed: Progress bar showing only once and freezing
  • Fixed: Appbundle files not moved to output directory
  • Fixed: Android file names containing duplicate flavor names (e.g., production_production_1.0.8.apk)

0.1.8 #

Features #

  • πŸ“Š Build Progress Bar: Real-time progress bar with percentage during builds
  • ⚑ Async Build Process: Non-blocking build execution with live output streaming
  • 🎯 Smart Progress Detection: Automatically detects Flutter build stages and updates progress

Changes #

  • Removed auto-open config file feature (config file no longer opens automatically)
  • Converted build process from sync to async for better performance
  • Added _handleProcessOutput() method for streaming build output
  • Added _showProgress() method with animated progress bar
  • Removed configFileOpened LogType (no longer needed)

0.1.7 #

Features #

  • πŸ’ Donation Messages: After successful builds, random humorous donation messages appear (10 variants)
  • πŸ“ Logger System: All console output now goes through the Logger system for consistency
  • 🎨 Better File Naming: Build files now named as {target}_{env}_{version}_{buildNumber} (e.g., apk_production_1.0.8_2150.apk)
  • πŸ”§ Enhanced LogTypes: Added buildNumberIncremented, fileSaved, outputDirCreated for detailed logging

Changes #

  • Removed all print() statements in favor of Logger.log()
  • Fixed file naming bug where environment was duplicated in filename
  • Added new LogType variants with random message selection
  • Improved code organization and consistency

0.1.6 #

Features #

  • 🎯 Desktop Output Path: Default output path now points to ~/Desktop/dartdosh-builds instead of releases
  • πŸ“‚ Auto File Open: Config file automatically opens in default editor after creation
  • πŸ’¬ Improved Messages: Better user feedback when config is created for first time
  • πŸ–₯️ Cross-Platform: Supports macOS, Linux, and Windows for auto file opening

Changes #

  • Changed default output_path from releases to ~/Desktop/dartdosh-builds
  • Added _openConfigFile() helper method for opening config in default editor
  • Enhanced console messages: "Xo'jayiin, default configlarni yaratdim, tekshirib ko'ring!"

0.1.5 #

Package Maintenance #

  • βœ… Added Verified Publisher: Package now published under verified publisher ahadjonovss.uz
  • πŸ“¦ Publisher Information: Added publisher field to pubspec.yaml for better package credibility

0.1.4 #

Bug Fixes #

  • πŸ› Fixed --split Flag for IPA: The --split flag is now properly ignored for IPA builds (iOS doesn't support split builds)
  • βœ… Improved Flag Handling: --split flag now only applies to APK builds, converting to --split-per-abi
  • πŸ“± Better Platform Support: Different build targets now handle flags appropriately based on platform capabilities

0.1.3 #

Critical Bug Fix #

  • πŸ”₯ Fixed Entry Point: Updated main entry point to use the new CLI class architecture
  • πŸ› Resolved Environment Detection: Fixed critical issue where dartdosh.dart was using old ArgParser code instead of the new CLI class
  • βœ… Simplified Architecture: Main entry point now properly delegates to CLI class for cleaner code organization

0.1.2 #

Bug Fixes #

  • πŸ› Fixed Environment Flag Parsing: Environment flags (--production, --staging, --development) are now correctly recognized and excluded from extra build flags
  • πŸ› Resolved "Unknown" Environment Error: Fixed issue where environment was being detected as "unknown" even when flags were provided

0.1.1 #

Code Quality Improvements #

  • βœ… Added Dartdoc Comments: All public APIs now have comprehensive documentation
  • βœ… Fixed Formatting Issues: All files formatted with dart format
  • βœ… Fixed Linting Issues: Removed unnecessary braces in string interpolation
  • βœ… Improved Pub Score: Achieved 50/50 pub points with proper documentation

Technical Changes #

  • Added dartdoc comments to CLI, BuildManager, and public functions
  • Fixed string interpolation warnings
  • Applied Dart formatting to entire codebase

0.1.0 #

New Features #

  • βœ… Automatic Build Number Increment: Build number automatically increments by 1 before each build
  • βœ… Output Path Support: Built files can be automatically copied to specified output directory
  • βœ… Smart File Naming: Files are renamed to {environment}_{version}_{buildNumber} format
  • βœ… Auto Directory Creation: Output directory is created automatically if it doesn't exist
  • βœ… Auto Config Generation: If build_config.json doesn't exist, it's automatically created with default settings
  • βœ… Personalized Messages: All log messages address the user as "Xo'jayiin" (Boss)

Changes #

  • Updated build_config.json structure to support output_path parameter
  • Build number is now incremented in pubspec.yaml before build starts
  • Built files are copied to output path (if specified) instead of just being renamed
  • Missing build_config.json is now auto-generated instead of causing an error
  • All logger messages now include "Xo'jayiin" for a personalized experience

Examples #

# With output_path configured
dartdosh build apk --production
# Result: releases/production_1.2.3_46.apk

# Without output_path
dartdosh build apk --staging
# Result: build/app/outputs/flutter-apk/staging_1.2.3_46.apk

0.0.3 #

  • Stable version with basic build functionality

0.0.1 #

  • Initial version
31
likes
160
points
603
downloads

Documentation

API reference

Publisher

verified publisherahadjonovss.uz

Weekly Downloads

Flutter build and release CLI. Bumps the version, names artifacts, and uploads to Firebase, Telegram, App Store and Google Play.

Repository (GitHub)
View/report issues

Topics

#cli #build #deployment #ci-cd #automation

License

MIT (license)

Dependencies

args, yaml

More

Packages that depend on dartdosh