Free check · No account · Built for Rork, a0, Bolt, Expo and first-time submitters
Know what Apple will reject — before you submit.
Drop your .ipa and get a guideline-by-guideline rejection report in under a minute. Every flagged item comes with the Apple guideline number, the evidence (which file, which string) and a plain-English fix for Expo, Rork, Bolt or Xcode.
Have the .ipa on this phone? Run the free check
10 free questions · 43 binary checks · Report in under a minute
Prefer the terminal? npx rejectproof MyApp.ipa npm · GitHub Action
Your IPA never leaves your browser. We only ever see a small JSON summary of what was found — never your binary.
- Your IPA never leaves your browser
- No account
- One-time payment
- Built by an iOS developer
Security & privacy
Your build stays on your machine.
Developers should not have to upload their builds to a random website. The scan runs inside a Web Worker in your tab, and the only thing that reaches our server is a few KB of JSON — which you inspect on screen before it is sent.
What we see
Sent only after you click “Send” — shown in full on screen first.
Info.plist key names
Values are kept for a fixed allowlist of Apple keys (bundle id, version, usage texts). Every other value is replaced by “[redacted]”.
Keyword counters
How many times each of our ~40 keywords (e.g. ATTrackingManager, SKPaymentQueue) appears in the main executable, plus a short snippet.
Embedded framework names
The folder names under Frameworks/ — so we can spot ad/analytics SDKs that ship without a privacy manifest.
Privacy manifest & profile summary
PrivacyInfo.xcprivacy keys, the profile’s team id, expiry and Apple entitlements. Custom entitlements are redacted.
What we never see
None of this exists on our server — there is no file-upload endpoint.
Your .ipa or .app binary
It is unzipped and scanned in your browser. No upload, no chunking, no “temporary” copy.
Your source code or assets
We match strings inside the executable locally and only send the counts.
Signing certificates, provisioning keys, private keys
We read the profile’s expiry date and entitlements; the certificate blobs are never transmitted.
An account, a password, a stored file
No signup. Nothing is retained after the scan except the JSON summary that powers your report link.
Verify it yourself: Open DevTools → Network while scanning. You will see exactly one POST with the JSON you approved — and nothing else.
Who this is for — and who it is not for
We would rather tell you now than after you paid.
Built for
Vibe-coders
You built the app with Rork, a0, Bolt, or Expo + Claude Code / Cursor, and you have never opened an Info.plist.
First-time submitters
You have an .ipa and no idea what App Review will look at first.
Indie iOS developers
You know the guidelines but want a 60-second sanity check before every submission.
Not for
Android / Google Play
v1 is iOS only. Drop an APK and we will tell you politely.
Design, content or business-model rejections
Those are human judgement calls. We check the mechanical, preventable causes.
Anyone who wants “guaranteed approval”
No tool can promise that. A clean report removes the avoidable rejections — nothing more.
How it works
Four steps. Payment comes after you have seen your free report.
- Free
Step 1
Drop your .ipa
From Expo EAS, Xcode Archive, Rork, a0 or Bolt — it does not matter. The archive is opened in a Web Worker in your browser. Nothing is uploaded.
- Free
Step 2
Answer 10 questions, get a free report
Account deletion, demo login, Sign in with Apple, privacy policy — the metadata-level things reviewers check first. Instant, no account.
- $12 / $39
Step 3
Unlock the full 43-point scan
$12 for one app or $39 for five. Paddle secure checkout, no account. We then check privacy manifests, permission texts, Restore Purchases, ATT, provisioning and more.
- 3-day re-scan
Step 4
Fix, rebuild, re-scan free
Every finding comes with a plain-English fix (plus Expo and Swift hints). Re-scan the same app as often as you need for 3 days at no extra cost. Your report link is emailed to you.
The 43 binary checks
Each one maps to an App Review guideline and comes with the evidence we found in your build plus a plain-English fix.
Privacy 15
Guidelines 5.1.1 · 5.1.2
- PB-01Camera used without a usage description5.1.1
- PB-02Photo library used without a usage description5.1.1
- PB-03Location used without a usage description5.1.1
- PB-04Microphone used without a usage description5.1.1
- PB-05Contacts used without a usage description5.1.1
- PB-06Calendar used without a usage description5.1.1
- PB-07Bluetooth used without a usage description5.1.1
- PB-08Face ID used without a usage description5.1.1
- PB-09Tracking (IDFA) without App Tracking Transparency prompt text5.1.2
- PB-10Privacy manifest (PrivacyInfo.xcprivacy) missing5.1.1
- PB-11Privacy manifest says tracking but lists no tracking domains5.1.1
- PB-12Required Reason API used but not declared in the privacy manifest5.1.1
- PB-13ATT used but the tracking usage description is empty5.1.2
- PB-21ATT prompt text present but manifest says no tracking5.1.1 / 5.1.2
- PB-22Known ad/analytics SDK without its own privacy manifest5.1.1 (SDK manifest)
Purchases 2
Guideline 3.1.1
Sign-in 1
Guideline 4.8
Provisioning 2
Code signing
- PB-23Provisioning profile expiredprovisioning
- PB-24Push entitlement present but remote-notification background mode missingprovisioning consistency
Runtime & metadata 8
Guidelines 2.5.2 · 4.2 · 2.3 · Export compliance
- PB-16Runtime code download / execution risk2.5.2
- PB-20Looks like a website wrapper (minimum functionality)4.2
- PB-17ITSAppUsesNonExemptEncryption key missingexport compliance
- PB-18Encryption declaration may contradict binary contentsexport compliance
- PB-25Version or build number missing/invalid2.3 (metadata)
- PB-30Development server references left in the build2.1
- PB-32Placeholder or test wording in the app name2.3.8
- PB-43Localized resources shipped but CFBundleLocalizations not declared2.1 / 2.3.3
Declared but unused 5
Guidelines 5.1.1 · 2.5.1 · 2.5.4
- PB-26Permission declared in Info.plist but never used5.1.1
- PB-27Entitlement granted but capability never used2.5.1 / 5.1.1
- PB-28Background mode declared but not used2.5.4
- PB-29App Transport Security disabled for all connections2.5.1 / App Transport Security
- PB-41External accessory (MFi) protocols declared but no accessory code2.5.1 / MFi
App completeness — crashes & dead links 6
Guideline 2.1 · 2.4.1
- PB-34Embedded framework missing — crash on launch2.1
- PB-35Missing arm64 slice / unsupported architecture2.1 / 2.5.1
- PB-36Minimum iOS in Info.plist does not match the binary2.1
- PB-33Dead links inside the app2.1
- PB-42WKWebView links open in a new window but nothing handles the popup2.1
- PB-31iPad supported but orientations incomplete without UIRequiresFullScreen2.4.1 / iPad multitasking
Apple's automated binary check 2
ITMS-90338 · ITMS-90809
- PB-37Non-public API reference (ITMS-90338)2.5.1
- PB-38UIWebView still referenced (ITMS-90809)2.5.1
Judgment-call risks 2
Guidelines 4.3 · 5.1.1(v)
Every rule shows the date it was last verified against Apple’s current App Store Review Guidelines (currently 2026-09-16). Apple changes guidelines; when a rule is re-checked, the date updates. Plus 10 metadata questions in the free check.
What this catches — and what it cannot
Roughly half of App Store rejections come from things that are visible before you submit. That half is what RejectProof checks. The other half is judgment calls only a reviewer can make.
- Mostly checked
2.1 App Completeness
largest single cause
Crash-on-launch risks (missing embedded framework, wrong architecture, iOS version mismatch), dead links, dev-server leftovers, placeholder content, iPad layout, demo account (survey).
- Checked
5.1.1 / 5.1.2 Privacy
very common
Privacy manifest, permission strings vs real API use, ATT, required-reason APIs, account deletion, App Privacy label vs SDKs in the build.
- Checked
2.3 Metadata
common
Other platform or app names, placeholder wording, pricing claims, field limits, promised features missing from the build — when you paste your listing.
- Checked
ITMS-90338 / 90809 upload checks
blocks upload
Non-public API symbols and UIWebView references that Apple's automated check rejects before a human looks.
- Partly
3.1.1 In-app purchases
common
Missing Restore Purchases path, external payment links. Whether your paywall wording passes is a reviewer call.
- Partly
4.3 Spam / 4.2 Minimum functionality
common
Template fingerprints and WebView-wrapper signals as warnings. The final call is subjective.
- Not possible statically
Design, content, safety (1.x, 4.x)
remaining
Reviewer judgment on your UI, content and value. No static scan can predict it — and we do not pretend to.
Simple, one-time pricing
No subscription. Pay for a report when you need one — after you have seen your free report.
Free check
$0
no account
- 10-question metadata review
- App name, bundle id, version read from your build
- Instant, no account
One app
$12
one app · 3 days of re-scans · one-time
- Full 43-point scan of the build
- Guideline number + evidence + fix for every item
- Unlimited re-scans of the same app for 3 days — fix, rebuild, confirm
- Permanent report link by email
Secure checkout by Paddle
Five apps
$39
5 apps · $7.80 each · one-time
- Everything in One app, for 5 different apps
- 3 days of re-scans per app
- Credits never expire
- Best for freelancers & agencies
Secure checkout by Paddle
Studio
$99
20 apps · $4.95 each · one-time
- Everything in One app, for 20 different apps
- 3 days of re-scans per app
- Credits never expire, shared by one email
- For agencies and app studios shipping every week
Secure checkout by Paddle
Rejection guarantee
If Apple rejects the build you scanned for something on our checklist that your report marked as passing, you get a full refund.
- One-time payment, no subscription
- VAT handled at checkout by Paddle
- Receipt and report link by email
Payment happens after you see your free report. Orders are processed by Paddle.com as merchant of record; your card details never touch our server.
Questions
Is my app file actually being uploaded to your servers?
No. The .ipa is opened locally in your browser: a Web Worker reads the zip index, inflates only Info.plist, PrivacyInfo.xcprivacy and embedded.mobileprovision, and streams the main executable through a keyword matcher. The only thing sent to our server is a small JSON summary — typically 2–20 KB: Info.plist key names (values of unknown keys are replaced by “[redacted]”, so ad-network ids, Maps keys or custom API keys never leave), how many times each of our keywords appears in the binary, and the names of embedded frameworks. Before it is sent, you see that exact JSON on screen and confirm; you can also watch the request in DevTools → Network.
Where do I even get my .ipa file?
Expo/EAS: run `eas build --platform ios` and download the build from the EAS dashboard or the link it prints. Xcode: Product → Archive, then Distribute App → Export, and use the exported .ipa or zip the .app. Rork/a0/Bolt: use the “Export” or “Download build” option in your project settings — if you cannot find it, check their docs; some tools submit directly to Apple without giving you a downloadable file (in that case the free 10-question check still works without a file).
If I pass all 43 checks, is my app guaranteed to be approved?
No. We check the causes behind the majority of rejections we could find evidence for, but App Review also includes human judgement calls (design quality, content policy, business-model fit) that no automated tool can predict. What we do guarantee: if Apple rejects the build you scanned for something on our checklist that your report marked as passing, you get a full refund.
Do you support Android / Google Play?
Not yet. v1 is iOS / IPA only. If there is enough demand we will consider it for v2 — tell us if you need it.
I fixed things — do I pay again?
No. One credit covers one app (bundle id) for 3 days: re-scan as often as you need while you fix things. After 3 days, or for a different app, a new credit is used. Unused credits never expire.
How does payment work? Do I need an account?
No account. After your free report you enter an email, pick One app ($12), Five apps ($39) or Studio ($99, 20 apps) and pay in a Paddle overlay — card, PayPal or Apple Pay depending on your country. Paddle is the merchant of record, handles VAT / sales tax and emails your receipt. Credits are attached to the email you entered; the report link is emailed to the same address.
What is your refund policy?
If the scanner fails to produce a report for your file (a technical error on our side), email support@rejectproof.com within 14 days for a full refund. We do not refund because you fixed everything we flagged and Apple still rejected you for something outside our checklist — see the guarantee question above. Full policy in the footer.
Find out what Apple will flag — before they do.
Free 10-question check. No account. Your build never leaves your browser.
Run the free check