Compartilhar via


Manifesto de privacidade da Apple

A Apple tem uma política de privacidade para aplicativos direcionados ao iOS na App Store. A política requer que o aplicativo inclua um manifesto de privacidade no pacote do aplicativo listando os tipos de dados que seu aplicativo .NET MAUI ou quaisquer SDKs e pacotes de terceiros coletam e os motivos para o uso das APIs de motivo obrigatório. Se o uso das APIs de motivo obrigatório ou SDKs de terceiros não for declarado no manifesto de privacidade, seu aplicativo poderá ser rejeitado pela App Store. Para obter mais informações sobre manifestos de privacidade, confira Arquivos do manifesto de privacidade em developer.apple.com.

Dependendo de você estar usando o .NET MAUI para desenvolver um aplicativo ou fornecer pacotes de vinculação para usar com aplicativos .NET MAUI, os requisitos para fornecer um manifesto de privacidade podes ser diferentes.

Manifesto de privacidade para aplicativos .NET MAUI

Todos os aplicativos .NET MAUI destinados a dispositivos que executam iOS ou iPadOS requerem um manifesto de privacidade no pacote de aplicativos. Para obter mais informações, confira Adicionar as entradas de dados obrigatórias ao manifesto de privacidade.

Você também vai precisar revisar seu próprio código, qualquer código nativo e as práticas de rastreamento e coleta de dados, além de atualizar o manifesto de privacidade de acordo:

  • Se o seu aplicativo ou SDK coletar dados sobre a pessoa que usa o aplicativo, você vai precisar descrever o uso dos dados em um manifesto de privacidade. Para obter informações, confira Como descrever o uso de dados nos manifestos de privacidade em developer.apple.com.
  • Se o seu aplicativo ou SDK incluírem APIs do .NET que chamam as APIs de motivo obrigatório da Apple, você precisará avaliar o uso de cada uma dessas APIs e declarar os motivos para usá-las. Para obter mais informações sobre as APIs de motivo obrigatório, confira Como descrever o uso de APIs de motivo obrigatório em developer.apple.com.

Observação

Se o seu aplicativo incluir SDKs ou pacotes de terceiros, esses componentes de terceiros deverão incluir seus próprios manifestos de privacidade separadamente.

Um manifesto de privacidade é adicionado automaticamente a novos projetos do aplicativo .NET MAUI criados usando a CLI do .NET ou o Visual Studio. Para obter informações sobre como adicionar um manifesto de privacidade a um aplicativo .NET MAUI existente, consulte Adicionar um manifesto de privacidade a um aplicativo existente.

Importante

As diretrizes acima são fornecidas para sua conveniência. É importante que você leia a documentação da Apple sobre arquivos do manifesto de privacidade antes de criar um manifesto de privacidade para o seu projeto.

Manifesto de privacidade para projetos de vinculação

Os projetos de associação se enquadram em duas categorias: associações de estrutura estática e associações de estrutura dinâmica. Um manifesto de privacidade deve ser incluído na estrutura com a colocação no pacote de estrutura. Quando colocado corretamente, o projeto de associação o adicionará automaticamente ao pacote de aplicativos para que os desenvolvedores de aplicativos não precisem fornecer motivos para o uso da API da estrutura. Para obter mais informações, confira Colocação de conteúdo em um pacote.

Para uma estrutura dinâmica, a estrutura é adicionada ao lote de aplicativo. O manifesto da política de privacidade é adicionado ao local em que a App Store espera que ele esteja e não há nada que o desenvolvedor do aplicativo precise fazer.

Atualmente, ao associar uma estrutura estática, os desenvolvedores de aplicativos serão obrigados a mesclar manualmente o manifesto de privacidade incluído com a estrutura estática no manifesto de privacidade do aplicativo. Isso ocorre devido à forma como as bibliotecas estáticas são vinculadas ao binário do aplicativo principal, removendo a necessidade da estrutura.

Adicionar um manifesto de privacidade a um aplicativo existente

Para adicionar um manifesto de privacidade a um projeto do aplicativo .NET MAUI existente, adicione um novo arquivo XML chamado PrivacyInfo.xcprivacy à pasta Platforms/iOS do seu projeto de aplicativo. Certifique-se de que o arquivo PrivacyInfo.xcprivacy não tenha uma extensão .xml. Em seguida, adicione o seguinte XML ao arquivo:

<?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/>
</plist>

A seguir, edite o arquivo do seu projeto do aplicativo .NET MAUI (*.csproj) e adicione o seguinte item de build para iOS na parte inferior do elemento <Project> da raiz:

<ItemGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">
    <BundleResource Include="Platforms\iOS\PrivacyInfo.xcprivacy" LogicalName="PrivacyInfo.xcprivacy" />
</ItemGroup>

Isso irá garantir que o manifesto de privacidade seja empacotado no aplicativo iOS na raiz do pacote.

Adicionar as entradas de dados obrigatórias ao manifesto de privacidade

Todos os aplicativos .NET MAUI destinados a dispositivos que executam iOS ou iPadOS requerem um manifesto de privacidade no pacote de aplicativos. Isso ocorre devido ao runtime do .NET e à Biblioteca de Classes Base (BCL) que usa as APIs de motivo obrigatório que não são removidas, independentemente do modo vinculador. As três categorias de API e seus respectivos motivos que devem estar no manifesto de privacidade em um aplicativo .NET MAUI são mostradas na tabela a seguir:

Categoria da API Motivo Link
NSPrivacyAccessedAPICategoryFileTimestamp C617.1 APIs de carimbo de data/hora do arquivo
NSPrivacyAccessedAPICategorySystemBootTime 35F9.1 APIs de hora de inicialização do sistema
NSPrivacyAccessedAPICategoryDiskSpace E174.1 APIs de espaço em disco

Se você adicionou manualmente um manifesto de privacidade a um aplicativo .NET MAUI existente, precisará adicionar essas entradas a ele. Para fazer isso, abra o arquivo PrivacyInfo.xcprivacy em um editor de texto e adicione a chave NSPrivacyAccessAPITypes, em que cada categoria de uso de API de motivo obrigatório será adicionada posteriormente:

<?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>NSPrivacyAccessedAPITypes</key>
    <array>
    </array>
</dict>
</plist>

Em seguida, adicione a categoria NSPrivacyAccessedAPICategoryFileTimestamp com o motivo C617.1, a categoria NSPrivacyAccessedAPICategorySystemBootTime com o motivo 35F9.1 e a categoria NSPrivacyAccessedAPICategoryDiskSpace com o motivo E174.1 à matriz de NSPrivacyAccessedAPITypes no manifesto de privacidade:

<?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>NSPrivacyAccessedAPITypes</key>
    <array>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>C617.1</string>
            </array>
        </dict>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategorySystemBootTime</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>35F9.1</string>
            </array>
        </dict>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryDiskSpace</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>E174.1</string>
            </array>
        </dict>       
    </array>
</dict>
</plist>

Essas entradas são o mínimo que você precisará para seu aplicativo. Se você usar qualquer uma das APIs de motivos necessários de uma maneira que não seja coberta pelos códigos de motivo fornecidos, será necessário adicionar códigos de motivo adicionais para dar suporte ao uso da API. Para obter mais informações sobre o uso de API no runtime do .NET, BCL (Biblioteca de Classes Base do .NET), .NET para iOS e MAUI do .NET que podem fazer com que você precise de códigos de motivo adicionais, consulte os links na seção Veja também.

Se o aplicativo .NET MAUI usar a API de Preferências ou você usar a NSUserDefaults API diretamente, precisará incluir os motivos para uso no manifesto de privacidade. Use a cadeia de caracteres NSPrivacyAccessedAPICategoryUserDefaults como o valor da chave de NSPrivacyAccessedAPIType no seu dicionário de NSPrivacyAccessedAPITypes. Por exemplo, se o seu aplicativo ou SDK usar direta ou indiretamente a API NSUserDefaults por meio da API Preferências do .NET MAUI, seu arquivo PrivacyInfo.xcprivacy deverá conter um elemento dict adicional na matriz da chave de NSPrivacyAccessedAPITypes:

<?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>NSPrivacyAccessedAPITypes</key>
    <array>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>C617.1</string>
            </array>
        </dict>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategorySystemBootTime</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>35F9.1</string>
            </array>
        </dict>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryDiskSpace</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>E174.1</string>
            </array>
        </dict>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>CA92.1</string>
            </array>
        </dict>
    </array>
</dict>
</plist>

Você precisará fornecer um ou mais códigos de motivo de APIs padrão do usuário em developer.apple.com. Adicione um ou mais códigos de motivo abaixo para indicar o uso correto:

  • CA92.1 – para acessar os padrões do usuário apenas em seu aplicativo.
  • 1C8F.1 – para acessar os padrões do usuário de aplicativos, extensões de aplicativo e Clipes de Aplicativo que são membros do mesmo Grupo de Aplicativos.
  • C56D.1 – para acessar os padrões de usuário de um SDK.
  • AC6B.1 – para acessar os padrões do usuário para ler a chave com.apple.configuration.managed ou com.apple.feedback.managed.

Importante

O arquivo PrivacyInfo.xcprivacy de um aplicativo pode precisar ser atualizado se você modificar o código no seu aplicativo. Isso inclui adicionar um pacote NuGet ou um projeto de vinculação ao seu aplicativo que chamar qualquer uma das APIs de motivo obrigatório da Apple.

Confira também

Use os links a seguir para saber mais sobre os motivos necessários para o uso da API no .NET MAUI, no .NET para iOS, no runtime do .NET e na BCL: