# shipcheck > A rejection-risk checker that runs inside Claude Code. shipcheck reads your React Native or Expo project, cites the exact App Store or Google Play clause, and names the file to fix. Publisher: Baker Ventures LLC (https://bakerventuresstudio.com) Last updated: 2026-09-06 License: content on this site may be quoted and cited with attribution to shipcheck. ## Pages - [Catch the rejection before you submit it](https://shipcheck.bakerventuresstudio.com/): shipcheck scans your React Native or Expo project inside Claude Code, cites the exact App Store or Google Play clause, predicts what the reviewer will say, and names the file to fix. No account, no repo upload, first scan free. - [How many apps does Apple actually reject?](https://shipcheck.bakerventuresstudio.com/app-store-rejection-statistics/): Apple's own transparency report: 2,093,244 rejections from 9,100,620 submissions, broken down by guideline section. - [Compliance tool comparisons](https://shipcheck.bakerventuresstudio.com/compare/): How shipcheck compares with AcceptMyApp, ReviewKit and the free Claude Code plugins, on price, locality, React Native depth and what each one cannot do. - [App Store rejection checkers compared](https://shipcheck.bakerventuresstudio.com/compare/app-store-rejection-checkers-compared/): An honest comparison of the tools that check an app for App Store rejection risk before submission, including the free Claude Code plugins, and where each one is the right answer. - [Frequently asked questions](https://shipcheck.bakerventuresstudio.com/faq/): Privacy manifests, account deletion, rejection statistics and guideline questions, answered from Apple's documentation. - [App review glossary](https://shipcheck.bakerventuresstudio.com/glossary/): Definitions of the App Store and Google Play terms React Native and Expo developers meet at submission time, from privacy manifests and required reason APIs to Data safety, CNG and the Resolution Center. - [Guides](https://shipcheck.bakerventuresstudio.com/guides/): Practical guides for getting a React Native or Expo app through App Review and Play policy the first time — review notes, permission audits and the dependency-tree checks nobody runs. - [Auditing the permissions your config plugins added](https://shipcheck.bakerventuresstudio.com/guides/expo-config-plugin-permission-audit/): Your Info.plist and AndroidManifest contain permission strings nobody on your team wrote. How to find them, decide which are real, and remove the rest at the source so prebuild does not put them back. - [Writing App Review notes that work](https://shipcheck.bakerventuresstudio.com/guides/review-notes-that-work/): Review notes are the only place you get to answer a question before it is asked. What to put in them, what to leave out, and the four things that cause avoidable rejections. - [Every question this site answers](https://shipcheck.bakerventuresstudio.com/questions-answered/): All 106 questions answered across shipcheck, each linked to its full answer. Generated from the pages themselves. - [Rejection guides](https://shipcheck.bakerventuresstudio.com/rejections/): Guideline-by-guideline rejection explainers for React Native and Expo developers, quoted from Apple's own documentation. - [Apple's required-manifest SDKs, mapped to npm packages](https://shipcheck.bakerventuresstudio.com/rejections/apple-sdk-to-npm-package-map/): A complete, machine-readable map of every SDK on Apple's third-party privacy-manifest list to the React Native and Expo npm packages that bring it into your app — including the 32 that arrive transitively and cause most ITMS-91061 rejections. - [Google Play, for React Native and Expo apps](https://shipcheck.bakerventuresstudio.com/rejections/google-play/): Data safety declarations that must match your SDKs, target API level that blocks publishing rather than triggering review, background location declarations, and the closed-testing gate. - [Guideline 2.1: app completeness](https://shipcheck.bakerventuresstudio.com/rejections/guideline-2-1-app-completeness/): Performance is the largest rejection category by volume. What 2.1 requires, and the React Native failure modes that trigger it. - [Guideline 2.3.10 — other platforms in your metadata](https://shipcheck.bakerventuresstudio.com/rejections/guideline-2-3-10-other-mobile-platforms/): Apple rejects app metadata that names other mobile platforms. What counts, where it hides in a React Native project, and the screenshots that catch people out. - [Guideline 2.5.4 — background modes without a feature](https://shipcheck.bakerventuresstudio.com/rejections/guideline-2-5-4-background-modes/): Apple rejects apps that declare the location background mode without a genuine persistent-location feature. In Expo projects the key is often injected by a config plugin for a package you no longer use. - [Guideline 3.1.1 — in-app purchase](https://shipcheck.bakerventuresstudio.com/rejections/guideline-3-1-1-in-app-purchase/): Digital goods go through in-app purchase. Real-world services rendered offline do not. The line matters for any app that both sells a subscription and collects customer payments. - [Guideline 3.1.2 — subscriptions](https://shipcheck.bakerventuresstudio.com/rejections/guideline-3-1-2-subscriptions/): What must be disclosed on a subscription paywall, which parts of it are objective and testable before you submit, and the RevenueCat and Expo details that cause avoidable rejections. - [Guideline 4.2 — minimum functionality](https://shipcheck.bakerventuresstudio.com/rejections/guideline-4-2-minimum-functionality/): The rejection that says your app does not do enough to justify being an app. What it actually covers, the patterns that trigger it, and why this is the one class of rejection static analysis cannot catch. - [Guideline 4.3: the spam rejection](https://shipcheck.bakerventuresstudio.com/rejections/guideline-4-3-spam/): The exact text of 4.3(a) and 4.3(b), the app categories Apple names, and why this rejection feels arbitrary to developers. - [Guideline 5.1.1(v): account deletion](https://shipcheck.bakerventuresstudio.com/rejections/guideline-5-1-1-v-account-deletion/): Why 5.1.1(v) rejects React Native and Expo apps, what does not satisfy Apple, and the Sign in with Apple token revocation step most teams miss. - [Guideline 5.1.2 now names third-party AI explicitly](https://shipcheck.bakerventuresstudio.com/rejections/guideline-5-1-2-third-party-ai/): Apple's data-sharing guideline requires disclosure and explicit permission before sharing personal data with third parties, including third-party AI. What that means for apps calling LLM APIs. - [Guideline 5.1.5 — location services](https://shipcheck.bakerventuresstudio.com/rejections/guideline-5-1-5-location-services/): Apple rejects apps that demand location up front or do not work without it. The staging pattern that avoids it, and how Android's separate background-location flow differs. - [ITMS-91053 — Missing API declaration](https://shipcheck.bakerventuresstudio.com/rejections/itms-91053-missing-api-declaration/): What ITMS-91053 means, why a React Native or Expo app triggers it without touching the API itself, how to find which bundle is responsible, and the exact reason code to declare for each category. - [ITMS-91054, ITMS-91055 and ITMS-91056](https://shipcheck.bakerventuresstudio.com/rejections/itms-91054-91055-91056-invalid-privacy-manifest/): The three invalid-declaration errors, what each one actually means, the exact strings App Store Connect sends, and how to find the malformed PrivacyInfo.xcprivacy in a React Native or Expo project. - [ITMS-91061 — Missing privacy manifest](https://shipcheck.bakerventuresstudio.com/rejections/itms-91061-missing-privacy-manifest/): ITMS-91061 means a framework on Apple's required-SDK list shipped without a privacy manifest. How to identify the framework in a React Native or Expo project, and the four ways out. - [Play's closed testing requirement](https://shipcheck.bakerventuresstudio.com/rejections/play-closed-testing-requirement/): Some new personal developer accounts must run a closed test with a minimum number of testers over a set period before applying for production access. What it means for a launch date, and how to plan around it. - [The Play Data safety form, and why RN apps declare it wrong](https://shipcheck.bakerventuresstudio.com/rejections/play-data-safety-form/): The Data safety section must match what your app and its SDKs actually do. In a React Native project the SDKs do things you did not declare, and Google checks. How to derive the form from the dependency tree instead of from memory. - [Play target API level, and what it blocks](https://shipcheck.bakerventuresstudio.com/rejections/play-target-api-level/): Google requires new apps and updates to target a recent Android API level by an annual deadline. It is not a review conversation — it blocks the upload. What it means for React Native and Expo projects. - [Why React Native apps fail the privacy manifest check](https://shipcheck.bakerventuresstudio.com/rejections/react-native-privacy-manifest/): Apple requires a privacy manifest per bundle, and Expo's own guidance is to inspect node_modules by hand. Why ITMS-91053 happens and what actually resolves it. - [Which of your dependencies need a privacy manifest?](https://shipcheck.bakerventuresstudio.com/rejections/react-native-sdks-needing-privacy-manifests/): Apple lists 86 SDKs that require a privacy manifest and signature. These are the ones that actually appear in React Native and Expo dependency trees. - [Apple's required reason API categories and approved reason codes](https://shipcheck.bakerventuresstudio.com/rejections/required-reason-api-reference/): The complete list of NSPrivacyAccessedAPICategory values and the approved reason codes for each, transcribed from Apple's own documentation, with the React Native and Expo packages that trigger each one. - [Why apps get rejected](https://shipcheck.bakerventuresstudio.com/why/): Rejections cost calendar time rather than effort, React Native and Expo projects fail in a distinct way, and the expensive rejections are the ones where the message names a guideline instead of a file. - [What an App Store rejection actually costs](https://shipcheck.bakerventuresstudio.com/why/what-an-app-store-rejection-actually-costs/): The real cost of a rejection is calendar time, not effort — each cycle is a review queue plus a build plus a guess. Here is the arithmetic, why RN and Expo apps take more cycles, and which rejections are avoidable before you submit. - [Why React Native and Expo apps get rejected differently](https://shipcheck.bakerventuresstudio.com/why/why-react-native-apps-get-rejected-differently/): Generic iOS compliance advice misses the rejections that actually hit React Native and Expo projects, because the causes are transitive dependencies, generated native projects and config-plugin side effects rather than anything in your source. ## Machine-readable facts - https://shipcheck.bakerventuresstudio.com/facts.json - https://shipcheck.bakerventuresstudio.com/llms-full.txt