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:

  1. Scans your Swift files, Info.plist, entitlements, and privacy manifests using pattern matching
  2. Detects which features your app uses (auth, subscriptions, HealthKit, AI, location, etc.)
  3. Cross-references those features against Apple's 6 guideline sections
  4. 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*UsageDescription keys)
  • .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:

# App Store Review Compliance Report

App: MyApp   Date: 2026-04-02   Score: 18/22 (82%)

❌ Blockers: 2    ⚠️ Warnings: 2    ✅ Passed: 18

🚫 NOT READY — fix 2 blocker(s) before submitting.

B1. Missing Account Deletion — Guideline 5.1.1(v)
Found: AuthManager.swift:23 — createUser detected, no deleteAccount
Risk: Apple requires account deletion for all apps with account creation
Code fix: Add account deletion flow in Settings
Fix in ASC: ASC > App Privacy > Data Linked to You

Passed:
Safety: No objectionable content | Performance: No debug URLs
Business: Restore purchases ✓, Terms ✓ | Design: SIWA ✓
Legal: Privacy policy ✓, ATT ✓ | Entitlements: All matched

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