ATT - requestTrackingAuthorization returns notDetermined without presenting the prompt on iOS 27.0 beta

Problem

On iOS 27.0 beta (build 24A5430a) ATTrackingManager.requestTrackingAuthorization() completes with the status still .notDetermined and no prompt is ever presented. The ATT system prompt does not appear in any app on the Store.

Environment

  • iOS 27.0 beta 8
  • iPad and iPhone, both affected
  • Country IT

Question: Is this expected behavior, or is it a change in the new version of iOS? If it is a change, could you please point me to a reference that documents this?

Happy to provide anything further through the Feedback report rather than here.

Thanks for the question, very interesting, the return .notDetermined is in the documentation so is a valid return.

When you call ATTrackingManager.requestTrackingAuthorization(), the system should either present the prompt and eventually return .authorized or .denied

Check the documentation https://developer.apple.com/documentation/apptrackingtransparency/attrackingmanager/authorizationstatus

The value that returns when the app can’t determine the user’s authorization status for access to app-related data for tracking the user or the device.

So the user didn’t see the prompt or is blocked by the UI? My guess is if the prompt presentation is ignored due to the app state, the completion handler may fire with the status still set to .notDetermined. Ensure you are calling the request only after the app has become fully active.

Ensure that the NSUserTrackingUsageDescription key is present in your Info.plist. While missing this key usually causes a crash when the request is made, however wanted to mention.

Albert  WWDR

Thanks Albert. Both of those are already excluded, and I should have included the details in the original post. Filed as FB24689594 with a sysdiagnose attached.

App state: the request is issued only after the app is active, and this is asserted immediately before the call.

The call is not made from didFinishLaunching, and no other permission prompt is pending at that moment.

Info.plist: NSUserTrackingUsageDescription is present in every build of both apps, and these are shipping App Store apps where the prompt worked correctly on iOS 26 and earlier.

It is not specific to our apps. On the same device, unrelated third-party App Store apps also fail to present the prompt.

Settings > Privacy & Security > Tracking > "Allow Apps to Request to Track" is ON

I can provide anything further through FB24689594 rather than here.

@gquat I don't think this is a bug as if your UI is preventing the dialog the documentation shows the API will return .notDetermined

https://developer.apple.com/documentation/apptrackingtransparency/attrackingmanager/authorizationstatus

Do you get the same results with just the relevant code in a small test project? If so, please share a link to your test project. That'll help us better understand what's going on. If you're not familiar with preparing a test project, take a look at Creating a test project.

Thanks

Albert  WWDR

Built a minimal test project and attached it to FB24689594 (ATTPromptProbe, one Swift file, no dependencies, no app UI in front of the prompt). The request is issued from a button tap, so the app is active by construction.

Result on iOS 27.0 beta 8 (24A5430a), trimmed of unrelated system logging:

system version: Version 27.0 (Build 24A5430a)
status at launch: notDetermined
---
applicationState before request: active
status before request: notDetermined
returned notDetermined after 0.002s
status after request: notDetermined
advertisingIdentifier: 00000000-0000-0000-0000-000000000000
---
applicationState before request: active
status before request: notDetermined
returned notDetermined after 0.009s
status after request: notDetermined
advertisingIdentifier: 00000000-0000-0000-0000-000000000000

Two things this settles. The call returns in 2 ms and 9 ms, which is not the timing of a prompt that was presented and dismissed: nothing is displayed at all. And the second block is the "additional call" that requestTrackingAuthorization(completionHandler:) instructs an app to make when the status is still notDetermined; it behaves identically, and so does every subsequent attempt, so the documented remedy has no effect on this device.

On the documented preconditions, the same page lists them explicitly: "Calls to the API only prompt when the application state is UIApplicationStateActive. The authorization prompt doesn't display if another permission request is pending user confirmation. Concurrent requests aren't preserved by iOS, and calls to the API through an app extension don't prompt." None of them apply here: the app is active, no other permission request is pending, this is not an app extension, and there is a single request per tap.

The same behaviour occurs in unrelated third-party App Store apps on this device, which this test project cannot influence, so whatever is preventing the presentation is not specific to our code.

The single most important finding: the only variable that changes the outcome is the Apple Account. Same device, same physical location, same build 24A5430a, same test project, no other change: signed in with an Italian Apple Account the prompt is never presented and the status stays notDetermined, while signed in with a Spanish Apple Account the prompt is presented correctly and the returned status reflects the user's choice. Nothing in the app, in its Info.plist, in the app state or in the device settings differs between the two runs.

So the question from my original post stands, and it is the only one I need answered: is it expected on iOS 27.0 that requestTrackingAuthorization() never presents the ATT prompt for an Italian Apple Account while presenting it normally for a Spanish one, leaving the status permanently at notDetermined? If this is expected behaviour, please point me to the reference that documents it, because none of the conditions listed in the requestTrackingAuthorization(completionHandler:) documentation or in https://support.apple.com/en-us/102420 apply here, and an app has no supported way to tell this state apart from "the user has not been asked yet". If it is not expected, then it is a bug, and FB24689594 contains the test project and the full details.

@gquat Thanks for providing the ATTPrompt sample to verify if it is a bug on build 24A5430a

Albert  WWDR

ATT - requestTrackingAuthorization returns notDetermined without presenting the prompt on iOS 27.0 beta
 
 
Q