Guideline 5.1.1

Guideline 5.1.1 - Privacy: ATT Framework Without Tracking Usage Description

Low RiskEasy0 Reports

Our Take

Your app imports the App Tracking Transparency or AdSupport framework but is missing the NSUserTrackingUsageDescription in Info.plist. Apple requires this description to show the ATT prompt.

Resolution Guide

01

**Add NSUserTrackingUsageDescription to Info.plist** — This is the text shown in the ATT permission dialog. Be specific about what data is tracked and why. Example: "This identifier will be used to deliver personalized ads to you." Generic descriptions are rejected.


02

**Implement the ATT prompt** — Call `ATTrackingManager.requestTrackingAuthorization` before accessing the IDFA. Show the prompt at an appropriate time — not on first launch. Apple recommends showing it when the user encounters an ad-supported feature.


03

**Handle all authorization states** — Your code must handle `.authorized`, `.denied`, `.notDetermined`, and `.restricted`. Only access `ASIdentifierManager.shared().advertisingIdentifier` when status is `.authorized`.


04

**Declare tracking in privacy manifest** — In `PrivacyInfo.xcprivacy`, set `NSPrivacyTracking` to `true` and list tracking domains in `NSPrivacyTrackingDomains`.


05

**If you don't actually track** — If the ATT/AdSupport import is unused or leftover, remove it entirely. Remove the import statements, remove the framework from your Podfile/Package.swift, and remove `NSUserTrackingUsageDescription` from Info.plist.

Prevention:

  • Only add ATT when you have a concrete tracking use case
  • Include the purpose string at the same time you add the framework
  • Test the ATT flow on a physical device (simulator always returns .notDetermined)
  • Community Solutions · 0

    Sign in to share your solution.

    More Guideline 5 (Legal) rejections

    View all Guideline 5 rejections