{"id":"441edb1b-be6d-44e2-a818-21000215b539","shortId":"GRdKuU","kind":"skill","title":"asc-metadata-sync","tagline":"Sync and validate App Store metadata and localizations with asc, including legacy metadata format migration. Use when updating metadata or translations.","description":"# asc metadata sync\n\nUse this skill to keep local metadata in sync with App Store Connect.\n\n## Two Types of Localizations\n\n### 1. Version Localizations (per-release)\nFields: `description`, `keywords`, `whatsNew`, `supportUrl`, `marketingUrl`, `promotionalText`\n\n```bash\n# List version localizations\nasc localizations list --version \"VERSION_ID\"\n\n# Download\nasc localizations download --version \"VERSION_ID\" --path \"./localizations\"\n\n# Upload from .strings files\nasc localizations upload --version \"VERSION_ID\" --path \"./localizations\"\n```\n\n### 2. App Info Localizations (app-level)\nFields: `name`, `subtitle`, `privacyPolicyUrl`, `privacyChoicesUrl`, `privacyPolicyText`\n\n```bash\n# First, find the app info ID\nasc apps info list --app \"APP_ID\"\n\n# List app info localizations\nasc localizations list --app \"APP_ID\" --type app-info --app-info \"APP_INFO_ID\"\n\n# Upload app info localizations\nasc localizations upload --app \"APP_ID\" --type app-info --app-info \"APP_INFO_ID\" --path \"./app-info-localizations\"\n```\n\n**Note:** If you get \"multiple app infos found\", you must specify `--app-info` with the correct ID.\n\n## Legacy Fastlane Metadata Workflow\n\n### Export current state\n```bash\nasc migrate export --app \"APP_ID\" --version-id \"VERSION_ID\" --output-dir \"./fastlane\"\n```\n\n### Validate local files\n```bash\nasc migrate validate --fastlane-dir \"./fastlane\"\n```\nThis checks character limits and required fields.\n\n### Import updates\n```bash\nasc migrate import --app \"APP_ID\" --version-id \"VERSION_ID\" --fastlane-dir \"./fastlane\" --dry-run\nasc migrate import --app \"APP_ID\" --version-id \"VERSION_ID\" --fastlane-dir \"./fastlane\"\n```\n\n## Quick Field Updates\n\n### Version-specific fields\n```bash\n# What's New\nasc apps info edit --app \"APP_ID\" --locale \"en-US\" --whats-new \"Bug fixes and improvements\"\n\n# Description\nasc apps info edit --app \"APP_ID\" --locale \"en-US\" --description \"Your app description here\"\n\n# Keywords\nasc apps info edit --app \"APP_ID\" --locale \"en-US\" --keywords \"keyword1,keyword2,keyword3\"\n\n# Support URL\nasc apps info edit --app \"APP_ID\" --locale \"en-US\" --support-url \"https://support.example.com\"\n```\n\n### Version metadata\n```bash\n# Copyright\nasc versions update --version-id \"VERSION_ID\" --copyright \"2026 Your Company\"\n\n# Release type\nasc versions update --version-id \"VERSION_ID\" --release-type AFTER_APPROVAL\n```\n\n### TestFlight notes\n```bash\nasc build-localizations create --build \"BUILD_ID\" --locale \"en-US\" --whats-new \"TestFlight notes here\"\n```\n\n## .strings File Format\n\nFor bulk updates, use .strings files:\n\n```\n// en-US.strings\n\"description\" = \"Your app description\";\n\"keywords\" = \"keyword1,keyword2,keyword3\";\n\"whatsNew\" = \"What's new in this version\";\n\"supportUrl\" = \"https://support.example.com\";\n```\n\nFor app-info type:\n```\n// en-US.strings (app-info type)\n\"privacyPolicyUrl\" = \"https://example.com/privacy\";\n\"name\" = \"Your App Name\";\n\"subtitle\" = \"Your subtitle\";\n```\n\n## Multi-Language Workflow\n\n1. Export all localizations:\n```bash\nasc localizations download --version \"VERSION_ID\" --path \"./localizations\"\n```\n\n2. Translate the .strings files (or use translation service)\n\n3. Upload all at once:\n```bash\nasc localizations upload --version \"VERSION_ID\" --path \"./localizations\"\n```\n\n4. Verify:\n```bash\nasc localizations list --version \"VERSION_ID\" --output table\n```\n\n## Character Limits\n\n| Field | Limit |\n|-------|-------|\n| Name | 30 |\n| Subtitle | 30 |\n| Keywords | 100 (comma-separated) |\n| Description | 4000 |\n| What's New | 4000 |\n| Promotional Text | 170 |\n\nUse `asc metadata validate --dir \"./metadata\"` for canonical metadata trees.\nUse `asc migrate validate --fastlane-dir \"./fastlane\"` for legacy fastlane-format metadata.\n\n## Notes\n- Version localizations and app info localizations are different; use the right command and `--type` flag.\n- Use `asc localizations list` to confirm available locales and IDs.\n- Privacy Policy URL is in app info localizations, not version localizations.","tags":["asc","metadata","sync","app","store","connect","cli","skills","rorkai","agent-skills","ai-skills","app-store-connect"],"capabilities":["skill","source-rorkai","skill-asc-metadata-sync","topic-agent-skills","topic-ai-skills","topic-app-store-connect","topic-apple","topic-asc","topic-automation","topic-cicd","topic-cli","topic-devops","topic-ios","topic-macos","topic-testflight"],"categories":["app-store-connect-cli-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/rorkai/app-store-connect-cli-skills/asc-metadata-sync","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add rorkai/app-store-connect-cli-skills","source_repo":"https://github.com/rorkai/app-store-connect-cli-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 776 github stars · SKILL.md body (3,932 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T18:53:02.232Z","embedding":null,"createdAt":"2026-04-18T21:56:46.064Z","updatedAt":"2026-05-02T18:53:02.232Z","lastSeenAt":"2026-05-02T18:53:02.232Z","tsv":"'/app-info-localizations':158 '/fastlane':199,210,235,253,523 '/localizations':77,89,449,472 '/metadata':511 '/privacy':425 '1':46,437 '100':493 '170':505 '2':90,450 '2026':346 '3':459 '30':489,491 '4':473 '4000':498,502 'app':8,39,91,95,107,111,114,115,118,124,125,129,132,134,138,144,145,149,152,154,164,171,188,189,224,225,242,243,266,269,270,285,288,289,297,302,305,306,319,322,323,397,414,419,428,534,561 'app-info':128,131,148,151,170,413,418 'app-level':94 'approv':363 'asc':2,14,26,63,70,82,110,121,141,185,204,221,239,265,284,301,318,337,351,367,442,465,476,507,517,547 'asc-metadata-sync':1 'avail':552 'bash':59,103,184,203,220,261,335,366,441,464,475 'bug':279 'build':369,372,373 'build-loc':368 'bulk':389 'canon':513 'charact':213,484 'check':212 'comma':495 'comma-separ':494 'command':542 'compani':348 'confirm':551 'connect':41 'copyright':336,345 'correct':175 'creat':371 'current':182 'descript':53,283,295,298,395,398,497 'differ':538 'dir':198,209,234,252,510,522 'download':69,72,444 'dri':237 'dry-run':236 'edit':268,287,304,321 'en':274,293,310,327,377 'en-us':273,292,309,326,376 'en-us.strings':394,417 'example.com':424 'example.com/privacy':423 'export':181,187,438 'fastlan':178,208,233,251,521,527 'fastlane-dir':207,232,250,520 'fastlane-format':526 'field':52,97,217,255,260,486 'file':81,202,386,393,454 'find':105 'first':104 'fix':280 'flag':545 'format':18,387,528 'found':166 'get':162 'id':68,75,87,109,116,126,136,146,156,176,190,193,195,226,229,231,244,247,249,271,290,307,324,342,344,356,358,374,447,470,481,555 'import':218,223,241 'improv':282 'includ':15 'info':92,108,112,119,130,133,135,139,150,153,155,165,172,267,286,303,320,415,420,535,562 'keep':33 'keyword':54,300,312,399,492 'keyword1':313,400 'keyword2':314,401 'keyword3':315,402 'languag':435 'legaci':16,177,525 'level':96 'limit':214,485,487 'list':60,65,113,117,123,478,549 'local':12,34,45,48,62,64,71,83,93,120,122,140,142,201,272,291,308,325,370,375,440,443,466,477,532,536,548,553,563,566 'marketingurl':57 'metadata':3,10,17,23,27,35,179,334,508,514,529 'migrat':19,186,205,222,240,518 'multi':434 'multi-languag':433 'multipl':163 'must':168 'name':98,426,429,488 'new':264,278,381,406,501 'note':159,365,383,530 'output':197,482 'output-dir':196 'path':76,88,157,448,471 'per':50 'per-releas':49 'polici':557 'privaci':556 'privacychoicesurl':101 'privacypolicytext':102 'privacypolicyurl':100,422 'promot':503 'promotionaltext':58 'quick':254 'releas':51,349,360 'release-typ':359 'requir':216 'right':541 'run':238 'separ':496 'servic':458 'skill':31 'skill-asc-metadata-sync' 'source-rorkai' 'specif':259 'specifi':169 'state':183 'store':9,40 'string':80,385,392,453 'subtitl':99,430,432,490 'support':316,330 'support-url':329 'support.example.com':332,411 'supporturl':56,410 'sync':4,5,28,37 'tabl':483 'testflight':364,382 'text':504 'topic-agent-skills' 'topic-ai-skills' 'topic-app-store-connect' 'topic-apple' 'topic-asc' 'topic-automation' 'topic-cicd' 'topic-cli' 'topic-devops' 'topic-ios' 'topic-macos' 'topic-testflight' 'translat':25,451,457 'tree':515 'two':42 'type':43,127,147,350,361,416,421,544 'updat':22,219,256,339,353,390 'upload':78,84,137,143,460,467 'url':317,331,558 'us':275,294,311,328,378 'use':20,29,391,456,506,516,539,546 'valid':7,200,206,509,519 'verifi':474 'version':47,61,66,67,73,74,85,86,192,194,228,230,246,248,258,333,338,341,343,352,355,357,409,445,446,468,469,479,480,531,565 'version-id':191,227,245,340,354 'version-specif':257 'what':277,380 'whats-new':276,379 'whatsnew':55,403 'workflow':180,436","prices":[{"id":"4908bb2e-e888-4418-9cdf-76394df42cfa","listingId":"441edb1b-be6d-44e2-a818-21000215b539","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"rorkai","category":"app-store-connect-cli-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:56:46.064Z"}],"sources":[{"listingId":"441edb1b-be6d-44e2-a818-21000215b539","source":"github","sourceId":"rorkai/app-store-connect-cli-skills/asc-metadata-sync","sourceUrl":"https://github.com/rorkai/app-store-connect-cli-skills/tree/main/skills/asc-metadata-sync","isPrimary":false,"firstSeenAt":"2026-04-18T21:56:46.064Z","lastSeenAt":"2026-05-02T18:53:02.232Z"}],"details":{"listingId":"441edb1b-be6d-44e2-a818-21000215b539","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"rorkai","slug":"asc-metadata-sync","github":{"repo":"rorkai/app-store-connect-cli-skills","stars":776,"topics":["agent-skills","ai-skills","app-store-connect","apple","asc","automation","cicd","cli","devops","ios","macos","testflight","xcode"],"license":"mit","html_url":"https://github.com/rorkai/app-store-connect-cli-skills","pushed_at":"2026-04-24T08:59:37Z","description":"Skills to automate app store deployed and everything related to it using the asc cli","skill_md_sha":"e8959fd3fde58a8d37216a6d8b517d2d1d09586b","skill_md_path":"skills/asc-metadata-sync/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/rorkai/app-store-connect-cli-skills/tree/main/skills/asc-metadata-sync"},"layout":"multi","source":"github","category":"app-store-connect-cli-skills","frontmatter":{"name":"asc-metadata-sync","description":"Sync and validate App Store metadata and localizations with asc, including legacy metadata format migration. Use when updating metadata or translations."},"skills_sh_url":"https://skills.sh/rorkai/app-store-connect-cli-skills/asc-metadata-sync"},"updatedAt":"2026-05-02T18:53:02.232Z"}}