Privacy Manifest — o que é, arquivo PrivacyInfo.xcprivacy e requisitos

Autor: IT Sectr Publicado: 2026-05-20 Tempo de leitura: 9 min

Privacy Manifest (PrivacyInfo.xcprivacy) é um arquivo que todos os aplicativos e SDKs de terceiros devem incluir na compilação iOS a partir da primavera de 2024. A Apple exige declarar os motivos do uso de APIs protegidas (Required Reason API) e os tipos de dados coletados. De acordo com a Documentação do Desenvolvedor Apple, cada binário dentro do aplicativo — alvo principal, frameworks, dependências do Swift Package Manager — deve conter seu próprio Privacy Manifest.

Principais pontos

  • Privacy Manifest — arquivo XML PrivacyInfo.xcprivacy com declaração de motivos de uso de API
  • Required Reason API — categorias de API que exigem indicação obrigatória do motivo
  • SDK Privacy Manifest — cada SDK de terceiros deve fornecer seu próprio manifesto
  • Motivos (Reasons) — propósito específico do uso de API da lista aprovada pela Apple
  • Prazo — a partir de 1º de maio de 2024 todas as novas compilações devem incluir Privacy Manifest

O que é Privacy Manifest?

Privacy Manifest é um arquivo PrivacyInfo.xcprivacy no formato property list (XML) que declara quais tipos de dados o aplicativo coleta e por que utiliza certas APIs. A Apple introduziu os manifestos como parte de uma iniciativa para aumentar a transparência da privacidade, similar ao Privacy Nutrition Label, mas no nível de código e binário.

O objetivo principal do manifesto é documentar o uso das chamadas Required Reason API. São categorias de API que podem ser usadas para coleta de impressão digital do dispositivo (fingerprinting), portanto cada uso deve ser acompanhado de uma declaração de um motivo específico da lista aprovada pela Apple.

A partir de 1º de maio de 2024, a Apple rejeita compilações que não contenham Privacy Manifest. Isso se aplica tanto aos alvos principais do aplicativo quanto a todos os SDKs e dependências incorporados. De acordo com a WWDC 2023, o manifesto é obrigatório para todos os aplicativos distribuídos através da App Store.

O manifesto deve estar presente em cada binário — não apenas no aplicativo principal, mas também em cada framework e biblioteca estática. Se um SDK de terceiros não forneceu um manifesto, o desenvolvedor precisa adicioná-lo manualmente ou entrar em contato com o fornecedor do SDK para obter uma atualização.

Por que a Apple introduziu o Privacy Manifest

Antes dos manifestos, os desenvolvedores podiam usar extensas APIs do sistema (acesso ao sistema de arquivos, data/hora, logs do sistema) sem uma explicação transparente do propósito de uso. Isso criava um risco de vazamento de dados através de SDKs de terceiros que podiam coletar informações sem o conhecimento do desenvolvedor.

De acordo com a Mysk Inc. (2023), muitos SDKs populares usavam APIs para coleta de impressão digital do dispositivo sem necessidade explícita — por exemplo, lendo o tempo de atividade para determinar o fuso horário ou escaneando diretórios para coletar metadados. O Privacy Manifest obriga a declarar cada uma dessas ações.

Além da Required Reason API, o manifesto inclui a seção NSPrivacyTracking — um indicador que sinaliza se o aplicativo usa rastreamento (requer ATT), e NSPrivacyCollectedDataTypes — uma lista de tipos de dados coletados no formato Privacy Nutrition Label.

Diferença entre Privacy Manifest e Privacy Nutrition Label

Privacy Nutrition Label é uma representação para o usuário na página do aplicativo na App Store, mostrando quais dados o aplicativo coleta. Privacy Manifest é um arquivo técnico dentro do binário que a Apple verifica automaticamente. Se os dados no manifesto não corresponderem aos rótulos no App Store Connect, a Apple rejeita a compilação.

Portanto, o manifesto é a fonte da verdade para o sistema de verificação da Apple. Os rótulos de privacidade são gerados automaticamente a partir dele, mas o desenvolvedor deve manter ambas as representações atualizadas. Alterar o manifesto após a publicação requer o envio de uma nova compilação para revisão.

Estrutura do PrivacyInfo.xcprivacy

O arquivo PrivacyInfo.xcprivacy usa o formato property list com um tipo raiz Dictionary. As principais chaves de nível superior são: NSPrivacyTracking (Boolean), NSPrivacyTrackingDomains (Array), NSPrivacyCollectedDataTypes (Array), NSPrivacyAccessedAPITypes (Array).

Chaves de nível superior

A chave NSPrivacyTracking — um valor booleano que indica se o aplicativo aplica rastreamento (requer ATT). Se for true, também deve especificar NSUserTrackingUsageDescription no Info.plist. A chave NSPrivacyTrackingDomains — uma matriz de domínios onde o rastreamento é aplicado.

A chave NSPrivacyCollectedDataTypes — uma matriz de dicionários, cada um descreve um tipo de dado coletado: categoria (NSPrivacyCollectedDataType), vinculação (NSPrivacyCollectedDataLinked), propósito (NSPrivacyCollectedDataTypePurposes). Os propósitos incluem: publicidade de terceiros, análise, desenvolvimento de produto e personalização de conteúdo.

A chave NSPrivacyAccessedAPITypes — uma matriz de dicionários para cada categoria de Required Reason API: categoria (NSPrivacyAccessedAPITypeReasons) — um motivo específico da lista aprovada pela Apple, e NSPrivacyAccessedAPIType — o identificador da categoria de API.

xml
<!-- PrivacyInfo.xcprivacy -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
    "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>NSPrivacyTracking</key>
    <false/>
    <key>NSPrivacyAccessedAPITypes</key>
    <array>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>C617.1</string>
            </array>
        </dict>
    </array>
</dict>
</plist>

Categorias de dados em NSPrivacyCollectedDataTypes

Os tipos de dados são divididos em várias categorias: informações de contato (nome, email, telefone), finanças (dados de pagamento), identificadores (IDFA, ID do usuário), dados de uso (logs, cliques), diagnóstico (logs de falhas) e conteúdo do usuário (fotos, vídeos, arquivos). Cada categoria é adicionalmente marcada como «vinculada ao usuário» ou «não vinculada».

Vinculada significa que os dados estão relacionados à conta do usuário; não vinculada significa que os dados estão agregados ou anonimizados. Essa marcação afeta como a Apple exibe o rótulo de privacidade: dados vinculados são marcados em amarelo, não vinculados — em verde.

Quais APIs exigem indicação de motivos

A Apple identificou várias categorias de API, cada uso das quais deve ser acompanhado de um motivo específico da lista aprovada. Um motivo é um código único, por exemplo C617.1 ou 35F9.1, que corresponde a um propósito específico permitido pela Apple.

Principais categorias de Required Reason API

A categoria NSPrivacyAccessedAPICategoryFileTimestamp inclui APIs para acessar carimbos de data/hora de arquivos (creationDate, modificationDate). Motivos: C617.1 (sincronização de arquivos), 3B52.1 (backup), 0A2A.1 (antifraude).

A categoria NSPrivacyAccessedAPICategoryDiskSpace inclui APIs para verificar espaço livre em disco (NSFileManager. Verificações (NSFileManager). Motivos: E174.1 (gerenciamento de cache), 85F4.1 (download de conteúdo), B728.1 (diagnóstico).

A categoria NSPrivacyAccessedAPICategorySystemBootTime inclui APIs de acesso ao tempo de inicialização do sistema (uptime). Apenas um motivo: 35F9.1 (medição de tempo de sessão para análise). Qualquer outro uso é considerado fingerprinting.

Lista completa de categorias de API

  • FileTimestamp — acesso a carimbos de data/hora de arquivos, permitido para sincronização e backup
  • DiskSpace — verificação de espaço livre, permitido para gerenciamento de cache e downloads
  • SystemBootTime — tempo de atividade, permitido apenas para análise de sessões
  • UserDefaults — acesso ao UserDefaults de outros aplicativos, completamente proibido
  • ActiveKeyboards — lista de teclados ativos, permitido para desenvolvedores de IME
  • SystemAperture — tamanho do recorte na tela, permitido para aplicativos de foto e AR

Cada categoria tem de 1 a 5 motivos aprovados. O desenvolvedor deve escolher o motivo que melhor corresponda ao uso real da API. Fornecer um motivo impreciso pode levar à rejeição da compilação ou suspensão da conta.

Requisitos para SDKs de terceiros

A partir de 1º de maio de 2024, todos os SDKs de terceiros — tanto binários quanto de código aberto — devem incluir um Privacy Manifest em seu pacote. A Apple verifica os manifestos de todas as dependências, e se pelo menos um SDK não tiver manifesto, a compilação será rejeitada.

Os principais SDKs (Firebase, Adjust, AppsFlyer, Facebook SDK) já atualizaram seus pacotes. Se seu projeto usa um SDK pouco conhecido, verifique sua versão e, se necessário, atualize ou entre em contato com o desenvolvedor. Uma solução temporária é adicionar um manifesto para o SDK manualmente no projeto, mas não é recomendado devido a discrepâncias durante as atualizações.

Como criar Privacy Manifest no Xcode

Você pode criar PrivacyInfo.xcprivacy através do modelo integrado no Xcode 15+ ou manualmente. Vamos considerar ambas as opções.

Criação via Xcode 15

O Xcode 15 inclui um modelo Privacy Manifest: File → New → File → Resource → Privacy Manifest. O Xcode cria um arquivo com estrutura básica e preenche NSPrivacyTracking e matrizes vazias para API e dados. Após a criação, você precisa especificar manualmente os motivos para cada Required Reason API usada.

O modelo adiciona automaticamente o arquivo ao alvo principal. Se o projeto tiver vários alvos (Extensions, Watch app), você precisa adicionar o manifesto a cada um. O Xcode não verifica a presença do manifesto nas dependências em tempo de compilação — apenas na etapa de arquivamento.

swift
// AppDelegate: verificação do manifesto em etapa de desenvolvimento
import Foundation

func validatePrivacyManifest() {
    guard let path = Bundle.main.path(
        forResource: "PrivacyInfo", ofType: "xcprivacy"
    ) else {
        print("PrivacyInfo.xcprivacy não encontrado")
        return
    }
    guard let dict = NSDictionary(contentsOfFile: path)
    else { return }
    print("Privacy manifest loaded: \(dict.count) keys")
}

Criação manual via XML

Você pode criar PrivacyInfo.xcprivacy manualmente como um arquivo XML property list comum. Para isso, crie um arquivo com o nome PrivacyInfo.xcprivacy, escreva o cabeçalho plist padrão e adicione um dicionário raiz com as chaves necessárias. Certifique-se de que o arquivo foi adicionado ao alvo (Target Membership).

O método manual é útil quando você precisa adicionar um manifesto a uma biblioteca estática ou dependência do Package Manager sem usar a interface do Xcode. Após a compilação, verifique se o arquivo está incluído no binário usando o comando nm ou arquivamento.

Validação do manifesto antes da publicação

Antes de enviar a compilação para a App Store, você precisa verificar se o Privacy Manifest está correto e completo. A Apple fornece várias ferramentas de validação.

Validador integrado do Xcode

Ao arquivar um projeto (Product → Archive), o Xcode realiza a validação do manifesto. Se um erro for encontrado — manifesto faltante, motivo incorreto, categoria vazia — o arquivamento falha com um erro. O log de erros é exibido no Issue navigator, indicando o SDK problemático e a categoria de API.

Uma validação adicional é realizada no App Store Connect ao enviar a compilação. Se a validação falhar, a compilação é rejeitada com um email automático contendo o identificador da API problemática e a correção recomendada.

Validação via linha de comando

Para automatizar a validação, use scripts que analisem o binário em busca de uso de Required Reason API. A Apple fornece a ferramenta libtool e scripts de verificação de símbolos, mas a comunidade desenvolveu utilitários mais convenientes.

bash
# Busca de uso de API FileTimestamp no binário
nm MyApp.app/MyApp | grep "NSFileCreationDate"

# Verificação de presença de PrivacyInfo.xcprivacy no aplicativo
find MyApp.app -name "*.xcprivacy"

Erros comuns de validação

O erro mais comum é a falta de um manifesto em um dos SDKs. Mesmo que o alvo principal contenha um manifesto, a Apple verifica cada binário individualmente. O segundo mais comum é um código de motivo incorreto: usar um motivo para uma categoria de API com uma API de outra categoria.

O terceiro erro é a declaração excessiva de APIs que não são realmente usadas. Os desenvolvedores adicionam todos os motivos possíveis «por precaução», o que alerta os revisores da Apple. Adicione apenas as categorias que são realmente usadas. Use o analisador estático do Xcode para verificar.

Perguntas frequentes

O que acontece se o Privacy Manifest estiver faltando?

A partir de 1º de maio de 2024, a Apple rejeita qualquer compilação sem manifesto. O erro ocorre na etapa de envio para o App Store Connect. Os aplicativos antigos não são bloqueados, mas as atualizações exigem a inclusão obrigatória do manifesto.

Os aplicativos iPadOS precisam de Privacy Manifest?

Sim, o manifesto é obrigatório para todas as plataformas Apple: iOS, iPadOS, macOS, tvOS, watchOS e visionOS. Os requisitos de Required Reason API são uniformes em todas as plataformas, embora os conjuntos de API possam diferir ligeiramente.

Como adicionar um manifesto para um SDK de terceiros?

Se o SDK não forneceu um manifesto, crie um arquivo PrivacyInfo.xcprivacy separado e adicione-o ao grupo do SDK no projeto. Especifique os motivos para as APIs usadas por este SDK com base na documentação do SDK.

A Apple pode rejeitar uma compilação devido a um motivo incorreto?

Sim. Durante a verificação automática, a Apple compara os motivos declarados com as chamadas reais à API. A discrepância leva à rejeição. Durante a revisão manual, o revisor pode solicitar esclarecimentos.

O Privacy Manifest é verificado para Swift Package Manager?

Sim, a Apple verifica os manifestos de todas as dependências, incluindo SPM. Os fornecedores de pacotes devem incluir PrivacyInfo.xcprivacy em seus repositórios. O Xcode avisa sobre manifestos ausentes durante o arquivamento.

Resumo

  • Privacy Manifest — arquivo obrigatório PrivacyInfo.xcprivacy para todos os aplicativos e SDKs desde 2024
  • Required Reason API — 6 categorias de API que exigem declaração do motivo específico de uso
  • Motivos — códigos únicos (C617.1, 35F9.1), cada categoria tem 1-5 motivos aprovados
  • SDK — cada SDK de terceiros deve incluir seu próprio manifesto no binário
  • Validação — Xcode verifica o manifesto ao arquivar, App Store Connect ao enviar
  • Prazos — a partir de 1º de maio de 2024 todas as novas compilações devem conter o manifesto
  • Crie PrivacyInfo.xcprivacy através do modelo Xcode e declare apenas as APIs realmente usadas

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também