App-store-connect-cli-skills asc-metadata-sync

Sync and validate App Store metadata and localizations with asc, including legacy metadata format migration. Use when updating metadata or translations.

install
source · Clone the upstream repo
git clone https://github.com/rorkai/app-store-connect-cli-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/rorkai/app-store-connect-cli-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/asc-metadata-sync" ~/.claude/skills/rudrankriyam-app-store-connect-cli-skills-asc-metadata-sync && rm -rf "$T"
manifest: skills/asc-metadata-sync/SKILL.md
source content

asc metadata sync

Use this skill to keep local metadata in sync with App Store Connect.

Two Types of Localizations

1. Version Localizations (per-release)

Fields:

description
,
keywords
,
whatsNew
,
supportUrl
,
marketingUrl
,
promotionalText

# List version localizations
asc localizations list --version "VERSION_ID"

# Download
asc localizations download --version "VERSION_ID" --path "./localizations"

# Upload from .strings files
asc localizations upload --version "VERSION_ID" --path "./localizations"

2. App Info Localizations (app-level)

Fields:

name
,
subtitle
,
privacyPolicyUrl
,
privacyChoicesUrl
,
privacyPolicyText

# First, find the app info ID
asc apps info list --app "APP_ID"

# List app info localizations
asc localizations list --app "APP_ID" --type app-info --app-info "APP_INFO_ID"

# Upload app info localizations
asc localizations upload --app "APP_ID" --type app-info --app-info "APP_INFO_ID" --path "./app-info-localizations"

Note: If you get "multiple app infos found", you must specify

--app-info
with the correct ID.

Legacy Fastlane Metadata Workflow

Export current state

asc migrate export --app "APP_ID" --version-id "VERSION_ID" --output-dir "./fastlane"

Validate local files

asc migrate validate --fastlane-dir "./fastlane"

This checks character limits and required fields.

Import updates

asc migrate import --app "APP_ID" --version-id "VERSION_ID" --fastlane-dir "./fastlane" --dry-run
asc migrate import --app "APP_ID" --version-id "VERSION_ID" --fastlane-dir "./fastlane"

Quick Field Updates

Version-specific fields

# What's New
asc apps info edit --app "APP_ID" --locale "en-US" --whats-new "Bug fixes and improvements"

# Description
asc apps info edit --app "APP_ID" --locale "en-US" --description "Your app description here"

# Keywords
asc apps info edit --app "APP_ID" --locale "en-US" --keywords "keyword1,keyword2,keyword3"

# Support URL
asc apps info edit --app "APP_ID" --locale "en-US" --support-url "https://support.example.com"

Version metadata

# Copyright
asc versions update --version-id "VERSION_ID" --copyright "2026 Your Company"

# Release type
asc versions update --version-id "VERSION_ID" --release-type AFTER_APPROVAL

TestFlight notes

asc build-localizations create --build "BUILD_ID" --locale "en-US" --whats-new "TestFlight notes here"

.strings File Format

For bulk updates, use .strings files:

// en-US.strings
"description" = "Your app description";
"keywords" = "keyword1,keyword2,keyword3";
"whatsNew" = "What's new in this version";
"supportUrl" = "https://support.example.com";

For app-info type:

// en-US.strings (app-info type)
"privacyPolicyUrl" = "https://example.com/privacy";
"name" = "Your App Name";
"subtitle" = "Your subtitle";

Multi-Language Workflow

  1. Export all localizations:
asc localizations download --version "VERSION_ID" --path "./localizations"
  1. Translate the .strings files (or use translation service)

  2. Upload all at once:

asc localizations upload --version "VERSION_ID" --path "./localizations"
  1. Verify:
asc localizations list --version "VERSION_ID" --output table

Character Limits

FieldLimit
Name30
Subtitle30
Keywords100 (comma-separated)
Description4000
What's New4000
Promotional Text170

Use

asc metadata validate --dir "./metadata"
for canonical metadata trees. Use
asc migrate validate --fastlane-dir "./fastlane"
for legacy fastlane-format metadata.

Notes

  • Version localizations and app info localizations are different; use the right command and
    --type
    flag.
  • Use
    asc localizations list
    to confirm available locales and IDs.
  • Privacy Policy URL is in app info localizations, not version localizations.