#Release Management Tools

Tools for managing app versions and release notes on App Store Connect and Google Play Console.

#release-check-versions

Check latest versions from App Store/Google Play.

#Parameters

ParameterTypeRequiredDefaultDescription
appstringConditional-Registered app slug
bundleIdstringConditional-App Store bundle ID
packageNamestringConditional-Google Play package name
store"appStore" | "googlePlay" | "both"No"both"Target store

#Usage Examples

// Check both stores
{ "app": "myapp" }

// Check App Store only
{ "app": "myapp", "store": "appStore" }

// Check using direct identifiers
{ "bundleId": "com.example.app" }

#Response

šŸŽ **App Store**
   Latest: 1.2.0 (READY_FOR_DISTRIBUTION)
   Editable: 1.3.0 (PREPARE_FOR_SUBMISSION)

šŸ¤– **Google Play**
   Production: 1.2.0 (versionCode: 120)

#release-create

Create a new version on App Store/Google Play.

#Parameters

ParameterTypeRequiredDefaultDescription
appstringConditional-Registered app slug
bundleIdstringConditional-App Store bundle ID
packageNamestringConditional-Google Play package name
versionstringNo-Version string (e.g., "1.2.0"). If not provided, shows current versions
store"appStore" | "googlePlay" | "both"No"both"Target store
versionCodesnumber[]Conditional-Required for Google Play

#Usage Examples

// Check current versions first (no version provided)
{ "app": "myapp" }

// Create App Store version
{ "app": "myapp", "store": "appStore", "version": "1.3.0" }

// Create Google Play version with version codes
{
  "app": "myapp",
  "store": "googlePlay",
  "version": "1.3.0",
  "versionCodes": [130, 131]
}

// Create on both stores
{
  "app": "myapp",
  "version": "1.3.0",
  "versionCodes": [130]
}

#Response

šŸ“¦ Version Creation Results:
āœ… App Store version 1.3.0 created (PREPARE_FOR_SUBMISSION)
āœ… Google Play production draft created with versionCodes: 130, 131

Errors:

šŸ“¦ Version Creation Results:
āŒ App Store version creation failed: Version 1.3.0 already exists
ā­ļø  Skipping Google Play (no version codes provided)

#release-pull-notes

Fetch release notes from App Store/Google Play and save to local cache.

#Parameters

ParameterTypeRequiredDefaultDescription
appstringConditional-Registered app slug
bundleIdstringConditional-App Store bundle ID
packageNamestringConditional-Google Play package name
store"appStore" | "googlePlay" | "both"No"both"Target store
dryRunbooleanNofalseIf true, only outputs result without saving

#Usage Examples

// Pull from both stores
{ "app": "myapp" }

// Pull from Google Play only
{ "app": "myapp", "store": "googlePlay" }

// Dry run
{ "app": "myapp", "dryRun": true }

#Data Storage

{dataDir}/.aso/pull/{slug}/
ā”œā”€ā”€ app-store/
│   └── release-notes.json
└── google-play/
    └── release-notes.json

#Response

āœ… Release notes pulled
   Google Play: 5 versions
   App Store: 3 versions

#release-update-notes

Update release notes (What's New) for App Store/Google Play versions.

#Parameters

ParameterTypeRequiredDefaultDescription
appstringConditional-Registered app slug
bundleIdstringConditional-App Store bundle ID
packageNamestringConditional-Google Play package name
store"appStore" | "googlePlay" | "both"No"both"Target store
versionIdstringNoAuto-detectApp Store version ID (auto-detects editable version)
whatsNewRecord<string, string>Conditional-Release notes by locale
textstringConditional-Source text to translate to all supported languages
sourceLocalestringNo"en-US"Source locale for translation

Note: Provide either whatsNew (all translations) or text (source to translate).

#Usage Examples

Option 1: Provide all translations

{
  "app": "myapp",
  "whatsNew": {
    "en-US": "Bug fixes and improvements",
    "ko": "버그 ģˆ˜ģ • ė° ź°œģ„ ",
    "ja": "ćƒć‚°äæ®ę­£ćØę”¹å–„"
  }
}

Option 2: Provide source text for translation

{
  "app": "myapp",
  "text": "Bug fixes and improvements",
  "sourceLocale": "en-US"
}

When using text, the tool will return a translation request:

🌐 Translation Required

**Source Text** (en-US):
Bug fixes and improvements

**App Store Supported Locales** (3):
en-US, ko, ja

**Google Play Supported Locales** (3):
en-US, ko, ja

**Instructions**:
Please translate the text to all target locales and call this function
again with the `whatsNew` parameter containing all translations.

#Response

šŸ“ Release Notes Update Results:

**šŸŽ App Store:**
  āœ… Updated 3 locales
    • en-US: Bug fixes and improvements
    • ko: 버그 ģˆ˜ģ • ė° ź°œģ„ 
    • ja: ćƒć‚°äæ®ę­£ćØę”¹å–„

**šŸ¤– Google Play:**
  āœ… Updated 3 locales
    • en-US: Bug fixes and improvements
    • ko: 버그 ģˆ˜ģ • ė° ź°œģ„ 
    • ja: ćƒć‚°äæ®ę­£ćØę”¹å–„

#Translation Pipeline

When partial translations are provided, the tool guides you through a translation pipeline:

  1. Step 1: If provided text is not in sourceLocale, requests translation to source locale first
  2. Step 2: Requests translation from source locale to all missing supported locales
  3. Final: When all translations are provided, updates stores

#Version States

#App Store

StateDescription
PREPARE_FOR_SUBMISSIONEditable, not yet submitted
WAITING_FOR_REVIEWSubmitted, awaiting review
IN_REVIEWCurrently being reviewed
PENDING_DEVELOPER_RELEASEApproved, waiting for manual release
READY_FOR_DISTRIBUTIONLive on App Store
REJECTEDReview rejected

#Google Play

TrackDescription
internalInternal testing track
alphaClosed testing track
betaOpen testing track
productionLive on Play Store

#Workflow Example

#Complete Release Workflow

  1. Check current versions:

    { "app": "myapp" }
    
  2. Create new version:

    {
      "app": "myapp",
      "version": "1.3.0",
      "versionCodes": [130]
    }
    
  3. Update release notes:

    {
      "app": "myapp",
      "whatsNew": {
        "en-US": "• New feature A\n• Bug fixes",
        "ko": "• 새딜욓 기늄 A\n• 버그 ģˆ˜ģ •"
      }
    }
    
  4. Verify:

    { "app": "myapp" }
    

#See Also

  • apps-add - Register apps before using release tools
  • aso-push - Update full ASO metadata
Release - Pabal MCP | Pabal | Pabal