App Tracking Transparency (ATT) prompt
The iPhone system dialog an app must use before tracking someone across other companies' apps and sites or accessing the IDFA.
See it
What it is
App Tracking Transparency is the iOS system permission for tracking a person across other companies' apps and websites, including access to the advertising identifier. The app supplies a purpose sentence, but Apple draws the dialog and records allowed, denied, restricted, or not determined. Apple made the prompt mandatory in iOS 14.5 in April 2021, which is the moment mobile ad attribution changed for everyone.
Reach for the ATT prompt only when the app or one of its SDKs actually performs Apple's definition of tracking. Ask at a moment where the benefit is understandable, after a plain in-app explanation, then call ATTrackingManager.requestTrackingAuthorization. Ordinary first-party analytics does not automatically require ATT merely because it measures app use.
Gotcha: the system prompt is effectively one shot per install. If the answer is not authorized, the app must not access the IDFA or let an ad or attribution SDK find another way to track the same person. Gate SDK startup on the current authorization status, keep a useful non-tracked path, and make the App Privacy details match what the shipped code does.
Ask AI for it
Implement App Tracking Transparency on iOS with the AppTrackingTransparency framework. Add a concrete NSUserTrackingUsageDescription, show one in-app primer only at the feature that benefits from personalized advertising, then call ATTrackingManager.requestTrackingAuthorization only when trackingAuthorizationStatus is notDetermined. Branch explicitly for authorized, denied, restricted, and notDetermined. Do not initialize the advertising or attribution SDK, read ASIdentifierManager's advertisingIdentifier, or send cross-company tracking data before authorization. Keep contextual ads and core app features working after denial, re-read status on foreground, and add tests proving every tracking code path stays closed unless status is authorized.