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

Retested on iOS 27 RC (24A435) with the same test project: the behavior is unchanged.

With an Italian Apple account the prompt is never presented and the status remains "notDetermined", with a Spanish account it is presented normally.

Since this is the release candidate, whatever the cause turns out to be, it will reach users on the upcoming public release, I would appreciate a statement on whether this is expected.

@gquat thanks for providing that, please include the latest information in the FB number for the team as they don't review the forums.

Thanks

Albert  WWDR

Hi, I'm experiencing the same behaviour in many store apps (including mine). ATT is never presented and status is "notDetermined". I'm using an Italian account

Still present in official release. Filled a bug on 27 August and still no replies:

FB24538222

Same bug on Instagram

We’re facing the same issue with our app and several others, like Instagram.

This problem persists regardless of whether the app is built with Xcode 26 or Xcode 27. On simulators works.

@marcolg97 Thanks for the post, if you have a simple focused sample you can share showing the issue and upload it into a filed bug, please share that FB number here for me to track.

If you have any questions about filing a bug report, take a look at Bug Reporting: How and Why?

Albert  WWDR

As per FB24538222 reply from Apple, the issue seems to be totally resolved on iOS 27.2 beta.

Thanks for the support

Already filled by with FB24689594.

It’s not a very complex issue: with an Italian Apple ID, calling ATTrackingManager.requestTrackingAuthorization() when ATTrackingManager.trackingAuthorizationStatus is notDetermined does not open the OS tracking permission popup.

Just to provide some additional context: this starts working again with iOS 27.2 Beta 1.

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