We Built an Open-Source Tool That Catches App Store Rejections Before Apple Does
After one too many preventable rejections, we created a free Claude Code skill that scans your Swift project against Apple's App Store Review Guidelines and tells you exactly what to fix — before you submit.
The Problem Every iOS Developer Knows
If you've shipped an iOS app, you've been here: you polish your build, write your release notes, hit "Submit for Review" — and three days later, Apple rejects it. The reason? Something buried in Section 3.1.2 of the App Store Review Guidelines that you didn't know existed.
Apple's guidelines document is 8,000+ words across 6 major sections. It covers everything from payment rules to accessibility requirements to privacy manifests. Some rules are well-known (use StoreKit for in-app purchases). Others are obscure traps that catch even experienced developers (your subscription app needs a manage-subscriptions link, not just a restore button).
We've shipped 9 apps at LogicLine Labs. We've been rejected for missing account deletion, for having a debug URL in production code, for not implementing Sign in with Apple alongside a third-party login. Every rejection cost us days — sometimes weeks when it triggered a cascade of re-reviews.
So we built a tool to catch these issues before Apple does.
What App Store Review Checker Does
App Store Review Checker is a Claude Code skill — a plugin that adds specialized capabilities to Claude's AI coding assistant. When you run it on your Xcode project, it:
- Scans your Swift files, Info.plist, entitlements, and privacy manifests using pattern matching
- Detects which features your app uses (auth, subscriptions, HealthKit, AI, location, etc.)
- Cross-references those features against Apple's 6 guideline sections
- Generates a compliance report with blockers, warnings, passed checks, and a manual checklist
No external dependencies. No API calls. No accounts to create. Just a bash script and Claude's analysis.
Key distinction: This isn't a linter or a static analysis tool. It's a heuristic scanner that understands the intent behind Apple's guidelines — not just syntax patterns. It knows that createUser without deleteAccount means a Section 5.1.1(v) rejection, and that a third-party login SDK without Sign in with Apple means a Section 4.8 rejection.
How It Works
Step 1: The Scan
A bash script (scan.sh) runs targeted grep patterns across your project. It's fast — typically under 5 seconds even on large codebases. Here's what it scans:
- .swift files — feature detection (auth, IAP, HealthKit, AI, subscriptions, tracking SDKs), crash risks (
try!,Thread.sleep), debug URLs, deprecated APIs - .entitlements — declared capabilities cross-referenced against actual code usage
- Info.plist — permission usage descriptions (
NS*UsageDescriptionkeys) - .xcprivacy — privacy manifest presence
It automatically skips build/, Pods/, and SourcePackages/ directories.
Step 2: The Analysis
Claude interprets the raw scan output using heuristic rules. This is where the tool shines — it doesn't just flag patterns, it understands what they mean in context:
| Finding | Interpretation | Action |
|---|---|---|
| Auth detected, no account deletion | Missing 5.1.1(v) requirement | Blocker — add deletion flow |
| Third-party login, no SIWA | Missing 4.8 requirement | Blocker — add Sign in with Apple |
| Entitlement declared but unused | Unnecessary capability | Blocker — remove it |
| Tracking SDK without ATT | Missing permission prompt | Blocker — add ATTrackingManager |
| 5 force-try statements | Potential crash risk | Warning — replace with do/catch |
| Subscriptions, no manage link | Missing 3.1.2 requirement | Blocker — add manage URL |
What It Checks
The scanner covers all 6 sections of Apple's guidelines:
| Section | What It Catches |
|---|---|
| 1.x Safety | Objectionable content flags, COPPA compliance, kids app rules |
| 2.x Performance | Debug URLs in production, beta labels outside #if DEBUG, try! crash risks, thread blocking |
| 3.x Business | Third-party payment SDKs, missing subscription terms, missing restore purchases, missing EULA |
| 4.x Design | Low view count, excessive WebViews, missing accessibility, third-party login without Sign in with Apple |
| 5.x Legal | Missing privacy policy, no account deletion, tracking without ATT, AI features without disclosure, missing medical disclaimers |
| 6.x Additional | Deprecated APIs (UIWebView), missing support contact, competing platform mentions |
Plus 14 permission API checks (Camera, Microphone, Photos, Contacts, Calendars, Bluetooth, Motion, Face ID, HealthKit, Location, NFC, Siri, Local Network, Speech) — each cross-referenced against NS*UsageDescription keys in Info.plist and entitlements.
The Report
The output is a structured compliance report. Here's what it looks like:
❌ Blockers: 2 ⚠️ Warnings: 2 ✅ Passed: 18
🚫 NOT READY — fix 2 blocker(s) before submitting.
B1. Missing Account Deletion — Guideline 5.1.1(v)
Passed:
Every blocker includes the exact file and line, what's wrong, how to fix it in code, and where to fix it in App Store Connect. Not just "you have a problem" — "here's the fix, here's where."
How to Install
One command in Claude Code:
claude install-skill github.com/logiclinelabs/appstore-review-checker
That's it. The skill installs two files — SKILL.md (the instructions Claude follows) and scan.sh (the scanner) — into your local skills directory.
Manual Installation
If you prefer to install manually:
git clone https://github.com/logiclinelabs/appstore-review-checker.git \
~/.claude/skills/appstore-review-checker
Or just copy the two files into ~/.claude/skills/appstore-review-checker/.
Using It
Open your iOS project in Claude Code and say:
- "Check my app for App Store compliance"
- "Will Apple reject this?"
- "Pre-submission audit"
- "Review my iOS app for guidelines"
The skill activates automatically — no slash commands, no manual steps. Claude runs the scan, analyzes the results, and delivers the report.
What It's Not
Let's be clear about limitations:
- Not affiliated with Apple. This is a third-party tool built on publicly available guidelines.
- Not a guarantee. Apple's review process involves human reviewers who may flag issues beyond automated scanning. New guidelines are added regularly.
- Not a replacement for reading the guidelines. This is a safety net, not a substitute for understanding Apple's rules.
It's a heuristic scanner. It catches common, preventable rejections — the kind that waste your time and Apple's. Think of it as a pre-flight checklist for App Store submission.
Why We Open-Sourced It
We built this for ourselves. We run it on every app before we submit — Drug Infusions Calc, Nunu, Sonnical, HABITAT AI, all of them. It's saved us from at least a dozen rejections since we started using it.
But App Store rejections are a universal problem. Every iOS developer deals with them. The guidelines are the same for everyone, the common mistakes are the same for everyone, and the fix is the same for everyone: check before you submit.
The tool is MIT-licensed and available on GitHub. Use it, fork it, improve it. If it saves you one rejection cycle, it was worth it.
Official Sources
The scanner checks against guidelines published at:
Try It on Your Next Build
We use this tool on every app we ship. It takes 30 seconds to install and catches issues that cost days to fix after rejection.
View on GitHub