O aviso de rastreamento da UE no iOS 27.2: o que publicar
A partir do iOS 27.2 e do iPadOS 27.2, um app na União Europeia pode exibir um aviso alternativo de App Tracking Transparency, e um app distribuído na França, na Alemanha, na Itália, na Polônia ou na Romênia recebe só essa versão, tanto pela chamada nova quanto pela antiga. O SDK do beta 27.2 acrescenta um método, requestTrackingAuthorization(usingExpandedInterface:additionalInformationAction:completionHandler:), disponível no iOS 27.2 e indisponível no macOS, tvOS, watchOS e visionOS, e uma chave opcional do Info.plist, NSUserTrackingMarkdownUsageDescription. Fora da UE a chamada nova se comporta como a antiga, a regra sobre quando você precisa pedir permissão não muda, e usuários da UE podem ser perguntados de novo um ano depois da última resposta. Os passos para publicar estão mais abaixo. No simulador do beta 27.2, com a região definida como Estados Unidos, Alemanha, Países Baixos ou França, toda chamada que consegui repetir depois de um boot limpo exibiu o alerta padrão, que é justamente o comportamento reserva que a Apple documenta para um dispositivo fora da UE; com essa evidência, a folha continua sendo um teste de dispositivo.12345
{.answer-block}
TL;DR
- O comunicado da Apple, 16 de setembro. “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.” (a partir do iOS 27.2 e do iPadOS 27.2 dá para usar uma versão alternativa do aviso de sistema do App Tracking Transparency na UE; os requisitos sobre quando é preciso pedir permissão seguem os mesmos e, por exigência legal, só essa versão alternativa está disponível para apps distribuídos na Alemanha, na França, na Itália, na Polônia e na Romênia).1
- Um método novo. O
ATTrackingManager.hdo SDK do beta 27.2 declararequestTrackingAuthorizationUsingExpandedInterface:additionalInformationAction:completionHandler:comAPI_AVAILABLE(ios(27.2)) API_UNAVAILABLE(macos, tvos, watchos, visionos). O comentário no header: “This method behaves identically torequestTrackingAuthorizationWithCompletionHandler:in non-EU countries.” (fora da UE o método se comporta igual ao antigo).3 - A chamada antiga também exibe a folha nos cinco países. A página de referência da Apple para
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.” (nesses cinco países o sistema apresenta uma folha de tela cheia; no resto, um alerta), e a folha “displays theNSUserTrackingMarkdownUsageDescriptionstring with support for rich-text elements if you include it in your app’s target configuration in Xcode.” O que a chamada nova acrescenta é a folha no restante da UE, o botão “Additional Information” e o parâmetro que a pede.4 - Uma chave nova, e a antiga continua obrigatória.
NSUserTrackingMarkdownUsageDescriptioné Markdown opcional: “bold or italic style,” listas com marcadores e quebras de parágrafo, “but it doesn’t support underline”; o header diz que oNSUserTrackingUsageDescriptionoriginal “must be in” (precisa estar no) Info.plist também para a chamada nova.34 - O botão “Additional Information” não é um sim nem um não. O header da Apple: “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.” (ao tocá-lo, o aviso se fecha sem registrar decisão alguma, sua ação roda e o completion handler recebenotDetermined). Seu código precisa perguntar de novo depois.3 - Perguntar de novo, só na UE. “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,” ou seja, um ano depois da escolha anterior, tenha sido aceitar ou recusar, a menos que a pessoa tenha desligado “Allow Apps to Request to Track,” que na UE passa a se chamar “Allow Apps to Request to Link Your Activity Across Companies.”2
- O que o simulador mostra. Num simulador de iPhone 18 Pro sobre o runtime do beta do iOS 27.2, com a região definida como Estados Unidos, Alemanha, Países Baixos ou França, a chamada nova com
preferExpandedInterface: trueapresentou o alerta padrão com a descrição de uso original e sem botão “Additional Information”; o mesmo comfalse, com uma ação nula e com a chamada antiga, e o completion handler ficou esperando um toque com o status emnotDetermined. Existe um caminho para umnotDeterminedimediato que se reproduz sob demanda e está documentado mais abaixo: um aviso ainda pendente de uma execução anterior. Duas execuções com a França em 20 de setembro também retornaram na hora, sem nenhuma causa que eu pudesse registrar, e essas mesmas configurações exibiram o aviso em boots limpos posteriores.5
O que mudou, nas palavras da Apple
A Apple publicou a mudança em prosa três vezes. A primeira foi o comunicado de 16 de setembro, que ainda dá o motivo: “As part of agreements with select European competition authorities, Apple is introducing changes to its App Tracking Transparency framework in the European Union.” (as mudanças vêm como parte de acordos com determinadas autoridades europeias de concorrência). O resto do comunicado dá a regra e os cinco países.1 A página de políticas da App Store acrescenta o formato do aviso: “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.”2 E as notas de versão do beta do iOS e do iPadOS 27.2, em App Tracking Transparency, New Features, resumem tudo em uma linha: 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.” (agora há suporte a um aviso expandido alternativo e à repetição anual da pergunta para usuários da UE, e esse aviso alternativo é obrigatório na França, na Alemanha, na Itália, na Polônia e na Romênia).6
A página de políticas também diz o que não sai do lugar: a obrigação de perguntar antes de rastrear e a sua responsabilidade por tudo que estiver atrás do botão. “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.”2
A API no SDK 27.2
O Xcode 27.2 beta (27B5019j) carrega o SDK do iOS 27.2 como o build 24B5084k, e o header do seu AppTrackingTransparency.framework acrescenta um método de classe ao lado daquele que você já chama: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);
Em Swift isso é ATTrackingManager.requestTrackingAuthorization(usingExpandedInterface:additionalInformationAction:completionHandler:), e a página de referência da Apple marca o método como iOS 27.2, iPadOS 27.2 e Mac Catalyst 27.2, tudo em beta. O comentário do header é a descrição mais completa dos dois parâmetros que a Apple publicou, e quatro frases dele decidem como você escreve a chamada.34
- “Pass
YEStopreferExpandedInterfaceto request the alternative prompt where permitted; passNOto request the original prompt.” E sobre o parâmetro: “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.” (nesses cinco países só existe a versão expandida, independentemente do valor passado). - “If you pass
niltoadditionalInformationAction, this button will not be shown.” (se você passarnil, o botão não aparece). - “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.” (o aviso se fecha sem registrar decisão e o completion handler recebenotDetermined). - “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.” (nas regiões elegíveis a pergunta pode voltar periodicamente; se a pessoa não for elegível e já houver uma decisão anterior, o completion handler devolve essa decisão sem exibir nada).
A página de referência desenha a tabela regional que o header apenas sugere. Na França, na Alemanha, na Itália, na Polônia e na Romênia: “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.” No restante da União Europeia: “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.” Em todo o resto do mundo: “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:).” A página ainda dá a condição desse comportamento regional: o dispositivo precisa estar “located in a specific European Union country and signed in with an Apple Account with a specific EU country or region.” (localizado num país específico da União Europeia e com sessão iniciada numa Apple Account de país ou região da UE).4
A página da chamada antiga, requestTrackingAuthorization(completionHandler:), agora diz que os cinco países recebem a folha por ela também: “In France, Germany, Italy, Poland, and Romania, the system presents a full-page sheet; otherwise, the system prompts the person with an alert.” e, nas propriedades do target, “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.” Essa página não dá versão nenhuma para a folha e lista o método no iOS 14 sem marca de beta, então o piso de 27.2 vem da nota de versão, e não da página. Lidas juntas: a chamada nova compra a folha no restante da UE, o botão e uma palavra sobre o parâmetro; nos cinco países a folha chega de qualquer jeito.46
As duas chaves do Info.plist
NSUserTrackingUsageDescription não vai embora. A nota “Important” do header sobre o método novo repete a exigência antiga palavra por palavra: a chave “must be in” (precisa estar na) Information Property List, e a página de referência da chave nova diz que o sistema recorre a ela “if your app’s target properties omit this key.” (se as propriedades do target omitirem a chave nova).34
NSUserTrackingMarkdownUsageDescription é a novidade, marcada como iOS 27.2 e iPadOS 27.2 beta. A página da Apple: “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.” (o formato é Markdown, com negrito ou itálico, listas com marcadores e quebras de parágrafo, mas sem sublinhado). A chave é regional do mesmo jeito que o aviso: usada nos cinco países sempre que estiver presente, tanto pela chamada antiga quanto pela nova; usada no restante da UE quando você passa preferExpandedInterface: true; e ignorada fora da UE. As duas páginas da Apple redigem o caso do meio de formas diferentes: a do método diz que o sistema exibe o Markdown “if you supply it” (se você fornecer) e a da chave acrescenta a condição de passar true. A página da chave é a leitura mais estrita e é a que o diagrama acima segue. A dica da Apple nessa página é a mesma que ela dá na página da chave de rastreamento original: “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.”4
A repetição anual do aviso
A página de políticas fixa a regra para a UE: “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 O header descreve o mecanismo pelo lado do app, duas vezes. Sobre o método antigo: “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.” Sobre o novo: um usuário não elegível que já tenha uma decisão anterior recebe essa decisão de volta pelo completion handler “without showing the prompt,” então fazer uma segunda chamada é seguro, e quem decide se algum aviso aparece é o sistema, não o seu código.3 O que nenhum dos dois documentos dá é um jeito de perguntar se alguém é elegível antes de chamar: a chamada é a consulta.
O que o simulador do beta 27.2 faz
Construí um app de sondagem em SwiftUI de arquivo único contra o SDK do iPhoneSimulator 27.2, com as duas chaves no Info.plist: NSUserTrackingUsageDescription com o valor “Probe: the standard usage description.” e NSUserTrackingMarkdownUsageDescription com uma palavra em negrito, uma frase em itálico e uma lista de dois itens. Rodei o app num simulador de iPhone 18 Pro sobre o runtime do beta do iOS 27.2 (24B5084k), reiniciando o simulador antes de cada execução e definindo a região pela preferência global AppleLocale. Seis execuções em 19 de setembro: Estados Unidos, Alemanha e Países Baixos com preferExpandedInterface: true e uma ação; Alemanha com false; França com true e sem ação; Alemanha com a chamada antiga.5
Em 19 de setembro todas as execuções deram a mesma coisa: o alerta padrão, intitulado “Allow “ATTProbe” to track your activity across other companies’ apps and websites?”, exibindo a descrição de uso original, com “Ask App Not to Track” e “Allow” e sem um terceiro botão. O texto em Markdown nunca apareceu, nenhum completion handler disparou dentro da captura de dezesseis segundos e, nas cinco execuções expandidas, trackingAuthorizationStatus marcou notDetermined em cada verificação de três segundos ao longo de doze segundos; a execução da chamada antiga registrou a linha mode=legacy e mais nada depois dela, e esperou do mesmo jeito.5 É exatamente isso que a página de referência da Apple prevê para um dispositivo que não está localizado na UE, e o ajuste de região do simulador é uma configuração de idioma e região, não uma localização: a folha, o texto em Markdown e o botão continuam sendo um teste de dispositivo com uma Apple Account de região da UE.
Refeitas em 20 de setembro, depois de uma reinicialização do Mac, as mesmas seis execuções exibiram o aviso para Estados Unidos, Alemanha e Países Baixos como antes, mas a execução da França devolveu notDetermined ao completion handler no mesmo segundo da solicitação e não exibiu alerta nenhum. Mais duas execuções com a França naquela manhã fizeram o mesmo e uma terceira exibiu o aviso; dos três retornos imediatos, só o das 7:23 coincide com alguma coisa que os arquivos registrem, um segundo script reinstalando o app de sondagem por baixo, e os das 7:21 e 7:26 não têm causa registrada. Sem mais nada tocando o simulador, outras três execuções com boot limpo, França com ação, França sem ela e Estados Unidos, exibiram o aviso e esperaram. Ou seja, essas mesmas configurações da França exibiram o aviso em boots limpos posteriores, e não tenho nenhuma regra sobre a França para relatar, só um alerta de cautela: um notDetermined imediato e sem alerta num simulador de beta é um resultado a repetir num boot limpo antes de acreditar nele.5

O simulador do beta do iOS 27.2, com a região definida como Alemanha, depois da chamada com interface expandida em 19 de setembro: o alerta padrão, a descrição original, dois botões. Esta imagem é a única exportação feita antes da reinicialização que levou o resto dos arquivos daquele dia.
O caminho errado que de fato se reproduz sob demanda é um aviso pendente. Abra o app de sondagem, deixe o alerta sem resposta, desinstale e reinstale o app e abra de novo: a chamada expandida da segunda execução devolveu notDetermined ao completion handler no mesmo segundo da solicitação enquanto o alerta continuava na tela, e uma terceira execução usando a chamada antiga fez o mesmo, legacy-request status=0 (notDetermined) em menos de um segundo. É o caso que o header descreve: “The authorization prompt doesn’t display if another permission request is pending user confirmation. Concurrent requests aren’t preserved by iOS,” (o aviso não aparece se outra solicitação de permissão estiver aguardando confirmação, e o iOS não preserva solicitações concorrentes), seguido da instrução de verificar se trackingAuthorizationStatus está em notDetermined “to determine if you need to make an additional call,” e a página da chamada antiga lista esse caso entre as situações em que o sistema roda o seu completion handler sem exibir aviso: “An existing permission request is pending.”345 Um boot limpo resolve. Se o seu app pergunta a partir de mais de um lugar, ou volta a perguntar em um cronograma, é esse notDetermined imediato que o segundo chamador recebe.
O que publicar, passo a passo
- Mantenha
NSUserTrackingUsageDescription. Ela segue obrigatória e é o texto que todo usuário fora da UE e todo usuário da UE sem a chave de Markdown vai ver.34 - Adicione
NSUserTrackingMarkdownUsageDescriptioncom o mesmo pedido em Markdown curto: negrito ou itálico, marcadores, quebras de parágrafo, nada de sublinhado e sem o nome do app.4 - Condicione a chamada nova à disponibilidade e mantenha a antiga como reserva: no iOS 27.2 e posteriores chame
requestTrackingAuthorization(usingExpandedInterface:additionalInformationAction:completionHandler:); antes disso,requestTrackingAuthorization(completionHandler:). Passetruepara conseguir a folha no restante da UE; os cinco países ignoram o parâmetro. O formato que passa na checagem de tipos contra o SDK 27.2 com piso no iOS 26: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
- Decida sobre o botão. Passe uma ação só se você tiver uma página ou uma tela para mostrar. Quando a ação rodar, trate o status como
notDetermined, mostre a sua informação e, nas palavras da página de políticas, “you can redirect the user back to the App Tracking Transparency system prompt for your app to ensure their choice is recorded,” (você pode levar a pessoa de volta ao aviso de sistema para que a escolha dela fique registrada), mas “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.”23 - Planeje a repetição como uma chamada, não como um cronômetro. Chamar de novo na UE é como você descobre se um ano se passou; o completion handler devolve a decisão anterior quando a pessoa não é elegível.23
- Teste num dispositivo com conta de região da UE. Sempre que o simulador exibiu um aviso, em toda região e em boots limpos, foi o alerta padrão e nunca a folha, e a condição da Apple é a localização do dispositivo mais a região da Apple Account, então a folha de tela cheia é um teste de dispositivo.45
- Confira o target do Mac. O header marca o método como indisponível no macOS, tvOS, watchOS e visionOS, então um ponto de chamada compartilhado precisa de
#if os(iOS)em volta da chamada comif #available(iOS 27.2, *)dentro dele; uma checagem de disponibilidade sozinha continua falhando na compilação, com'requestTrackingAuthorization(usingExpandedInterface:additionalInformationAction:completionHandler:)' is unavailable in macOS, como a nota 5 registra. A entrada de Mac Catalyst 27.2 da página de referência e oAPI_UNAVAILABLE(macos)do header descrevem a mesma linha por dois lados: para o#if os(iOS), o Catalyst conta como iOS.345
Perguntas frequentes
Preciso adotar o aviso alternativo?
Na França, na Alemanha, na Itália, na Polônia e na Romênia o aviso alternativo é a única versão disponível para os apps distribuídos ali, conforme o comunicado da Apple, e no 27.2 você o obtém por qualquer uma das duas chamadas: a nova exibe ali a folha de tela cheia “regardless of what you set for preferExpandedInterface,” e a página da Apple para a chamada antiga diz “In France, Germany, Italy, Poland, and Romania, the system presents a full-page sheet; otherwise, the system prompts the person with an alert,” com a chave de Markdown exibida “if you include it in your app’s target configuration in Xcode.” Adotar a chamada nova é o que dá a folha no restante da UE, o botão “Additional Information” e uma palavra sobre o parâmetro.1346
Isso muda quando eu preciso pedir permissão?
Não. A Apple: “The requirements for when you must seek permission to track users will remain the same.” (os requisitos sobre quando é preciso pedir permissão para rastrear seguem os mesmos).1
A chave de Markdown substitui a NSUserTrackingUsageDescription?
Não. A chave original segue obrigatória para as duas chamadas, e o sistema usa ela sempre que a chave de Markdown estiver ausente ou o dispositivo estiver fora da UE.34
Posso perguntar de novo depois de alguém ter dito não?
Na UE, sim, um ano depois da escolha anterior, “regardless of whether that choice was to accept or reject,” a menos que a pessoa tenha desligado o ajuste que a Apple renomeia na UE para “Allow Apps to Request to Link Your Activity Across Companies.”2
A API nova existe no macOS ou no visionOS?
Não. O header do SDK 27.2 a marca com API_UNAVAILABLE(macos, tvos, watchos, visionos); a página de referência lista iOS, iPadOS e Mac Catalyst 27.2.34
Fontes
-
Apple, “Updates to App Tracking Transparency in the European Union”, notícias para desenvolvedores, 16 de setembro de 2026, citado. ↩↩↩↩↩
-
Apple, User privacy and data use, seção “ATT in the European Union” e a pergunta “Can I provide additional information and consent controls with my app’s ATT prompt implementation,” obtida em 19 de setembro de 2026, citada. ↩↩↩↩↩↩↩↩
-
AppTrackingTransparency.framework/Headers/ATTrackingManager.hno SDK do iPhoneOS 27.2 (ProductBuildVersion24B5084k,ProductVersion27.2) dentro do Xcode 27.2 beta (27B5019j), lido em 19 de setembro de 2026: a declaração derequestTrackingAuthorizationUsingExpandedInterface:additionalInformationAction:completionHandler:comAPI_AVAILABLE(ios(27.2)) API_UNAVAILABLE(macos, tvos, watchos, visionos)e o comentário de documentação dela, citados; o comentário do método antigo sobre a repetição do aviso e sobre as solicitações pendentes, citado. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, requestTrackingAuthorization(usingExpandedInterface:additionalInformationAction:completionHandler:) e NSUserTrackingMarkdownUsageDescription, JSON de documentação obtido em 19 de setembro de 2026: disponibilidade de plataformas iOS 27.2, iPadOS 27.2 e Mac Catalyst 27.2 (o método) e iOS 27.2 e iPadOS 27.2 (a chave), tudo marcado como beta; as seções “Display a full-page sheet” e “Discussion”, citadas. Apple, requestTrackingAuthorization(completionHandler:), JSON de documentação obtido em 21 de setembro de 2026: disponibilidade de plataformas iOS 14.0, iPadOS 14.0, Mac Catalyst 14.0, macOS 11.0, tvOS 14.0 e visionOS 1.0, sem marca de beta; a frase de Discussion sobre os cinco países, a frase “Configure the app’s target properties” sobre a chave de Markdown e o item de solicitação pendente na lista de casos em que “the system doesn’t display the prompt,” citados. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩
-
Execuções do autor no macOS 26.6.2 (25G83), 19 e 20 de setembro de 2026. ATTProbe: um app SwiftUI de arquivo único no ciclo de vida de
AppeWindowGroup, compilado comxcrun swiftc -sdk <iPhoneSimulator27.2.sdk> -target arm64-apple-ios26.0-simulator -parse-as-librarysob o Xcode 27.2 beta (27B5019j), com um Info.plist carregandoNSUserTrackingUsageDescription“Probe: the standard usage description.” eNSUserTrackingMarkdownUsageDescription“Probe: Markdown description with a bullet list:” seguido de dois itens de lista. Uma versão anterior do mesmo app em UIKit, sem manifesto de cenas e compilada contra o mesmo SDK, travou na inicialização comEXC_BREAKPOINTantes de chegar à solicitação; eu a substituí em vez de investigar. Dispositivo: um simulador de iPhone 18 Pro criado comsimctl createnocom.apple.CoreSimulator.SimRuntime.iOS-27-2(24B5084k), conduzido pelosimctldo Xcode 27.2 beta; região definida comsimctl spawn <udid> defaults write "Apple Global Domain" AppleLocale -string <locale>;simctl shutdownesimctl bootantes de cada execução; o app aberto comsimctl launch --console-ptye suas linhas deprintcapturadas; uma captura de tela comsimctl io <udid> screenshotsete segundos depois da abertura, com a captura terminando nove segundos mais tarde. Execuções:en_USexpandida com ação;de_DEexpandida com ação;de_DEcom a chamada antigarequestTrackingAuthorization(completionHandler:);de_DEcompreferExpandedInterface: false;nl_NLexpandida com ação;fr_FRexpandida com ação nula. Em 19 de setembro, em cada execução o log imprimiuregion=<code> status-before=0e nenhuma linha de conclusão dentro da captura de dezesseis segundos; nas cinco execuções expandidas ele também imprimiustatus-now=0aos três, seis, nove e doze segundos, uma verificação que o ramo da chamada antiga do app de sondagem não faz; cada captura de tela mostrou o alerta padrão (esses arquivos, e os arquivos de uma série anterior de 19 de setembro que foi a primeira a mostrar o comportamento do aviso pendente, não sobreviveram a uma reinicialização do Mac que limpou o diretório temporário da sessão, então os resultados de 19 de setembro ficam registrados aqui a partir da saída de console lida na hora). 20 de setembro, primeira série, o mesmo script com um boot limpo antes de cada execução:en_US7:16:37,de_DE7:17:42, a chamada antiga comde_DE7:18:42,de_DEcomfalse7:19:33 enl_NL7:20:26, cada uma sem linha de conclusão e comstatus-now=0em toda verificação onde o app de sondagem consulta, e cada captura de tela com o alerta padrão;fr_FRsem ação, 7:21:04, imprimiuexpanded-request status=0 (notDetermined)às 7:21:05, no mesmo segundo da sua linhamode=, e a captura mostra o próprio log do app e nenhum alerta. Um segundo simulador, o dispositivo iPhone Duo, tinha iniciado às 7:13 e ficou ligado durante toda essa série; nada nos arquivos registra qualquer outra coisa tocando os simuladores durante ela. Segunda série, das 7:23 às 7:27, sobreposta nas três primeiras aberturas a uma primeira tentativa da sequência do aviso pendente que falhou duas vezes com erros do simulador:fr_FRsem ação, 7:23:57,notDeterminedimediato;fr_FRcom ação, 7:24:09, aberta por aquele outro script, exibiu o aviso sem linha de conclusão;de_DEsem ação, 7:24:52, exibiu o aviso;fr_FRcom ação, 7:26:03,notDeterminedimediato;en_USsem ação, 7:27:43, exibiu o aviso; uma abertura defr_FRàs 7:23:09 falhou enquanto o simulador desligava, e o log das 7:23:57 termina aos seis segundos porque o outro script reinstalou o app de sondagem. Listo tudo isso por completude e não dou peso algum. Terceira série, uma execução por vez, sem mais nada tocando o simulador e com um boot limpo antes de cada uma:fr_FRcom ação 7:40:06,fr_FRsem ação 7:40:45 e 7:41:22 com a string de regiãous_US(o app de sondagem imprimiuregion=US), todas exibiram o aviso, sem linha de conclusão e comstatus-now=0em toda verificação. Caso do aviso pendente, o mesmo script, um único boot:de_DEàs 7:42:00 exibiu o aviso sem linha de conclusão; depois desimctl uninstallesimctl installcom aquele alerta sem resposta, uma abertura às 7:42:18 imprimiuexpanded-request status=0 (notDetermined)às 7:42:19 enquanto a captura de tela mostra o alerta na tela; uma terceira abertura com a chamada antiga às 7:42:40 imprimiulegacy-request status=0 (notDetermined)às 7:42:41. O trecho do passo 3, comshowPrivacyDetailsehandle(_:)como funções de fachada, passou noswiftc -typecheckcontra o SDK do iPhoneSimulator 27.2 em-target arm64-apple-ios26.0-simulator; o mesmo arquivo com as linhas#if os(iOS)removidas, compilado contra o SDK do macOS dentro do Xcode 27.2 beta em-target arm64-apple-macos15.0, falhou comerror: 'requestTrackingAuthorization(usingExpandedInterface:additionalInformationAction:completionHandler:)' is unavailable in macOS. ↩↩↩↩↩↩↩↩↩ -
Apple, iOS & iPadOS 27.2 Beta Release Notes, obtidas pelo endpoint JSON da documentação em 17 e 19 de setembro de 2026, App Tracking Transparency, New Features, citado. ↩↩↩