synthrek

Privacy policy templates that get apps rejected from the App Store (and what to do instead)

Patterns we see repeatedly in App Store privacy rejections — fields that are blank in the App Privacy Details form, inconsistent disclosures between the policy and the form, and SDK manifests that aren't ratified — with cautious wording on how to recover.

mistakes confidence medium Published May 18, 2026
Educational content, not legal advice. Consult counsel for production policies. Sample wording is a starting point; review the official requirement before publishing.
Sources S-001S-002S-015S-016

App Store rejections under Guideline 5.1.1 (“Data Collection and Storage”) are a regular thread in r/iOSProgramming and r/IndieDev. The same patterns show up again and again. None of the patterns below is a single root cause — Apple’s review notes typically point to multiple issues — but they are the things to check first when a rejection email lands. Apple’s own Guideline 5.1.1 (accessed 2026-05-25) is the source of truth.

TLDR

The five rejection patterns we hear about most often:

  1. Generic copy-paste privacy policy that doesn’t mention the actual data the app collects.
  2. App Privacy Details form fields left blank or marked “Data Not Collected” when the app actually does collect.
  3. Inconsistency between the in-app policy and the App Privacy Details form.
  4. SDK requires a Privacy Manifest the app didn’t ship.
  5. Tracking flag misconfiguredNSPrivacyTracking set to one value, the App Privacy Details form set to the other.

For each pattern below: what reviewers actually flag, why it happens, and what the fix typically looks like. None of this is legal advice — your reviewer notes are the authoritative source for your specific app.

Pattern 1: Generic template privacy policy

What it looks like. The policy mentions a “Company” placeholder, lists generic categories (“we may collect personal information”), and never names the actual vendors the app uses. App Review flags 5.1.1 because the policy doesn’t describe the app’s actual data practices.

Why it happens. Founder grabs a public template, swaps in the app name, ships. The template was written for a generic SaaS, not a Stripe + Supabase + PostHog stack.

Fix shape. Replace generic categories with the actual data your app collects, the actual processors it uses, and the purposes spelled out in your App Privacy Details form. The disclosure matrix is one way to walk the stack one vendor at a time.

Pattern 2: Blank or “Not Collected” fields

What it looks like. The App Privacy Details form lists “Data Not Collected” but the app uses an analytics SDK that ships its own data. Apple’s App Privacy Details docs make clear that a third-party SDK’s data collection counts as the app’s collection.

Why it happens. Founder thinks “I don’t collect anything, it’s just analytics.” But analytics is collection.

Fix shape. Walk every SDK and list every category each one touches. PostHog typically pulls Usage Data and Identifiers; Sentry pulls Diagnostics; Stripe pulls Purchases and Identifiers. Update App Privacy Details, re-submit.

Pattern 3: Policy vs form inconsistency

What it looks like. The hosted privacy policy at /privacy says “we collect email and analytics events”; the App Privacy Details form says “Data Not Linked to user”. Apple cross-references the two, and inconsistency is a common rejection note.

Why it happens. The policy and the form drift over time — the founder updates one and not the other.

Fix shape. Treat them as one artifact. Update both whenever you add a vendor or a new data type. Consider keeping a single internal source-of-truth table.

Pattern 4: Missing Privacy Manifest

What it looks like. Build upload to App Store Connect surfaces warnings about SDKs that require a PrivacyInfo.xcprivacy and aren’t shipping one. The manifest is mandatory for SDKs on Apple’s commonly-used SDK list (accessed 2026-05-25).

Why it happens. Vendor hasn’t updated. Or vendor has updated but you’re pinned to an old version.

Fix shape. Update the SDK. If the vendor still doesn’t ship a manifest, either substitute or follow Apple’s documented “communication” path with the vendor and update your version once they release one.

Pattern 5: Tracking flag misconfigured

What it looks like. Your app shows the App Tracking Transparency prompt because NSPrivacyTracking is true, but the App Privacy Details form says “Data Not Used to Track You”. Inconsistency rejection.

Why it happens. Apple’s definition of “tracking” is narrower than the common-English use — it means linking data with data from other apps/websites for advertising or to share with a data broker. If your app doesn’t do that, NSPrivacyTracking should be false. The Privacy Manifest docs spell out the definition.

Fix shape. Re-read Apple’s definition. For most indie apps that don’t share with ad networks or data brokers, the flag is false. Align both the manifest and the form.

A pre-flight checklist

CheckTooling
Every SDK has a manifestXcode build report → “Privacy Manifest” warnings
Manifest categories align with App Privacy DetailsApp Store Connect form vs PrivacyInfo.xcprivacy
Required-reason API codes are presentXcode 15+ build report
Hosted policy mentions every vendor in App Privacy Detailsmanual review
Tracking flag matches the App Privacy Details “Tracking” sectionmanual review
App Privacy Details form is complete (no blank fields)App Store Connect

FAQ

My app was rejected. What do I do first? Open the rejection email and read the exact guideline cited (5.1.1, 5.1.2, etc.). Apple’s review team often quotes the specific element that’s inconsistent. Fix that first, then re-run the checklist above before re-submitting.

Does this also apply to TestFlight builds? TestFlight builds also need the App Privacy Details form filled in before the build can be invited externally.

What if my app has no third-party SDKs and only collects email? You still need a privacy policy and an App Privacy Details form. The form is short — Contact Info (Email) — but it can’t be left blank.


Sources cited

S-001, S-002, S-015, S-016. Each source row is listed in the full disclosure matrix .

Useful next step

Open the Indie App Privacy Disclosure Matrix for a side-by-side view of which platforms expect which disclosures for the services in your stack.