Skip to main content

metadata

Manage app metadata with deterministic file workflows
Manage app metadata with deterministic file workflows. Pull metadata from App Store Connect, edit locally, and push changes back.

Quick Start

Features

Phase 1 scope:
  • App-info localizations: name, subtitle, privacyPolicyUrl, privacyChoicesUrl, privacyPolicyText
  • Version localizations: description, keywords, marketingUrl, promotionalText, supportUrl, whatsNew
Not yet included:
  • Categories, copyright, review information, age ratings, screenshots

Subcommands

  • pull - Pull metadata from App Store Connect into canonical files
  • push - Push metadata changes from canonical files
  • validate - Validate metadata files for errors

Commands

metadata pull

Pull metadata from App Store Connect into canonical files:
Flags:
  • --app - App Store Connect app ID (or ASC_APP_ID)
  • --version - App version string (e.g., 1.2.3) (required)
  • --platform - Optional platform: IOS, MAC_OS, TV_OS, or VISION_OS
  • --dir - Output root directory (required)
  • --force - Overwrite existing metadata files in --dir
  • --include - Included metadata scopes (default: localizations)
  • --output - Output format: json, table, markdown
  • --pretty - Pretty-print JSON output
Directory structure:

metadata push

Push metadata changes from canonical files:
Flags:
  • --app - App Store Connect app ID (or ASC_APP_ID)
  • --app-info - App Info ID (optional override)
  • --version - App version string (e.g., 1.2.3) (required)
  • --platform - Optional platform: IOS, MAC_OS, TV_OS, or VISION_OS
  • --dir - Metadata root directory (required)
  • --include - Included metadata scopes (default: localizations)
  • --dry-run - Preview changes without mutating App Store Connect
  • --allow-deletes - Allow destructive delete operations (disables default locale fallback)
  • --confirm - Confirm destructive operations (required with --allow-deletes)
  • --output - Output format: json, table, markdown
  • --pretty - Pretty-print JSON output
Notes:
  • default.json fallback is applied only when --allow-deletes is not set
  • With --allow-deletes, remote locales missing locally are planned as deletes
  • Omitted fields are treated as no-op; they do not imply deletion

metadata validate

Validate metadata files for errors:
Flags:
  • --dir - Metadata root directory (required)
  • --output - Output format: json, table, markdown
  • --pretty - Pretty-print JSON output

File Format

App Info Localization

metadata/app-info/en-US.json:
Supported fields:
  • name - App name (30 characters max)
  • subtitle - App subtitle (30 characters max)
  • privacyPolicyUrl - Privacy policy URL
  • privacyChoicesUrl - Privacy choices URL
  • privacyPolicyText - Privacy policy text

Version Localization

metadata/versions/1.2.3/en-US.json:
Supported fields:
  • description - App description (4000 characters max)
  • keywords - Keywords (100 characters max)
  • marketingUrl - Marketing URL
  • promotionalText - Promotional text (170 characters max)
  • supportUrl - Support URL
  • whatsNew - What’s new / release notes (4000 characters max)

Default Locale

metadata/app-info/default.json:
The default.json file provides fallback values for locales not explicitly defined. It is only applied when --allow-deletes is not set.

Workflow

1. Pull Current Metadata

Pull metadata from App Store Connect:

2. Edit Locally

Edit the JSON files in your preferred editor:

3. Preview Changes

Preview changes with --dry-run:
Output:

4. Apply Changes

Apply changes to App Store Connect:

Examples

Add New Locale

  1. Create locale file:
  2. Edit content:
  3. Push changes:

Update What’s New

  1. Edit release notes:
  2. Update whatsNew field:
  3. Preview and apply:

Delete Locale

With --allow-deletes, remove a locale by deleting its file:

Version Control

Commit metadata files to version control:
Benefits:
  • Track changes over time
  • Review metadata changes in pull requests
  • Revert to previous versions
  • Collaborate on metadata updates

CI/CD Integration

Multiple App Info IDs

If you have multiple app infos (e.g., different platforms), specify the app info ID:
The CLI will auto-resolve the correct app info in most cases, but you can override it when needed.