app-store-preflight-skills — скилл Claude Code: префлайт App Store
Прогоняет проект Xcode по типовым причинам отказа App Store ещё до отправки: метаданные, подписки, privacy-манифесты, entitlements, дизайн.
npx skills add truongduy2611/app-store-preflight-skills --skill app-store-preflight-skills -a claude-codeЧто делает app-store-preflight-skills
Скилл идёт по проекту iOS или macOS и ищет то, за что Apple заворачивает сборки. Сначала определяет тип приложения и подгружает чек-лист из references/guidelines/by-app-type/: всегда all_apps.md, плюс файл под подписки, UGC, игры, macOS, AI-приложения, крипту или VPN.
Дальше тянет актуальное описание командой asc metadata pull --app "<APP_ID>" --version "<VERSION>" --dir ./metadata и сверяет JSON с правилами из references/rules/. В каждом правиле расписано, что искать, как это найти, чем чинить и как выглядит пример отказа. На выходе отчёт: отказы, предупреждения, пройденные проверки — по убыванию важности.
Мелочи скилл правит сам: имена конкурентов в тексте, превышение лимита символов, ссылки на условия и политику. После правки он прогоняет упавшую проверку заново и снимает пункт только при чистом повторе. Для asc нужна авторизация в App Store Connect — asc auth login или переменные ASC_KEY_ID, ASC_ISSUER_ID и приватный ключ; без неё шаг с метаданными не выполнится. Ещё один капкан: PrivacyInfo.xcprivacy требуется, даже если ваш код не зовёт Required Reason API — сторонние SDK вроде Firebase дотягивают требование через себя.
Какие задачи решает
- найти метаданные, из-за которых Apple отклонит сборку
- проверить экран подписки на ссылки с условиями и политикой
- добавить
PrivacyInfo.xcprivacyдо следующей загрузки билда - переписать описание без имён конкурентов
- разобрать письмо об отказе и получить список правок
Примеры запросов агенту
- Прогони префлайт по проекту перед отправкой в App Store, там есть подписки.
- Собери метаданные через `asc metadata pull --app "<APP_ID>" --version "<VERSION>"` и проверь их по правилам.
- Пришёл отказ по 2.3.14 — посмотри креативы и скажи, что не так.
Как установить app-store-preflight-skills
1Через Skills CLI (Vercel)
npx skills add truongduy2611/app-store-preflight-skills --skill app-store-preflight-skills -a claude-code2Вручную: положить файлы
~/.claude/skills/app-store-preflight-skills/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/app-store-preflight-skills/
1Через Skills CLI (Vercel)
npx skills add truongduy2611/app-store-preflight-skills --skill app-store-preflight-skills -a codex2Вручную: положить файлы
.agents/skills/app-store-preflight-skills/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add truongduy2611/app-store-preflight-skills --skill app-store-preflight-skills -a cursor2Вручную: положить файлы
.cursor/skills/app-store-preflight-skills/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install truongduy2611/app-store-preflight-skills app-store-preflight-skills2Вручную: положить файлы
.github/skills/app-store-preflight-skills/SKILL.md1Через Skills CLI (Vercel)
npx skills add truongduy2611/app-store-preflight-skills --skill app-store-preflight-skills -a gemini-cli2Командой платформы
gemini skills install https://github.com/truongduy2611/app-store-preflight-skillsВручную: положить файлы
.devin/skills/app-store-preflight-skills/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add truongduy2611/app-store-preflight-skills --skill app-store-preflight-skills -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
Похожие
Вопросы о app-store-preflight-skills
Как установить app-store-preflight-skills в Claude Code?
Выполните npx skills add truongduy2611/app-store-preflight-skills --skill app-store-preflight-skills -a claude-code. Файл скилла окажется по пути ~/.claude/skills/app-store-preflight-skills/SKILL.md.
Что делает app-store-preflight-skills?
Сканирует проект Xcode на причины отказа App Store и собирает отчёт с разбивкой на отказы, предупреждения и пройденные проверки. Часть нарушений в тексте метаданных он предлагает исправить сразу.
Что нужно поставить заранее?
CLI asc — brew install asc через Homebrew. Команде asc metadata pull нужна авторизация в App Store Connect: asc auth login либо переменные ASC_KEY_ID, ASC_ISSUER_ID и приватный ключ.
Исходный текст
SKILL.md · MIT
--- name: app-store-preflight-skills description: > Scan an iOS/macOS Xcode project for common App Store rejection patterns before submission. Use when preparing an app for App Store review, after receiving a rejection from Apple, or when auditing metadata, subscriptions, privacy manifests, entitlements, or design compliance. Integrates with the asc CLI for metadata inspection. metadata: author: truongduy2611 version: "1.1" guidelines-synced: "2026-10-16" --- # App Store Preflight Skill Run pre-submission checks on your iOS/macOS project to catch common App Store rejection patterns. ## Prerequisites - **asc CLI** — Install via Homebrew: `brew install asc` ([App-Store-Connect-CLI](https://github.com/rudrankriyam/App-Store-Connect-CLI)) - **ASC CLI Skills** — [app-store-connect-cli-skills](https://github.com/rudrankriyam/app-store-connect-cli-skills) for `asc` usage patterns - **jq** — Optional, but used by some JSON-inspection examples in the rule docs ## Step 1: Identify App Type → Load Checklist Determine which guidelines apply by loading the relevant checklist from `references/guidelines/by-app-type/`. Always start with `all_apps.md`, then add the app-type-specific one: | App Type | Checklist | |----------|-----------| | Every app | `references/guidelines/by-app-type/all_apps.md` | | Subscriptions / IAP | `references/guidelines/by-app-type/subscription_iap.md` | | Social / UGC | `references/guidelines/by-app-type/social_ugc.md` | | Kids Category | `references/guidelines/by-app-type/kids.md` | | Health & Fitness | `references/guidelines/by-app-type/health_fitness.md` | | Games | `references/guidelines/by-app-type/games.md` | | macOS | `references/guidelines/by-app-type/macos.md` | | AI / Generative AI | `references/guidelines/by-app-type/ai_apps.md` | | Crypto & Finance | `references/guidelines/by-app-type/crypto_finance.md` | | VPN | `references/guidelines/by-app-type/vpn.md` | Full guideline index: `references/guidelines/README.md` ## Step 2: Pull Metadata for Inspection Pull the latest App Store metadata using the `asc` CLI: ```bash # Pull canonical metadata JSON for the version you want to review asc metadata pull --app "<APP_ID>" --version "<VERSION>" --dir ./metadata ``` `asc metadata pull` writes app info files to `./metadata/app-info/*.json` and version-localization files to `./metadata/version/<VERSION>/*.json`. Most rule examples below assume the canonical JSON layout written by `asc metadata pull`. Creative assets (product page headers, search result assets; Guideline 2.3.14) live in App Store Connect's Asset Library. If your `asc` version doesn't pull them, review them by hand against 2.3.14. If you already have metadata in another layout (for example fastlane `metadata/`), either adapt the file-path examples to that structure or pull the canonical `asc` layout first. ## Step 3: Run Rejection Rule Checks For each category, load the relevant rule files from `references/rules/` and inspect. Each rule contains: **What to Check**, **How to Detect**, **Resolution**, and **Example Rejection**. | Category | Rule Files | |----------|------------| | Metadata | `references/rules/metadata/*.md` | | Subscription | `references/rules/subscription/*.md` | | Privacy | `references/rules/privacy/*.md` | | Design | `references/rules/design/*.md` | | Entitlements | `references/rules/entitlements/*.md` | ## Step 4: Report Findings Produce a summary report using this template: ```markdown ## Preflight Report ### ❌ Rejections Found (N) - [GUIDELINE X.X.X] Description of issue - File: path/to/offending/file - Fix: What to do ### ⚠️ Warnings (N) - [GUIDELINE X.X.X] Potential issue ### ✅ Passed (N) - [Category] All checks passed ``` Order by severity: rejections first, then warnings, then passed. ## Step 5: Autofix + Validate Some issues can be auto-fixed: - **Competitor terms** → Suggest replacement text with competitor names removed - **Metadata character limits** → Show current vs. max length - **Missing links** → Generate template ToS/PP URLs After applying any auto-fix, **re-run the affected checks** to confirm the fix resolved the violation. Only mark as resolved once the re-scan passes. For issues requiring manual intervention (screenshots, UI redesign), provide clear instructions but do not auto-fix. ## Gotchas - **China storefront** — Banned AI terms (ChatGPT, Gemini, etc.) are checked across ALL locales, not just `zh-Hans`. Apple checks every locale visible in the China storefront. - **Privacy manifests** — `PrivacyInfo.xcprivacy` is required even if your app doesn't call Required Reason APIs directly. Third-party SDKs (Firebase, Amplitude, etc.) that use `UserDefaults` or `NSFileManager` trigger this requirement transitively. - **asc auth** — `asc metadata pull` requires App Store Connect authentication. Run `asc auth login` first, or set `ASC_KEY_ID`, `ASC_ISSUER_ID`, and one of `ASC_PRIVATE_KEY_PATH` / `ASC_PRIVATE_KEY` / `ASC_PRIVATE_KEY_B64`. If you're unsure what `asc` is picking up, run `asc auth doctor`. - **Subscription metadata** — Apple requires ToS/PP links in BOTH the App Store description AND the in-app subscription purchase screen. Missing either one is a separate rejection. - **Hidden features (2.5.19)** — Feature flags are allowed, but every feature they can turn on must be in the reviewed build, reachable by the reviewer, and described in the review notes. Gating features on review-environment checks (sandbox receipt, TestFlight) is bait-and-switch and can get the developer account terminated. - **Third-party AI (5.1.2(i))** — Proxying AI calls through your own backend doesn't exempt you: if prompts or user content reach OpenAI, Gemini, Anthropic, etc., the app needs a consent screen naming the provider *before* the first request. - **Sign in with Apple relay domain** — New relay addresses use `private.icloud.com` (from late 2026) in addition to `privaterelay.appleid.com`. Hard-coded domain checks break for new users. - **SDK minimum** — Uploads must be built with the iOS 26 SDK or later (since April 28, 2026). An older Xcode fails at upload, not at review. - **macOS entitlements** — Apple will ask you to justify every temporary exception entitlement (`com.apple.security.temporary-exception.*`). Remove entitlements you don't actively use. ## Adding New Rules Create a `.md` file in the appropriate `references/rules/` subdirectory: ```markdown # Rule: [Short Title] - **Guideline**: [Apple Guideline Number] - **Severity**: REJECTION | WARNING - **Category**: metadata | subscription | privacy | design | entitlements ## What to Check ## How to Detect ## Resolution ## Example Rejection ```
© truongduy2611 · MIT · truongduy2611/app-store-preflight-skills