ios-app-store-submit skill
Claude Code skill that takes an iOS or Flutter app from archive and signing to App Store submission and review rejection recovery.
- 144 ★ on the repository
- Last commit
- MIT
Broad access
Why this level
- The skill signs and uploads builds and can submit a version for review through the App Store Connect API key.
- The key and signing keychain give access to your developer account: keep them local only.
Install
- Works in
In your terminal, with SkillFoxx CLI
npx skillfoxx add skills/ios-app-store-submitDetects the agents on your machine, shows the access level and pins the version.
Other ways to install
Access and checks
How we reviewBroad accessThe tool can change data, run commands or handle secrets.
- The skill signs and uploads builds and can submit a version for review through the App Store Connect API key.
- The key and signing keychain give access to your developer account: keep them local only.
This is third-party code. Review the repository files before installing.
What it does
The ios-app-store-submit skill walks an app through the archive, upload and submit chain in App Store Connect and checks readiness for review before submission. The `scripts/readiness_check.py` script assesses technical readiness, metadata, Apple Review Guidelines, privacy (permissions, `PrivacyInfo.xcprivacy`, SDKs) and HIG compliance. Missing evidence gets the `UNKNOWN` status instead of `PASS`. Safe fixes follow a plan, apply, verify, rollback scheme. After a review rejection the skill parses the Apple message, finds the cause, drafts a fix plan and a reply, and resubmits only against an approved plan digest. Build and upload use the `asc` CLI and an App Store Connect API key.
Who it is for. iOS and Flutter mobile developers who ship builds to the App Store through an agent on a Mac without a graphical Xcode session.
Good fit when
- Before the first submission you need to know whether the app passes review on permissions and privacy policy.
- A build must be archived, signed on a Mac without a GUI session and uploaded to App Store Connect.
- Apple rejected a version and you need a fix plan and a reviewer reply from the rejection text.
- A team wants an automatic readiness report with evidence instead of a vague all-clear.
Not a fit when
- The work is only UI or features with no build and submission.
- You configure signing and certificates yourself in graphical Xcode: the skill targets windowless builds.
- You have no Apple Developer Program membership or App Store Connect access.
Example request
Run a readiness check on this iOS project before submission and show blocking problems with evidence without submitting anything.Limitations
You need Apple Developer Program membership, Xcode, Flutter, the `asc` CLI and an App Store Connect API key in `~/.asc/keys/` with owner-only permissions. The account administrator creates the key, and it reaches the agent as a file rather than pasted text. The App Manager role is recommended. A `PASS` status does not guarantee Apple approval. The skill makes no changes to signing, identifiers, privacy semantics or legal text without your approval. Checks without evidence stay `UNKNOWN`.
How to disable. Delete the `~/.claude/skills/ios-app-store-submit` link and the clone in `~/.agents/skills/`. Remove the API key and the build keychain separately.
FAQ
How do I install the skill in Claude Code?
Clone the repository into `~/.agents/skills/ios-app-store-submit` and create a symbolic link to it in `~/.claude/skills/`. The README lists the commands.
What does UNKNOWN mean in the report?
A check lacked evidence. It does not count as success and needs a manual check or proof.
Will the skill submit the app itself?
Only after archive and upload in the workflow and with explicit approval. Inspection modes change nothing in external services.
What does the skill do after an Apple rejection?
It parses the cause, builds a fix and verification plan and drafts a reply. Resubmission goes only against an approved plan digest.
Is Flutter required?
The skill is written for Flutter and iOS and covers building both variants, and it is not tied to one app.
Discussion
No questions or reviews yet.
Related
SkillsA skill that scans an iOS or macOS project for common App Store rejection patterns before you submit
Claude Code skill that audits an iOS app before App Store submission: guideline, code evidence, fix and confidence per finding.
A guard hook before an App Store or Google Play submit finds critical rejection risks and blocks the command until they are fixed.
An agent checks Apple app code against every App Store guideline and shows what could trigger a rejection before you submit
A Claude Code plugin that audits a mobile app against App Store and Google Play review rules before submission.
A Swift CLI for App Store Connect: builds, TestFlight, metadata, subscriptions and review submission with ready commands in JSON
Comparison with similar tools
Cards that share the main search query, and how they differ.
| Tool | Official | Repository stars | Main difference |
|---|---|---|---|
| ios-app-store-submit (this card) | no | 144 | |
| App Store Preflight | no | 1,416 | checks an app before submission; ios-app-store-submit adds build, signing, upload and rejection recovery |
| App Store Connect CLI | no | 8,335 | gives App Store Connect management commands; here they are embedded in a release flow with checks |
README in short
Version 2.0.0 combines seven phases: readiness, Apple pre-review, privacy, HIG design, safe fixes, rejection recovery and closed-loop resubmission. Principles: evidence before confidence, safe fixes only, no claim of fixed without verification.
README badge
Original SKILL.md
---
name: ios-app-store-submit
description: Build, sign, and submit a Flutter/iOS app to the App Store Connect — covers Xcode archive/export, code signing (including headless-Mac keychain workarounds), the `asc` CLI for App Store Connect metadata automation, screenshot handoff, and final review submission. Use when asked to build and upload an iOS app, set up App Store code signing, fix a rejected/failed App Store Connect upload, automate App Store Connect metadata, or submit an app for App Store review. Triggers: "빌드해서 제출", "App Store 제출", "archive and upload", "TestFlight에 올려줘", "asc CLI로 메타데이터".
---
# iOS App Store Build & Submit
End-to-end playbook for taking a Flutter/iOS app from "code is done" to "submitted for App Store review," written for headless/agent-driven Mac environments (no interactive Xcode GUI session, no GUI keychain prompts available). Validated end-to-end on a real submission (2026-08-05) that hit — and worked around — every pitfall documented below.
**This skill is project-agnostic.** Never hardcode bundle IDs, App Store Connect App IDs, Team IDs, or certificate names from a prior run — always derive them from the current project (see Step 0).
## When NOT to use this
- Pure UI/feature work with no build/signing/submission component — just do the work directly.
- If the user has an interactive Xcode session open and wants to do signing themselves — offer to guide them through Xcode's GUI instead of fighting headless keychain limitations for no reason.
## Step 0 — Discover the project
Before anything else, gather facts from the current project (don't ask the user for things you can read yourself):
```bash
# Bundle ID, team ID, current device family
grep -n "PRODUCT_BUNDLE_IDENTIFIER\|DEVELOPMENT_TEAM\|TARGETED_DEVICE_FAMILY" ios/Runner.xcodeproj/project.pbxproj | sort -u
# App version / build number
grep "^version:" pubspec.yaml # Flutter: X.Y.Z+N
# Is asc CLI already installed and authenticated?
which asc && asc auth status
# Is this app already registered in App Store Connect?
asc apps list --output table
```
If `asc` isn't installed or there's no cached auth, walk the user through generating an App Store Connect API key (they must do this themselves — only the account holder/Admin can):
1. https://appstoreconnect.apple.com/access/integrations/api → generate key → **App Manager** role (least privilege that still covers everything this skill needs) → download the `.p8` immediately (one-time download).
2. Get the file to you as a file (Drive link, etc.), never ask them to paste the raw key text in chat. Save it under `~/.asc/keys/` with `chmod 600`.
3. Register it:
```bash
asc auth login --name "<project>" --key-id "<KEY_ID>" --issuer-id "<ISSUER_ID>" \
--private-key "~/.asc/keys/AuthKey_<KEY_ID>.p8" --network --bypass-keychain
```
**`--bypass-keychain` is required in headless sessions** — plain `asc auth login` fails with `-25308 User interaction is not allowed` because macOS Keychain wants a GUI unlock prompt that doesn't exist here.
## Step 1 — iOS Simulator does not work for ML/vision-heavy apps on Apple Silicon