shipcheck

Find out what Apple will reject before Apple does.

shipcheck is a Claude Code plugin for React Native and Expo apps. It reads your project and store listing, checks them against the live App Store Review Guidelines and Google Play policies, and tells you the clause, the reviewer's likely wording, and the fix.

$ /shipcheck:scan

shipcheck · guidelines fetched 2026-09-05 · risk 71/100

HIGH  5.1.1(v)  Account deletion not found
       Reviewer will say: "Your app supports account creation but does not
       include an option to initiate account deletion."
       Fix: add a Delete account action under Settings → Account that calls
       DELETE /v1/users/me, then confirm in review notes.

HIGH  ITMS-91053  Privacy manifest does not declare FileTimestamp
       Used by expo-file-system. Upload is rejected before review.
       Fix: add an NSPrivacyAccessedAPITypes entry with reason C617.1.

MED   3.1.2  Paywall shows price but not renewal period
       Fix: "$39.99 / year, renews automatically. Cancel anytime in Settings."

PASS  4.8 Sign in with Apple present · 2.1 no placeholder text ·
       1024px icon has no alpha · export compliance key set

6 more findings in the full report. Run /shipcheck:unlock to add a license.
/plugin marketplace add BakerVentures/shipcheck Runs inside your own Claude Code. Your code never leaves your machine.

Apple's App Review team evaluated 9.1 million submissions in 2025 and rejected over 2 million of them — including 443,000+ for privacy violations alone. (Apple Newsroom, May 2026)

Three steps: scan the project and store listing, check against live Apple and Google policy, get a ranked report with fixes

What it checks

The guideline corpus is fetched live and cached with a date and hash, so you're never checking against last year's rules. /shipcheck:refresh shows you what Apple changed since your last scan.

Also runs without Claude Code

The deterministic half — everything except store-listing judgment — is a zero-dependency CLI, so it runs in CI or under any other agent.

git clone https://github.com/BakerVentures/shipcheck && shipcheck/bin/shipcheck scan . Exits 1 on a critical finding, so it gates a pipeline.
# .github/workflows/shipcheck.yml
- uses: BakerVentures/shipcheck@v1
  with:
    fail-on: critical
shipcheck scan running in a terminal, showing findings and a NOT READY verdict

The judgment checks — store listing, paywall disclosure, category rules, guideline 4.2 — need a model reading current guideline text, so those stay in the Claude Code plugin, where your own Claude does that work at no cost to us.

Already rejected?

Paste the Resolution Center message into /shipcheck:reply. It reads the cited guideline, checks what you've changed, and drafts the reply in the register reviewers actually respond to. If the fix isn't actually in the code yet, it says so and makes it — it won't draft a reply claiming something that isn't true.

shipcheck:reply reading a real App Store rejection, confirming the fix is not yet in the code, writing it, and drafting the Resolution Center response

Isn't there a free version of this?

Yes — several. The deterministic code and config checks are table stakes now and free everywhere, including in shipcheck's own free scan. What the free tools can't reach is your actual store listing: the description, screenshots, paywall copy, and demo account you're about to paste into App Store Connect, a whole rejection surface (guideline 2.3.x) that a code scanner cannot see at all. See the measured comparison against greenlight and five other free Claude Code checkers →

Pricing

There is no checkout yet, so none of the paid tiers can be bought today. The free scan is the whole product right now: a risk score and your top three findings, with the clause text and the fix. The prices below are what the paid tiers will cost when payment is set up, not an offer.

Free
scan, every app

Risk score plus your top three findings with fixes.

Install
$29
one app, forever

Full report, unlimited rescans, Resolution Center reply drafts.

Not on sale yet
$49
per year, unlimited apps

Everything above across every project you ship.

Not on sale yet

Need team seats? $149/yr — unlimited apps, shareable across your team, priority guideline updates. Not on sale yet.

Questions

Does my code get uploaded anywhere?
No. The scan runs in your own Claude Code session, and no shipcheck server ever sees your project. There are exactly three kinds of outbound request: fetching Apple's and Google's public policy pages; reachability checks on the support and privacy URLs you list in your own metadata file (skip them with --offline); and, if you buy a license, a key check carrying your key, the plugin version, and an opaque per-app token. No project path, dependency list, source, metadata, or finding is ever transmitted — _payload() in scripts/license.py is the entire request body, so you can check rather than trust me.
Does it guarantee approval?
No. It catches the rejections that come from the guidelines and from common React Native and Expo configuration mistakes. It can't run your app or predict a reviewer's mood.
Why React Native and Expo specifically?
Because that's where the config-level rejections cluster: transitive permission strings, SDK privacy manifests, Expo Go leftovers. Native Swift projects work too, with less depth.
Why not just ask Claude to review my app against the guidelines?
Because "the guidelines" in Claude's training data are however old the model's cutoff is, and Apple and Google change these pages constantly. shipcheck fetches the live pages, hashes them, and cites the clause off disk — /shipcheck:refresh shows you exactly what changed since your last scan. A citation in your report is text it actually fetched, not text a model remembered.
Refunds?
Nothing is on sale yet, so there is nothing to refund. When checkout opens it will be fourteen days, no questions.