$npx -y skills add rorkai/app-store-connect-cli-skills --skill asc-metadata-syncSync, validate, and apply App Store metadata with the current asc canonical metadata workflow. Use when updating metadata, localizations, keywords, or migrating legacy fastlane metadata.
| 1 | # asc metadata sync |
| 2 | |
| 3 | Use this skill to keep App Store metadata in sync with App Store Connect. Prefer the canonical `asc metadata` workflow for app-info and version localization fields. Use the lower-level `asc localizations` and `asc migrate` commands only when the user specifically needs `.strings` files or legacy fastlane-format metadata. |
| 4 | |
| 5 | ## Current canonical workflow |
| 6 | |
| 7 | ### 1. Pull canonical metadata |
| 8 | |
| 9 | ```bash |
| 10 | asc metadata pull --app "APP_ID" --version "1.2.3" --platform IOS --dir "./metadata" |
| 11 | ``` |
| 12 | |
| 13 | If the app has multiple app-info records, resolve the app-info ID first and pass it explicitly: |
| 14 | |
| 15 | ```bash |
| 16 | asc apps info list --app "APP_ID" --output table |
| 17 | asc metadata pull --app "APP_ID" --app-info "APP_INFO_ID" --version "1.2.3" --platform IOS --dir "./metadata" |
| 18 | ``` |
| 19 | |
| 20 | ### 2. Edit local files |
| 21 | |
| 22 | Canonical files are written under: |
| 23 | |
| 24 | - `metadata/app-info/<locale>.json` for app-level fields: `name`, `subtitle`, `privacyPolicyUrl`, `privacyChoicesUrl`, `privacyPolicyText` |
| 25 | - `metadata/version/<version>/<locale>.json` for version fields: `description`, `keywords`, `marketingUrl`, `promotionalText`, `supportUrl`, `whatsNew` |
| 26 | |
| 27 | Copyright is not a localization field. Manage it with: |
| 28 | |
| 29 | ```bash |
| 30 | asc versions update --version-id "VERSION_ID" --copyright "2026 Your Company" |
| 31 | ``` |
| 32 | |
| 33 | ### 3. Validate before upload |
| 34 | |
| 35 | ```bash |
| 36 | asc metadata validate --dir "./metadata" --output table |
| 37 | ``` |
| 38 | |
| 39 | For subscription apps, include the extra Terms of Use / EULA heuristic: |
| 40 | |
| 41 | ```bash |
| 42 | asc metadata validate --dir "./metadata" --subscription-app --output table |
| 43 | ``` |
| 44 | |
| 45 | ### 4. Preview and apply |
| 46 | |
| 47 | Run a dry run first: |
| 48 | |
| 49 | ```bash |
| 50 | asc metadata push --app "APP_ID" --version "1.2.3" --platform IOS --dir "./metadata" --dry-run --output table |
| 51 | ``` |
| 52 | |
| 53 | Apply after the plan looks correct: |
| 54 | |
| 55 | ```bash |
| 56 | asc metadata push --app "APP_ID" --version "1.2.3" --platform IOS --dir "./metadata" |
| 57 | ``` |
| 58 | |
| 59 | Use `asc metadata apply` when the user wants the apply-named command shape for the same canonical files: |
| 60 | |
| 61 | ```bash |
| 62 | asc metadata apply --app "APP_ID" --version "1.2.3" --platform IOS --dir "./metadata" --dry-run |
| 63 | asc metadata apply --app "APP_ID" --version "1.2.3" --platform IOS --dir "./metadata" |
| 64 | ``` |
| 65 | |
| 66 | For a review-artifact workflow with explicit approval before mutation, use the metadata review commands introduced in `asc` 2.6.1: |
| 67 | |
| 68 | ```bash |
| 69 | asc metadata plan --app "APP_ID" --version "1.2.3" --platform IOS --dir "./metadata" --review-dir ".asc/metadata/review" |
| 70 | asc metadata approve --review-dir ".asc/metadata/review" --all |
| 71 | asc metadata status --review-dir ".asc/metadata/review" --output table |
| 72 | asc metadata apply --app "APP_ID" --version "1.2.3" --platform IOS --dir "./metadata" --review-dir ".asc/metadata/review" --confirm |
| 73 | ``` |
| 74 | |
| 75 | Use `asc metadata approve --key "version:en-US:whatsNew"` or `--scope app-info,version` when the user wants selective approval artifacts before the guarded apply. |
| 76 | |
| 77 | ## Keyword-only workflow |
| 78 | |
| 79 | Use this when only the version-localization `keywords` field should change: |
| 80 | |
| 81 | ```bash |
| 82 | asc metadata keywords diff --app "APP_ID" --version "1.2.3" --platform IOS --dir "./metadata" |
| 83 | asc metadata keywords apply --app "APP_ID" --version "1.2.3" --platform IOS --dir "./metadata" --confirm |
| 84 | ``` |
| 85 | |
| 86 | For importing keyword research: |
| 87 | |
| 88 | ```bash |
| 89 | asc metadata keywords import --dir "./metadata" --version "1.2.3" --locale "en-US" --input "./keywords.csv" |
| 90 | asc metadata keywords sync --app "APP_ID" --version "1.2.3" --platform IOS --dir "./metadata" --input "./keywords.csv" |
| 91 | ``` |
| 92 | |
| 93 | ## Quick field updates |
| 94 | |
| 95 | For one-off version-localization edits, pass an explicit version selector. Use `--version-id` for deterministic updates when you already have it, or `--version` plus `--platform` when working from a version string. |
| 96 | |
| 97 | ```bash |
| 98 | asc apps info edit --app "APP_ID" --version-id "VERSION_ID" --locale "en-US" --whats-new "Bug fixes and improvements" |
| 99 | asc apps info edit --app "APP_ID" --version "1.2.3" --platform IOS --locale "en-US" --description "Your app description here" |
| 100 | asc apps info edit --app "APP_ID" --version "1.2.3" --platform IOS --locale "en-US" --keywords "keyword1,keyword2,keyword3" |
| 101 | asc apps info edit --app "APP_ID" --version "1.2.3" --platform IOS --locale "en-US" --support-url "https://support.example.com" |
| 102 | ``` |
| 103 | |
| 104 | For app-info fields, prefer the post-create setup command: |
| 105 | |
| 106 | ```bash |
| 107 | asc app-setup info set --app "APP_ID" --primary-locale "en-US" --privacy-policy-url "https://example.com/privacy" |
| 108 | asc app-setup info set --app "APP_ID" --locale "en-US" --name "Your App Name" --subtitle "Your subtitle" |
| 109 | ``` |
| 110 | |
| 111 | ## Lower-level localization files |
| 112 | |
| 113 | Use `.strings` files when the user specifically wants import/export files instead of canonical JSON: |
| 114 | |
| 115 | ```bash |
| 116 | asc localizations list --version "VERSION_ID" --output table |
| 117 | asc localizations download --version "VERSION_ID" --path "./localizations" |
| 118 | asc localizations |