Der EU-Tracking-Prompt in iOS 27.2: Was Sie ausliefern müssen
Ab iOS 27.2 und iPadOS 27.2 darf eine App in der Europäischen Union einen alternativen App Tracking Transparency-Prompt zeigen, und eine App, die in Frankreich, Deutschland, Italien, Polen oder Rumänien vertrieben wird, bekommt nur noch diese Fassung, aus dem neuen Aufruf wie aus dem alten. Das 27.2-Beta-SDK ergänzt eine Methode, requestTrackingAuthorization(usingExpandedInterface:additionalInformationAction:completionHandler:), verfügbar ab iOS 27.2 und nicht verfügbar unter macOS, tvOS, watchOS und visionOS, sowie einen optionalen Info.plist-Schlüssel, NSUserTrackingMarkdownUsageDescription. Außerhalb der EU verhält sich der neue Aufruf wie der alte, die Regel dafür, wann Sie fragen müssen, bleibt unverändert, und Nutzer in der EU dürfen ein Jahr nach ihrer letzten Antwort erneut gefragt werden. Was dafür zu tun ist, steht weiter unten. Auf dem 27.2-Beta-Simulator mit der Region USA, Deutschland, Niederlande oder Frankreich zeigte jeder Aufruf, den ich nach einem frischen Boot wiederholen konnte, den Standard-Alert, also genau den Rückfall, den Apple für ein Gerät außerhalb der EU dokumentiert; nach dieser Beleglage ist das Sheet ein Gerätetest.12345
{.answer-block}
Das Wichtigste in Kürze
- Apples Mitteilung vom 16. September. „Beginning with iOS 27.2 and iPadOS 27.2, developers will have the option to use an alternative version of the App Tracking Transparency system prompt in the EU. The requirements for when you must seek permission to track users will remain the same. Due to legal requirements, only the alternative version of the system prompt is available for apps distributed in Germany, France, Italy, Poland, and Romania.“ (Ab 27.2 dürfen Entwickler in der EU eine alternative Fassung des ATT-System-Prompts verwenden; wann Sie um Erlaubnis fragen müssen, bleibt gleich; aus rechtlichen Gründen steht für Apps, die in Deutschland, Frankreich, Italien, Polen und Rumänien vertrieben werden, nur diese Fassung zur Verfügung.)1
- Eine neue Methode. Die Datei
ATTrackingManager.him 27.2-Beta-SDK deklariertrequestTrackingAuthorizationUsingExpandedInterface:additionalInformationAction:completionHandler:mitAPI_AVAILABLE(ios(27.2)) API_UNAVAILABLE(macos, tvos, watchos, visionos). Der Kommentar im Header dazu: „This method behaves identically torequestTrackingAuthorizationWithCompletionHandler:in non-EU countries.“ (Außerhalb der EU verhält sich die Methode exakt wie die alte.)3 - In den fünf Ländern liefert auch der alte Aufruf das Sheet. Apples Referenzseite zu
requestTrackingAuthorization(completionHandler:): „In France, Germany, Italy, Poland, and Romania, the system presents a full-page sheet; otherwise, the system prompts the person with an alert.“ Und das Sheet „displays theNSUserTrackingMarkdownUsageDescriptionstring with support for rich-text elements if you include it in your app’s target configuration in Xcode.“ (Sobald der Markdown-String in der Target-Konfiguration in Xcode steht, zeigt das Sheet ihn formatiert an.) Neu hinzu kommt durch den neuen Aufruf das Sheet im Rest der EU, der „Additional Information“-Button und das Flag, das danach fragt.4 - Ein neuer Schlüssel, und der alte bleibt Pflicht.
NSUserTrackingMarkdownUsageDescriptionnimmt optionales Markdown auf, „bold or italic style“, Aufzählungen und Absatzwechsel, „but it doesn’t support underline“; laut Header muss der ursprünglicheNSUserTrackingUsageDescriptionauch für den neuen Aufruf „must be in“ der Info.plist stehen.34 - Der „Additional Information“-Button ist weder ein Ja noch ein Nein. Apples Header: „If the user taps the ‘Additional Information’ button, the prompt dismisses without recording an authorization decision, your
additionalInformationActionruns so you can surface your own privacy information, and the completion handler receivesnotDetermined.“ (Der Prompt verschwindet, ohne eine Entscheidung zu speichern, Ihre Action läuft, und der Completion Handler bekommtnotDetermined.) Ihr Code muss danach erneut fragen.3 - Erneut fragen, nur in der EU. „you can reprompt a user via the App Tracking Transparency system prompt one year after the user’s previous choice in your app’s App Tracking Transparency system prompt, regardless of whether that choice was to accept or reject“ (ein Jahr nach der letzten Wahl in Ihrer App, gleich ob sie zustimmend oder ablehnend ausfiel), sofern die Person nicht „Allow Apps to Request to Track“ abgeschaltet hat, was in der EU „Allow Apps to Request to Link Your Activity Across Companies“ heißt.2
- Was der Simulator zeigt. Auf einem iPhone 18 Pro Simulator mit der iOS-27.2-Beta-Runtime und der Region USA, Deutschland, Niederlande oder Frankreich zeigte der neue Aufruf mit
preferExpandedInterface: trueden Standard-Alert mit der ursprünglichen Verwendungsbeschreibung und ohne „Additional Information“-Button; ebensofalse, eine Nil-Action und der alte Aufruf, und die Completion wartete auf einen Tap, der Status blieb aufnotDetermined. Ein Weg zu einem sofortigennotDeterminedlässt sich dagegen jederzeit reproduzieren und ist unten beschrieben, nämlich ein Prompt, der noch aus einem früheren Start offen steht; zwei Starts mit Region Frankreich am 20. September kehrten ebenfalls sofort zurück, ohne dass ich eine Ursache festhalten konnte, und dieselben Konfigurationen zeigten bei späteren frischen Boots wieder einen Prompt.5
Was sich ändert, in Apples Worten
Apple hat die Änderung dreimal in Prosa veröffentlicht, zuerst in der Mitteilung vom 16. September, die auch den Grund nennt: „As part of agreements with select European competition authorities, Apple is introducing changes to its App Tracking Transparency framework in the European Union.“ (Im Rahmen von Vereinbarungen mit ausgewählten europäischen Wettbewerbsbehörden ändert Apple sein App Tracking Transparency-Framework in der EU.) Der Rest der Mitteilung nennt die Regel und die fünf Länder.1 Die App-Store-Richtlinienseite ergänzt die Gestalt des Prompts: „The alternative version of the App Tracking Transparency system prompt has modified formatting and language and provides you the option to use a text button labeled “Additional Information.” This allows you to surface additional information about your request to link user or device data collected from your app with user or device data collected from other companies’ apps, websites, or offline properties for targeted advertising or advertising measurement purposes, or to share user or device data with a data broker.“ (Die alternative Fassung hat ein anderes Layout und eine andere Sprache und erlaubt Ihnen einen Textbutton, über den Sie näher erläutern, warum Sie Daten aus Ihrer App mit Daten aus Apps, Websites oder Offline-Kanälen anderer Unternehmen verknüpfen oder an einen Datenhändler weitergeben wollen.)2 Und die Release Notes zur iOS- und iPadOS-27.2-Beta bringen es unter App Tracking Transparency, New Features, in einer Zeile unter: AppTrackingTransparency „now supports an alternative expanded prompt and re-prompting on a yearly basis for EU users. The alternative prompt is required for users in France, Germany, Italy, Poland, and Romania.“6
Die Richtlinienseite sagt auch, was bleibt: die Pflicht zu fragen, bevor Sie tracken, und Ihre Verantwortung für alles hinter dem Button. „Any additional information related to your request or more granular consent controls provided via the text button are entirely your responsibility. However, you cannot access the device’s advertising identifier, or otherwise collect and use device or user data from your app as described in the App Tracking Transparency system prompt, until the user has granted your app permission in that prompt.“ (Zusatzinformationen und feinere Einwilligungsschalter hinter dem Textbutton liegen vollständig in Ihrer Verantwortung; bis die Person im Prompt zugestimmt hat, dürfen Sie weder den Werbe-Identifier des Geräts lesen noch die beschriebenen Daten erheben oder nutzen.)2
Die API im 27.2-SDK
Xcode 27.2 Beta (27B5019j) trägt das iOS-27.2-SDK als Build 24B5084k, und der Header seines AppTrackingTransparency.framework ergänzt neben der Methode, die Sie schon aufrufen, eine weitere Klassenmethode:3
+ (void)requestTrackingAuthorizationUsingExpandedInterface:(BOOL)preferExpandedInterface
additionalInformationAction:(nullable void(^)(void))additionalInformationAction
completionHandler:(void(^)(ATTrackingManagerAuthorizationStatus status))completion API_AVAILABLE(ios(27.2)) API_UNAVAILABLE(macos, tvos, watchos, visionos);
In Swift heißt das ATTrackingManager.requestTrackingAuthorization(usingExpandedInterface:additionalInformationAction:completionHandler:), und Apples Referenzseite führt es unter iOS 27.2, iPadOS 27.2 und Mac Catalyst 27.2, alle mit Beta-Markierung. Der Header-Kommentar ist die ausführlichste Beschreibung der beiden Parameter, die Apple veröffentlicht hat, und vier seiner Sätze entscheiden darüber, wie Sie den Aufruf schreiben.34
- „Pass
YEStopreferExpandedInterfaceto request the alternative prompt where permitted; passNOto request the original prompt.“ (MitYESfordern Sie den alternativen Prompt dort an, wo er zulässig ist, mitNOden ursprünglichen.) Und zum Parameter selbst: „Note that in France, Germany, Italy, Poland, and Romania, due to legal requirements, only the expanded interface version of the ATT prompt will be available regardless of what is passed in topreferExpandedInterface.“ (In den fünf Ländern gibt es aus rechtlichen Gründen nur die erweiterte Fassung, unabhängig vom übergebenen Wert.) - „If you pass
niltoadditionalInformationAction, this button will not be shown.“ (Mitnilerscheint der Button nicht.) - „If the user taps the ‘Additional Information’ button, the prompt dismisses without recording an authorization decision, your
additionalInformationActionruns so you can surface your own privacy information, and the completion handler receivesnotDetermined.“ - „iOS users may be re-prompted in eligible regions on a periodic basis even after a previous authorization decision. If the user is not eligible to be re-prompted and a previous authorization decision exists, the completion handler is called with that prior decision without showing the prompt.“ (In geeigneten Regionen darf turnusmäßig erneut gefragt werden; ist jemand nicht dafür qualifiziert und liegt bereits eine Entscheidung vor, bekommt der Completion Handler diese Entscheidung ohne Prompt zurück.)
Die Referenzseite zeichnet die Regionstabelle, die der Header nur andeutet. In Frankreich, Deutschland, Italien, Polen und Rumänien: „The system displays markdown text you supply via NSUserTrackingMarkdownUsageDescription in a full-page sheet regardless of what you set for preferExpandedInterface, and includes an Additional Information button if you supply an action.“ Im Rest der Europäischen Union: „The system displays markdown text in the NSUserTrackingMarkdownUsageDescription, if you supply it. The system displays the full-page sheet if you set preferExpandedInterface to true, and includes an Additional Information button if you supply an action.“ Überall sonst: „Outside of the European Union, the system doesn’t use either parameter, and presents a system alert displaying the original NSUserTrackingUsageDescription, which is equivalent to calling requestTrackingAuthorization(completionHandler:).“ Dazu nennt die Seite die Bedingung für das regionale Verhalten: Das Gerät muss „located in a specific European Union country and signed in with an Apple Account with a specific EU country or region.“ (in einem bestimmten EU-Land sein und mit einem Apple Account aus einem bestimmten EU-Land oder einer bestimmten EU-Region angemeldet sein).4
Die Seite zum älteren Aufruf, requestTrackingAuthorization(completionHandler:), sagt inzwischen, dass die fünf Länder das Sheet auch von ihm bekommen: „In France, Germany, Italy, Poland, and Romania, the system presents a full-page sheet; otherwise, the system prompts the person with an alert.“ Und unter den Target-Eigenschaften: „In France, Germany, Italy, Poland, and Romania, the full-page sheet displays the NSUserTrackingMarkdownUsageDescription string with support for rich-text elements if you include it in your app’s target configuration in Xcode.“ Eine Version für das Sheet nennt diese Seite nicht, und sie führt die Methode ohne Beta-Markierung unter iOS 14, die 27.2-Untergrenze dafür stammt also aus den Release Notes und nicht von der Seite. Zusammengelesen: Der neue Aufruf verschafft Ihnen das Sheet im Rest der EU, den Button und ein Mitspracherecht beim Flag; in den fünf Ländern kommt das Sheet ohnehin.46
Die beiden Info.plist-Schlüssel
NSUserTrackingUsageDescription verschwindet nicht. Der Important-Hinweis des Headers zur neuen Methode wiederholt die alte Vorgabe Wort für Wort: Der Schlüssel „must be in“ der Information Property List, und die Referenzseite zum neuen Schlüssel sagt, das System falle darauf zurück, „if your app’s target properties omit this key.“34
Neu ist NSUserTrackingMarkdownUsageDescription, markiert als iOS 27.2 und iPadOS 27.2 Beta. Apples Seite: „The format of the string is Markdown text; you can apply bold or italic style, but it doesn’t support underline. You can include bullet lists and paragraph breaks.“ (Der String ist Markdown, fett oder kursiv sind möglich, Unterstreichung nicht, Aufzählungen und Absatzwechsel schon.) Regional gilt für ihn dasselbe wie für den Prompt: in den fünf Ländern immer, wenn er vorhanden ist, beim alten Aufruf wie beim neuen, im Rest der EU, wenn Sie preferExpandedInterface: true übergeben, und außerhalb der EU gar nicht. Apples beide Seiten formulieren den mittleren Fall unterschiedlich, die Seite der Methode sagt, das System zeige das Markdown, „if you supply it“, die Seite des Schlüssels ergänzt die Bedingung true; die strengere Lesart ist die des Schlüssels, und ihr folgt die Grafik oben. Der Tipp auf der Seite ist derselbe wie beim ursprünglichen Tracking-Schlüssel: „Keep the text of your description short and specific. The system displays your app name in the prompt so you don’t need to include it in the string.“ (Kurz und konkret formulieren; der App-Name steht ohnehin im Prompt.)4
Der jährliche erneute Prompt
Die Richtlinienseite formuliert die Regel für die EU: „you can reprompt a user via the App Tracking Transparency system prompt one year after the user’s previous choice in your app’s App Tracking Transparency system prompt, regardless of whether that choice was to accept or reject. A user cannot be re-prompted if they have disabled “Allow Apps to Request to Track” (renamed to “Allow Apps to Request to Link Your Activity Across Companies” in the EU) in their device’s Settings.“2 Der Header beschreibt den Mechanismus aus Sicht der App, und das zweimal. Zur älteren Methode: „In eligible regions, iOS users may be re-prompted after a year has passed since their last decision; otherwise the system remembers the user’s choice and doesn’t prompt again unless the user uninstalls and then reinstalls the app on the device.“ Zur neuen: Wer nicht qualifiziert ist und bereits entschieden hat, bekommt diese Entscheidung vom Completion Handler zurück, „without showing the prompt“, ein zweiter Aufruf ist also unbedenklich, und ob ein Prompt erscheint, entscheidet das System, nicht Ihr Code.3 Was in keinem der Dokumente steht, ist ein Weg, vor dem Aufruf zu erfragen, ob jemand qualifiziert ist; der Aufruf ist die Abfrage.
Was der 27.2-Beta-Simulator tut
Ich habe eine einzelne SwiftUI-Datei als Probe gegen das iPhoneSimulator-27.2-SDK gebaut, mit beiden Schlüsseln in der Info.plist, NSUserTrackingUsageDescription auf „Probe: the standard usage description.“ und NSUserTrackingMarkdownUsageDescription auf ein fettes Wort, eine kursive Wendung und eine zweizeilige Aufzählung, und sie auf einem iPhone 18 Pro Simulator mit der iOS-27.2-Beta-Runtime (24B5084k) laufen lassen, vor jedem Lauf den Simulator neu gebootet und die Region über die globale Einstellung AppleLocale gesetzt. Sechs Läufe am 19. September: USA, Deutschland und Niederlande mit preferExpandedInterface: true und einer Action; Deutschland mit false; Frankreich mit true und ohne Action; Deutschland mit dem älteren Aufruf.5
Am 19. September kam in jedem Lauf dasselbe heraus: der Standard-Alert mit dem Titel „Allow “ATTProbe” to track your activity across other companies’ apps and websites?“, darin die ursprüngliche Verwendungsbeschreibung, dazu „Ask App Not to Track“ und „Allow“ und kein dritter Button. Der Markdown-Text erschien nie, innerhalb der sechzehn Sekunden langen Aufzeichnung feuerte kein Completion Handler, und in den fünf erweiterten Läufen las trackingAuthorizationStatus bei jeder Prüfung im Drei-Sekunden-Takt zwölf Sekunden lang notDetermined; der Lauf mit dem älteren Aufruf protokollierte seine mode=legacy-Zeile und danach nichts mehr und wartete genauso.5 Genau das sagt Apples Referenzseite für ein Gerät voraus, das sich nicht in der EU befindet, und die Regionseinstellung des Simulators ist ein Locale, kein Ort; das Sheet, der Markdown-Text und der Button sind ein Gerätetest mit einem Apple Account aus einer EU-Region.
Am 20. September nach einem Neustart des Macs wiederholt, zeigten die Läufe für USA, Deutschland und Niederlande wie zuvor einen Prompt, der Lauf für Frankreich aber gab in derselben Sekunde wie seine Anfrage notDetermined an den Completion Handler zurück und zeigte keinen Alert. Zwei weitere Starts mit Frankreich an diesem Morgen taten dasselbe, ein dritter zeigte einen Prompt; von den drei sofortigen Rückgaben fiel nur die um 7:23 mit etwas zusammen, das die Dateien festhalten, nämlich ein zweites Skript, das die Probe darunter neu installierte, und für die um 7:21 und 7:26 ist keine Ursache festgehalten. Ohne dass sonst etwas den Simulator berührte, zeigten drei weitere Starts nach frischem Boot, Frankreich mit Action, Frankreich ohne und die USA, alle einen Prompt und warteten. Dieselben Frankreich-Konfigurationen zeigten bei späteren frischen Boots also einen Prompt, und ich habe keine Frankreich-Regel zu berichten, nur eine Warnung: Ein sofortiges notDetermined ohne Alert auf einem Beta-Simulator ist ein Ergebnis, das man nach einem frischen Boot wiederholen sollte, bevor man es glaubt.5

Der 27.2-Beta-Simulator mit der Region Deutschland nach dem Aufruf mit erweiterter Oberfläche am 19. September: der Standard-Alert, die ursprüngliche Beschreibung, zwei Buttons. Dieses Bild ist der eine Export, der vor dem Neustart entstand, der die übrigen Dateien dieses Tages mitgenommen hat.
Der Irrweg, der sich jederzeit reproduzieren lässt, ist ein offener Prompt. Probe starten, den Alert unbeantwortet lassen, die App deinstallieren und neu installieren, dann erneut starten: Der erweiterte Aufruf des zweiten Starts gab in derselben Sekunde wie seine Anfrage notDetermined an den Completion Handler zurück, während der Alert auf dem Bildschirm stehen blieb, und ein dritter Start mit dem älteren Aufruf tat dasselbe, legacy-request status=0 (notDetermined) innerhalb einer Sekunde. Das ist der Fall, den der Header beschreibt: „The authorization prompt doesn’t display if another permission request is pending user confirmation. Concurrent requests aren’t preserved by iOS.“ (Steht eine andere Berechtigungsanfrage noch offen, erscheint der Prompt nicht, und gleichzeitige Anfragen bewahrt iOS nicht auf.) Danach folgt die Anweisung, trackingAuthorizationStatus auf notDetermined zu prüfen, „to determine if you need to make an additional call,“ und die Seite des älteren Aufrufs führt den Fall unter den Situationen auf, in denen das System Ihren Completion Handler ohne Prompt ausführt: „An existing permission request is pending.“345 Ein frischer Boot räumt das weg. Fragt Ihre App von mehr als einer Stelle aus oder nach einem Zeitplan erneut, dann ist dieses sofortige notDetermined genau das, was der zweite Aufrufer bekommt.
Was Sie ausliefern sollten, Schritt für Schritt
- Behalten Sie
NSUserTrackingUsageDescription. Der Schlüssel bleibt Pflicht, und sein Text ist das, was jeder Mensch außerhalb der EU und jeder in der EU ohne den Markdown-Schlüssel zu sehen bekommt.34 - Ergänzen Sie
NSUserTrackingMarkdownUsageDescriptionmit derselben Bitte in kurzem Markdown: fett oder kursiv, Aufzählungen, Absatzwechsel, keine Unterstreichung, kein App-Name.4 - Sichern Sie den neuen Aufruf mit einer Verfügbarkeitsprüfung ab und behalten Sie den alten als Rückfall: ab iOS 27.2
requestTrackingAuthorization(usingExpandedInterface:additionalInformationAction:completionHandler:), davorrequestTrackingAuthorization(completionHandler:). Übergeben Sietrue, um das Sheet im Rest der EU zu bekommen; die fünf Länder ignorieren das Flag. Die Form, die gegen das 27.2-SDK bei einer iOS-26-Untergrenze typprüft:345
#if os(iOS)
if #available(iOS 27.2, *) {
ATTrackingManager.requestTrackingAuthorization(usingExpandedInterface: true,
additionalInformationAction: showPrivacyDetails) { status in
handle(status)
}
} else {
ATTrackingManager.requestTrackingAuthorization { status in handle(status) }
}
#endif
- Entscheiden Sie über den Button. Übergeben Sie eine Action nur, wenn Sie eine Seite oder einen Screen zu zeigen haben. Läuft die Action, behandeln Sie den Status als
notDetermined, zeigen Ihre Informationen und dürfen dann, in den Worten der Richtlinienseite, „you can redirect the user back to the App Tracking Transparency system prompt for your app to ensure their choice is recorded,“ (die Person zurück zum ATT-System-Prompt führen, damit ihre Wahl festgehalten wird), aber „you should not redirect users to your ATT prompt if they have opted out of all relevant legal consent choices in the screen or page surfaced.“ (Wer auf dem gezeigten Screen alle einschlägigen Einwilligungen abgelehnt hat, gehört nicht zurück zum Prompt.)23 - Planen Sie den erneuten Prompt als Aufruf, nicht als Timer. In der EU erfahren Sie nur durch einen weiteren Aufruf, ob ein Jahr vergangen ist; ist die Person nicht qualifiziert, liefert der Completion Handler die frühere Entscheidung.23
- Testen Sie auf einem Gerät mit einem Account aus einer EU-Region. Wann immer der Simulator einen Prompt zeigte, in jeder Region und nach frischen Boots, war es der Standard-Alert und nie das Sheet, und Apples Bedingung lautet Geräteort plus Apple-Account-Region, das ganzseitige Sheet ist also ein Gerätetest.45
- Prüfen Sie das Mac-Target. Der Header markiert die Methode als nicht verfügbar unter macOS, tvOS, watchOS und visionOS, eine gemeinsam genutzte Aufrufstelle braucht deshalb
#if os(iOS)um den Aufruf und darinif #available(iOS 27.2, *); eine Verfügbarkeitsprüfung allein lässt sich weiterhin nicht kompilieren, mit'requestTrackingAuthorization(usingExpandedInterface:additionalInformationAction:completionHandler:)' is unavailable in macOS, wie Fußnote 5 festhält. Der Eintrag Mac Catalyst 27.2 auf der Referenzseite undAPI_UNAVAILABLE(macos)im Header beschreiben dieselbe Linie von zwei Seiten: Für#if os(iOS)zählt Catalyst als iOS.345
Häufige Fragen
Muss ich den alternativen Prompt übernehmen?
In Frankreich, Deutschland, Italien, Polen und Rumänien ist der alternative Prompt laut Apples Mitteilung die einzige Fassung, die dort vertriebene Apps bekommen, und unter 27.2 liefern ihn beide Aufrufe: Der neue zeigt dort das ganzseitige Sheet „regardless of what you set for preferExpandedInterface“, und Apples Seite zum älteren Aufruf sagt „In France, Germany, Italy, Poland, and Romania, the system presents a full-page sheet; otherwise, the system prompts the person with an alert.“, mit dem Markdown-Schlüssel, „if you include it in your app’s target configuration in Xcode.“ Der neue Aufruf verschafft Ihnen das Sheet im Rest der EU, den „Additional Information“-Button und ein Mitspracherecht beim Flag.1346
Ändert sich dadurch, wann ich um Erlaubnis fragen muss?
Nein. Apple: „The requirements for when you must seek permission to track users will remain the same.“ (Die Vorgaben dazu bleiben unverändert.)1
Ersetzt der Markdown-Schlüssel NSUserTrackingUsageDescription?
Nein. Der ursprüngliche Schlüssel bleibt für beide Aufrufe Pflicht, und das System nutzt ihn immer dann, wenn der Markdown-Schlüssel fehlt oder das Gerät außerhalb der EU ist.34
Darf ich erneut fragen, nachdem jemand Nein gesagt hat?
In der EU ja, ein Jahr nach der letzten Wahl, „regardless of whether that choice was to accept or reject“ (gleich ob zustimmend oder ablehnend), sofern die Person nicht die Einstellung abgeschaltet hat, die Apple in der EU in „Allow Apps to Request to Link Your Activity Across Companies“ umbenennt.2
Gibt es die neue API unter macOS oder visionOS?
Nein. Der Header des 27.2-SDK markiert sie mit API_UNAVAILABLE(macos, tvos, watchos, visionos); die Referenzseite führt iOS, iPadOS und Mac Catalyst 27.2.34
Quellen
-
Apple, Updates to App Tracking Transparency in the European Union, Developer News, 16. September 2026, zitiert. ↩↩↩↩↩
-
Apple, User privacy and data use, Abschnitt „ATT in the European Union“ und die Frage „Can I provide additional information and consent controls with my app’s ATT prompt implementation“, abgerufen am 19. September 2026, zitiert. ↩↩↩↩↩↩↩↩
-
AppTrackingTransparency.framework/Headers/ATTrackingManager.him iPhoneOS-27.2-SDK (ProductBuildVersion24B5084k,ProductVersion27.2) in Xcode 27.2 Beta (27B5019j), gelesen am 19. September 2026: die Deklaration vonrequestTrackingAuthorizationUsingExpandedInterface:additionalInformationAction:completionHandler:mitAPI_AVAILABLE(ios(27.2)) API_UNAVAILABLE(macos, tvos, watchos, visionos)und ihr Dokumentationskommentar, zitiert; der Kommentar der älteren Methode zum erneuten Prompt und zu offenen Anfragen, zitiert. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, requestTrackingAuthorization(usingExpandedInterface:additionalInformationAction:completionHandler:) und NSUserTrackingMarkdownUsageDescription, Dokumentations-JSON abgerufen am 19. September 2026: Plattformverfügbarkeit iOS 27.2, iPadOS 27.2, Mac Catalyst 27.2 (Methode) sowie iOS 27.2, iPadOS 27.2 (Schlüssel), alle als Beta markiert; die Abschnitte „Display a full-page sheet“ und „Discussion“, zitiert. Apple, requestTrackingAuthorization(completionHandler:), Dokumentations-JSON abgerufen am 21. September 2026: Plattformverfügbarkeit iOS 14.0, iPadOS 14.0, Mac Catalyst 14.0, macOS 11.0, tvOS 14.0 und visionOS 1.0 ohne Beta-Markierung; der Discussion-Satz zu den fünf Ländern, der Satz zum Markdown-Schlüssel unter „Configure the app’s target properties“ und der Punkt zur offenen Anfrage in der Liste der Fälle, in denen „the system doesn’t display the prompt“, zitiert. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩
-
Läufe des Autors auf macOS 26.6.2 (25G83), 19. und 20. September 2026. ATTProbe: eine SwiftUI-App aus einer Datei auf dem Lebenszyklus
AppundWindowGroup, gebaut mitxcrun swiftc -sdk <iPhoneSimulator27.2.sdk> -target arm64-apple-ios26.0-simulator -parse-as-libraryunter Xcode 27.2 Beta (27B5019j), mit einer Info.plist, dieNSUserTrackingUsageDescription„Probe: the standard usage description.“ undNSUserTrackingMarkdownUsageDescription„Probe: Markdown description with a bullet list:“ gefolgt von zwei Listenpunkten trägt. Eine frühere UIKit-Fassung derselben Probe ohne Scene-Manifest, gegen dasselbe SDK gebaut, lief beim Start in einEXC_BREAKPOINT, bevor sie die Anfrage erreichte; ich habe sie ersetzt, statt der Sache nachzugehen. Gerät: ein iPhone 18 Pro Simulator, angelegt mitsimctl createaufcom.apple.CoreSimulator.SimRuntime.iOS-27-2(24B5084k), gesteuert mit demsimctlaus Xcode 27.2 Beta; Region gesetzt mitsimctl spawn <udid> defaults write "Apple Global Domain" AppleLocale -string <locale>;simctl shutdownundsimctl bootvor jedem Lauf; die App gestartet mitsimctl launch --console-ptyund ihreprint-Zeilen aufgezeichnet; ein Screenshot mitsimctl io <udid> screenshotsieben Sekunden nach dem Start, das Ende der Aufzeichnung neun Sekunden später. Läufe:en_USerweitert mit Action;de_DEerweitert mit Action;de_DEder ältererequestTrackingAuthorization(completionHandler:);de_DEmitpreferExpandedInterface: false;nl_NLerweitert mit Action;fr_FRerweitert mit einer Nil-Action. Am 19. September druckte das Log in jedem Laufregion=<code> status-before=0und innerhalb der sechzehn Sekunden langen Aufzeichnung keine Completion-Zeile; in den fünf erweiterten Läufen zusätzlichstatus-now=0nach drei, sechs, neun und zwölf Sekunden, eine Prüfung, die der Zweig der Probe für den älteren Aufruf nicht vornimmt; jeder Screenshot zeigte den Standard-Alert (diese Dateien und die einer früheren Serie vom 19. September, die das Verhalten bei offenem Prompt zuerst zeigte, überlebten einen Neustart des Macs nicht, der das temporäre Verzeichnis der Sitzung leerte, die Ergebnisse vom 19. September sind hier deshalb nach der damals gelesenen Konsolenausgabe festgehalten). 20. September, erste Serie, dasselbe Skript mit frischem Boot vor jedem Lauf:en_US7:16:37,de_DE7:17:42, der ältere Aufruf mitde_DE7:18:42,de_DEmitfalse7:19:33 undnl_NL7:20:26, jeweils ohne Completion-Zeile und mitstatus-now=0bei jeder Prüfung, die die Probe vornimmt, jeder Screenshot der Standard-Alert;fr_FRohne Action, 7:21:04, druckteexpanded-request status=0 (notDetermined)um 7:21:05, in derselben Sekunde wie seinemode=-Zeile, und sein Screenshot zeigt das Log der Probe und keinen Alert. Ein zweiter Simulator, das iPhone Duo, war um 7:13 gebootet und blieb während dieser Serie an; nichts in den Dateien hält fest, dass sonst etwas einen der beiden Simulatoren berührt hätte. Zweite Serie, 7:23 bis 7:27, in ihren ersten drei Starts überlappend mit einem ersten Versuch der Sequenz für den offenen Prompt, der zweimal an Simulatorfehlern scheiterte:fr_FRohne Action, 7:23:57, sofortnotDetermined;fr_FRmit Action, 7:24:09, von jenem anderen Skript gestartet, mit Prompt und ohne Completion-Zeile;de_DEohne Action, 7:24:52, mit Prompt;fr_FRmit Action, 7:26:03, sofortnotDetermined;en_USohne Action, 7:27:43, mit Prompt; ein Start mitfr_FRum 7:23:09 scheiterte, während der Simulator herunterfuhr, und das Log von 7:23:57 endet nach sechs Sekunden, weil das andere Skript die Probe neu installierte. Ich führe das der Vollständigkeit halber auf und gebe ihm kein Gewicht. Dritte Serie, ein Lauf nach dem anderen, ohne dass sonst etwas den Simulator berührte, und mit frischem Boot vor jedem:fr_FRmit Action 7:40:06,fr_FRohne Action 7:40:45 und 7:41:22 mit der Locale-Zeichenfolgeus_US(die Probe druckteregion=US), alle mit Prompt, ohne Completion-Zeile und mitstatus-now=0bei jeder Prüfung. Fall des offenen Prompts, dasselbe Skript, ein Boot:de_DEum 7:42:00 mit Prompt und ohne Completion-Zeile; nachsimctl uninstallundsimctl installbei unbeantwortetem Alert druckte ein Start um 7:42:18 um 7:42:19expanded-request status=0 (notDetermined), während sein Screenshot den Alert auf dem Bildschirm zeigt; ein dritter Start mit dem älteren Aufruf um 7:42:40 druckte um 7:42:41legacy-request status=0 (notDetermined). Das Snippet aus Schritt 3 bestand mitshowPrivacyDetailsundhandle(_:)als Stub-Funktionenswiftc -typecheckgegen das iPhoneSimulator-27.2-SDK mit-target arm64-apple-ios26.0-simulator; dieselbe Datei ohne die#if os(iOS)-Zeilen, gegen das macOS-SDK in Xcode 27.2 Beta mit-target arm64-apple-macos15.0kompiliert, scheiterte miterror: 'requestTrackingAuthorization(usingExpandedInterface:additionalInformationAction:completionHandler:)' is unavailable in macOS. ↩↩↩↩↩↩↩↩↩ -
Apple, iOS & iPadOS 27.2 Beta Release Notes, über den Dokumentations-JSON-Endpunkt am 17. und 19. September 2026 abgerufen, App Tracking Transparency, New Features, zitiert. ↩↩↩