Why apps get rejected
Rejections do not cost effort, they cost calendar time. The fix is minutes; the cycle is a build, an upload, a wait in review and a message that frequently does not name a file. The rejections worth engineering against are the deterministic ones — privacy manifests, permission strings, background modes, account deletion — because those live in files and a machine can find them before you build.
The one sentence that explains most React Native rejections
Apple's privacy-manifest rule is per-bundle: "For each executable or dynamic library in an app that uses a required reason API, the bundle that includes the executable or dynamic library needs to include a privacy manifest file that reports the API."
Your app's manifest does not cover your dependencies, and in a React Native project you did not choose most of your dependencies — nanopb arrives under gRPC, which arrives under Firebase, and hermes is simply the default JavaScript engine. All three are on Apple's required-SDK list. Which of yours are.
shipcheck. “Why apps get rejected.” Baker Ventures LLC, September 6, 2026. https://shipcheck.bakerventuresstudio.com/why/