From automating App Store submission to deciding whether an iOS app is actually ready to submit, and helping recover when review fails.
$ npx -y skills add zestfulpulse/ios-app-store-submit --agent claude-code
πΊπΈ English | π°π· νκ΅μ΄
From automating App Store submission to deciding whether an iOS app is actually ready to submit, and helping recover when review fails.
ios-app-store-submit preserves the existing Archive β Upload β Submit workflow while adding evidence-driven Readiness, Apple Review Guidelines, Privacy, and HIG/Design checks before submission.
This is the evolution of ios-app-store-submit, not a new repository. The public release target is v2.0.0.
v2 preserves the original build, signing, upload, and submission workflow while adding evidence-driven intelligence before and after App Review.
| Area | Status | Description |
|---|---|---|
| Readiness Core | β | Technical / Metadata / Reviewability |
| Safe Auto-Fix | β | Plan β Apply β Verify β Rollback |
| Apple Pre-Review | β | App Review Guidelines preflight |
| Privacy Intelligence | β | Permissions, Privacy Manifest, SDK and network evidence |
| HIG / Design Review | β | Accessibility, Layout, Localization, Interaction |
| Rejection Recovery | β | Rejection β cause β fix plan β verification β reply draft |
| Closed-loop Resubmission | β | User-approved, evidence-bound resubmission orchestration |
The v2.0.0 release combines all seven phases behind read-only inspection and explicit external-mutation gates.
Traditional submission automation:
Archive β Validate β Upload β Submit
The enhanced workflow:
App Project
β
Readiness
β
Apple Pre-Review
β
Privacy Intelligence
β
HIG / Design Review
β
Safe Fix β Verify
β
Archive β Upload β Submit
β
Apple Review
β
Rejection Recovery
β
Verify β User Approval β Resubmit β Verify
The core idea is simple: review the app before sending it to Apple.
Missing evidence is not treated as success.
UNKNOWN β PASS
Risky or semantic changes such as bundle identifiers, signing, certificates/provisioning, privacy semantics, user-authored content, UI semantics, navigation, and legal copy are not silently changed.
Rejection recovery must not tell a reviewer that an issue is Fixed or Resolved without supporting verification evidence.
Inspection modes do not perform network calls, mutate App Store Connect, change signing state, or submit the app by default.
Clone the existing repository into the Claude Code skill directory:
mkdir -p ~/.agents/skills
git clone https://github.com/ZestfulPulse/ios-app-store-submit.git ~/.agents/skills/ios-app-store-submit
ln -s ../../.agents/skills/ios-app-store-submit ~/.claude/skills/ios-app-store-submit
This is the Claude Code skill for the complete workflow. Claude Code discovers skills under ~/.claude/skills/, so the same skill can be used from any iOS or Flutter project.
asc CLI~/.asc/keys/ with restrictive permissions; never place credentials in reports or commandsHeadless signing uses a dedicated build keychain and the bundled scripts/setup_build_keychain.sh. Archive/export/upload still follow the existing skill guidance; signing and provisioning changes are never inferred by readiness inspection.
Ask Claude Code naturally, for example:
βBuild and submit this app to App Store Connect.β βRun the readiness and Apple pre-review checks.β βAnalyze this rejection and prepare a verified resubmission plan.β
Basic inspection:
python3 scripts/readiness_check.py /path/to/your/app
Recommended full pre-submission inspection:
python3 scripts/readiness_check.py \
/path/to/your/app \
--pre-review \
--privacy \
--design
Machine-readable JSON:
python3 scripts/readiness_check.py \
/path/to/your/app \
--pre-review \
--privacy \
--design \
--json
| Status | Meaning |
|---|---|
PASS | No issue found within the implemented inspection scope |
RISK | A risk signal deserves review |
UNKNOWN | Required evidence is missing |
BLOCKED | A deterministic pre-submission problem was found |
A PASS is not a guarantee of App Store approval.
Inspects technical readiness, metadata, and reviewability with evidence and provenance.
Finding β Fix Plan β Diff β Apply β Verify
β
Rollback on failure
Includes stale-plan detection and before/after hash evidence.
Uses a normalized offline registry derived from Apple Review Guidelines. Current categories include Performance, Metadata, Privacy, and Review Access. Heuristics alone cannot block submission.
Inspects local evidence including:
Info.plist permissionsPrivacyInfo.xcprivacyAccess is deliberately separated from collection.
Location permission present
β ACCESS = YES
β COLLECTION = UNKNOWN
β TRACKING = UNKNOWN
Covers Accessibility, Layout, Localization, and Interaction. Questions requiring rendered UI evidence remain UNKNOWN instead of being falsely passed.
Target flow:
Apple Rejection
β
Parse
β
Guideline / Privacy / HIG Mapping
β
Root Cause
β
Fix Plan
β
Verification
β
Reply Draft
Intended usage:
python3 scripts/readiness_check.py \
/path/to/your/app \
--rejection /path/to/rejection.txt
Unverified changes are not allowed to become verified reviewer-facing claims.
Phase 7 completes the recovery loop:
Inspect β Pre-Review β Privacy β Design β Fix β Verify β Submit
β Review β Recover β Verify β User Approval β Resubmit
Build a read-only plan from a local Phase 6 recovery report:
python3 scripts/readiness_check.py \
/path/to/your/app \
--resubmit-plan /path/to/recovery-report.json
The plan prints exact discovered App Store Connect IDs, command previews, blockers, approval status, and a binding digest. It performs zero external mutation. Record approval separately, then execute only the exact approved digest:
python3 scripts/readiness_check.py \
/path/to/your/app \
--resubmit-plan /path/to/recovery-report.json \
--approve-resubmit \
--approval-digest PLAN_DIGEST
python3 scripts/readiness_check.py \
/path/to/your/app \
--resubmit-plan /path/to/recovery-report.json \
--execute-resubmit \
--approval-digest PLAN_DIGEST
There is no auto-resubmit. A changed build, version, reply, fix evidence, or plan digest makes the approval stale. Execution requires all gates, ready_to_send, and read-only post-submit state verification such as WAITING_FOR_REVIEW or IN_REVIEW.
The existing submission workflow remains intact:
asc xcode archive
asc publish appstore
asc review submit
The intelligence layer adds safeguards around the submission engine rather than replacing it.
Inspection does not automatically perform:
Phase 1 Readiness Core β
Phase 2 Safe Auto-Fix β
Phase 3 Apple Pre-Review β
Phase 4 Privacy Intelligence β
Phase 5 HIG / Design Review β
Phase 6 Rejection Recovery β
Phase 7 Closed-loop Resubmission β
Target closed loop:
Inspect β Fix β Verify β Submit
β
Apple Review
β β
Approved Rejected
β
Recover
β
Verify
β
User Approval
β
Resubmit
The biggest risk in App Store automation is not insufficient automation. It is automation pretending to know what it cannot prove.
UNKNOWN.scripts/readiness_check.py β read-only readiness, pre-review, privacy, design, recovery, and resubmission planning gates.scripts/gen_app_icons.py β regenerates launcher icon sizes from one source PNG.scripts/setup_build_keychain.sh β creates/unlocks the dedicated headless signing keychain.See the repository license file.
ios-app-store-submit is a Claude Code plugin with 1 hand-picked skill, indexed on Flowy in the Mobile category. Install it with the command on its page. It includes ios-app-store-submit. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Is this plugin yours?
Claim it with GitHubSubmit a pluginPromote it