App Tracking Transparency is the iOS permission request without which an app can't track a person across other companies' apps and websites or read their advertising identifier. It has applied since iOS 14.5, released on April 26, 2021, and without consent the IDFA comes back as all zeros.
What Apple counts as tracking
Apple defines tracking as linking user or device data from your app with data collected from other companies' apps, websites or offline properties for targeted advertising or ad measurement. Sharing user or device data with data brokers is tracking too.
- Tracking. Showing ads in your app based on data gathered in other companies' apps and sites. Sending a list of emails or ad identifiers to an ad network for retargeting. An SDK that combines your app's data with other developers' data, even if you never use it for that.
- Not tracking. Data linked only on the device and never sent off it in a form that identifies the person. A broker that receives data solely for fraud prevention. Data shared with a consumer reporting agency to assess creditworthiness.
If your app doesn't combine its data with anyone else's and doesn't pass it to brokers, it doesn't need the system request.
Where it lives in Xcode and in code
In Xcode, open your app target, the Info tab, and add the NSUserTrackingUsageDescription key with a short line on why you need permission. The system adds your app name itself. Without the key, the app crashes the first time it touches the framework.
In code, ATTrackingManager.requestTrackingAuthorization shows the dialog and the trackingAuthorizationStatus property holds the current answer. There are four statuses, authorized, denied, notDetermined and restricted. In App Store Connect, tracking shows up in the App Privacy questionnaire as the Data Used to Track You block of your privacy label.
Apple's dates and numbers
| What | What Apple says |
|---|---|
| Permission required | on iOS 14.5, iPadOS 14.5 and tvOS 14.5, released April 26, 2021 |
| IDFA without consent | 00000000-0000-0000-0000-000000000000 |
| IDFA is always zeros | in Simulator, on a Mac, and in iPhone and iPad apps running in visionOS |
| Answer statuses | 4 |
| Asking again in the EU | a year after the answer, unless the person turned requests off in Settings |
| Full-page sheet instead of an alert | in France, Germany, Italy, Poland and Romania |
| Alternative request in the EU | optional for developers, starting with iOS 27.2 and iPadOS 27.2 |
| Rewards for consent | not allowed, guideline 5.1.2(i) |
Per Apple's user privacy and data use page, App Tracking Transparency documentation, advertisingIdentifier reference and newsroom update of April 26, 2021, checked October 16, 2026.
How to ask for tracking permission
- Check Apple's definition first. If your SDKs don't link data with anyone else's and you share nothing with brokers, skip the request, since an extra system dialog on first launch only gets in the way.
- Add NSUserTrackingUsageDescription and say what the person gets, for example “Ads will be closer to your interests.”
- Make the call while the app is active. In any other state the system answers at once and shows nothing. A good moment is after onboarding, once the person sees why the app is worth using.
- Handle the answer. authorized unlocks the IDFA, denied and restricted leave zeros, and notDetermined means the dialog closed without a decision, so you can call again.
- Declare tracking data in App Privacy and list the domains in NSPrivacyTrackingDomains of your privacy manifest. Until consent is given, requests to those domains fail.
- Read advertisingIdentifier fresh each time. People can change their mind in Settings › Privacy & Security › Tracking, which is why Apple advises against storing the value.
Common mistakes
- A reward for saying yes. Guideline 5.1.2(i) doesn't allow features, content, money, gift cards or codes to depend on permission to track.
- Another identifier instead of the IDFA. Apple treats a hashed email or phone number used without consent as tracking too, so swapping identifiers changes nothing.
- Fingerprinting. Browser traits, settings, network and location can't be combined to recognize a device, even after consent. Apple may not accept an app that does this itself or through an SDK.
- Testing in Simulator. The IDFA there is always zeros whatever you answer. Test on an iPhone, for example through TestFlight.
How many times you can ask
Apple doesn't give an overall limit, but the dialog doesn't always appear. The system answers without showing it when tracking is restricted on the device, when the person has turned off Allow Apps to Request to Track, when an earlier request is still pending and when the app isn't active. If the person closes the dialog without deciding, the status stays notDetermined and you can ask again.
In the European Union the system notes the date of any answer and won't show the request for a year. After that you can ask once more, whether the person agreed last time or not. From iOS 27.2 apps in the EU can show a full-page sheet with Markdown text and an Additional Information button for more detail.
Appto counts onboarding and paywall variants with anonymous view and tap counters on your own server, with no device ID and no address. More on the onboarding and paywalls page.
Questions
What happens if someone declines tracking?
The status becomes denied, the IDFA comes back as zeros, and you can't track that person with other identifiers either. Your app's features shouldn't depend on the answer.
Which iOS version requires the ATT permission?
iOS 14.5, iPadOS 14.5 and tvOS 14.5, released on April 26, 2021. Since then an app can neither track nor read the advertising identifier without consent.
Can I show the tracking request again?
Yes, if the dialog closed without an answer. In the European Union you can ask again a year after the last answer, unless the person turned these requests off in Settings.
Do I need ATT if my app has no ads?
Only if you link data with other companies' data or pass it to brokers. Analytics for your own app isn't tracking, as long as its SDK doesn't reuse the data for other developers' ads.
Where does NSUserTrackingUsageDescription go?
In your app target's properties, on the Info tab in Xcode. Keep the text short and specific, the system adds your app name on its own.
Build your own app in Appto
Appto checks the niche on fresh App Store data, designs the screens, writes the code, builds the App Store page and submits to Apple from your account or shows you what to press in App Store Connect. Runs on your own Claude Code or Codex.
Download for Mac