App Tracking Transparency: The ATT Checks That Get Apps Rejected
23 Jun 2026 · 3 min read · Erik van Kammen
If your app reaches for the IDFA or bundles an advertising SDK, Apple expects an App Tracking Transparency prompt — and Guideline 5.1.2(i) is one of the most common privacy rejections when that prompt is missing or wired up wrong. The good news: every signal Apple looks for is already sitting in your compiled binary, so this is catchable before you upload.
ATT governs tracking — linking user or device data you collect to third-party data for advertising, or sharing it with a data broker. If your app tracks, three things must be true:
NSUserTrackingUsageDescription is present in your Info.plist and explains, in plain language, why you want to track.ATTrackingManager.requestTrackingAuthorization and shows the prompt before any tracking begins.<!-- Info.plist: required whenever your app tracks -->
<key>NSUserTrackingUsageDescription</key>
<string>We use your activity to measure ad performance and improve recommendations.</string>
The classic rejection is a contradiction inside the build: a tracking SDK is linked in, the binary can reach the IDFA, but there is no prompt and no usage string. To a reviewer that reads as "this app tracks without asking." To a pre-submission scan it reads the same way, because all of it is statically present:
| Signal in the binary | What it means |
|---|---|
AppTrackingTransparency framework linked |
The app can prompt — confirm that it does |
NSUserTrackingUsageDescription missing/empty |
No valid prompt copy — likely rejection if tracking |
IDFA access (ASIdentifierManager) |
Tracking identifier in use — ATT required |
| Ad / attribution / social SDKs present | Third-party tracking — ATT almost certainly required |
When a tracking SDK is present but the prompt machinery is not, that is a detectable inconsistency to fix before submission — not after a rejection.
No, and conflating them is a common mistake:
NSUserTrackingUsageDescription.PrivacyInfo.xcprivacy) is a declaration of data use and required-reason API access, validated separately.Both can independently flag or block a submission. An app can have a perfect privacy manifest and still get rejected for tracking without an ATT prompt — and both should agree with your App Privacy label.
AppCompliance detects ATT signals in the binary — the framework, the usage string, IDFA access, and the tracking SDKs that imply tracking — and can gate the check in CI. Whether your app tracks is a product decision; declaring it correctly is a technical one, and the technical part is fully checkable before you submit.
NSUserTrackingUsageDescription is present, specific, and honest.Everything technical in this post is checkable from the build itself, and that is exactly what AppCompliance does: upload an iOS or Android build, and minutes later you have every issue that would get it rejected, with the exact fix next to it.
One email when we open the doors. No spam, just the launch.