Aller au contenu principal

Privacy Manifest pour les apps iOS

Guide 2026 de conformité et de dépannage pour PrivacyInfo.xcprivacy dans les apps iOS Capacitor : API à justification obligatoire, ITMS-91053 et ITMS-91061, et manifests SDK tiers.

Privacy Manifest pour les apps iOS

Apple privacy manifests are mandatory for App Store uploads: chaque app a besoin d’un PrivacyInfo.xcprivacy qui décrit la collecte de données de votre application, les domaines de suivi et tout API à justification obligatoire vos appels code. Les SDK tiers sur la liste exigée par Apple doivent fournir leurs propres manifests (et signatures lorsqu'ils sont distribués en binaire). Ce guide se concentre sur Conformité 2026 et dépannage dans les Capacitor Apps iOS : quoi déclarer, comment corriger ITMS-91053 et ITMS-91061, et comment valider avant de soumettre.

Ce que couvre un privacy manifest

Un privacy manifest est une property list incluse dans votre app ou SDK. Xcode agrège tous les manifests au moment de l'archivage dans un rapport de confidentialité unique.

Clé Finalité
NSPrivacyTracking Que votre application ou SDK utilise des données à des fins de suivi selon la définition d'Apple
NSPrivacyTrackingDomains Domaines impliqués dans le suivi
NSPrivacyCollectedDataTypes Types de données collectées et leur utilisation
NSPrivacyAccessedAPITypes Les API nécessitant une justification que vous utilisez code utilise, avec les codes de raison approuvés

Aperçu d'Apple : Ajouter un manifeste de confidentialité à votre application ou à un SDK tiers.

Vous êtes responsable de tous les code dans le binaire, y compris les SDK intégrés. Votre manifeste doit décrire uniquement votre application. Ne copiez pas les pratiques de données d'un autre SDK dans votre fichier.

Raisons requises pour les catégories API

Depuis 1er mai 2024, l'App Store Connect rejette les uploads si votre app utilise un API listé sans raison approuvée dans NSPrivacyAccessedAPITypes. Apple documente les API et les raisons approuvées dans Description de l'utilisation des API requis.

Depuis la mise à jour d'Apple TN3183, les catégorie valeurs sont :

NSPrivacyAccessedAPIType valeur Déclencheur typique dans les apps hybrides
NSPrivacyAccessedAPICategoryUserDefaults Paramètres, état des plugins, petite persistance
NSPrivacyAccessedAPICategoryFileTimestamp Métadonnées de fichiers, caches, bundles de mise à jour
NSPrivacyAccessedAPICategoryDiskSpace Free-space checks before downloads
NSPrivacyAccessedAPICategorySystemBootTime Temps écoulé, timers ou timestamps absolus
NSPrivacyAccessedAPICategoryActiveKeyboards Extension de clavier ou détection de saisie

Pour chaque catégorie utilisée, ajoutez un dictionnaire avec NSPrivacyAccessedAPIType et NSPrivacyAccessedAPITypeReasons. Choisissez uniquement les codes de raison qu'Apple liste pour cette catégorie. Des codes erronés entraînent un refus lors de la revue.

Fragment d'exemple (ajustez les catégories et les codes selon votre app après avoir inspecté le rapport de confidentialité) :

<key>NSPrivacyAccessedAPITypes</key>
<array>
  <dict>
    <key>NSPrivacyAccessedAPIType</key>
    <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
    <key>NSPrivacyAccessedAPITypeReasons</key>
    <array>
      <string>CA92.1</string>
    </array>
  </dict>
</array>

Capacitor semble figurer lui-même sur la liste des exigences SDK de tiers , le framework inclut donc un manifeste pour l'usage de API de Capacitor. Vous aurez toujours besoin d'un manifeste au niveau de l'app pour votre les couches natives et JavaScript, les plugins et toute API non couverte par les dépendances.

ITMS-91053 : déclaration API manquante

ITMS-91053 signifie qu'App Store Connect a détecté une raison requise API dans votre build sans entrée correspondante dans un manifeste de confidentialité fusionné.

Corrigez-le :

  1. Lisez l'e-mail de rejet ou le log d'upload. Il nomme l’API category (par exemple NSPrivacyAccessedAPICategoryDiskSpace).
  2. Ouvrez le rapport de confidentialité de l'archive dans Xcode (Produit &gt; Archive, puis Générer le rapport de confidentialité sur l'archive) pour voir si l'écart se situe dans la cible de votre app ou dans une dépendance.
  3. Si l’API se trouve dans votre code ou un plugin qui vous appartient, ajoutez la catégorie et une raison approuvée à ios/App/PrivacyInfo.xcprivacy.
  4. Si l’API provient d'une dépendance, mettez à jour le pod ou le package SPM vers une version qui inclut un manifeste, ou patchez le plugin et ne déclarez que ce que votre fork appelle réellement.
  5. Archivez à nouveau et confirmez que la catégorie apparaît dans le rapport avant de refaire un upload.

Ne déclarez pas de catégories que vous n'utilisez pas. L'analyse statique d'Apple est liée aux symboles du binaire.

ITMS-91061 : manifeste de confidentialité tiers manquant

ITMS-91061 signifie qu'un SDK impactant la vie privée dans votre bundle d'application n'a pas de PrivacyInfo.xcprivacy. Apple précise que lorsque vous déployez une nouvelle application ou une mise à jour qui ajoute un SDK répertorié, ce SDK doit inclure un manifeste ; les SDK binaires nécessitent également une signature du fournisseur SDK.

Corrigez-le :

  1. Copiez le chemin du framework depuis l'e-mail (par exemple Frameworks/FirebaseCore.framework/FirebaseCore).
  2. Identifiez le package CocoaPods, SPM ou le package binaire vendored.
  3. Passez à une release vendor qui embarque PrivacyInfo.xcprivacy à la racine du framework.
  4. Nettoyez, recompilez et vérifiez le fichier dans le .xcarchive avant l'upload.

Ne déplacez pas la collection de SDK ou les déclarations API dans le manifeste de votre app. Apple avertit explicitement que le manifeste de l'app ne doit décrire que l'app. Si le SDK n'est plus maintenu, remplacez-l’ou intégrez un build conforme de votre côté.

Les SDK listés incluent les stacks mobiles courants (Firebase, Flutter, Capacitor, shared_preferences_ios, et d'autres). Vérifiez la liste actuelle sur le site d'Apple avant chaque release.

Manifestes et signatures SDK de tiers

Lorsque vous mettez à jour une dépendance, Xcode vérifie que les frameworks binaires ont été signés par le même développeur que les versions précédentes. Cela protège la supply chain lorsque les manifestes changent.

Workflow pratique :

  • Après pod install ou la résolution de SPM, recherchez ios/ dans les PrivacyInfo.xcprivacy fichiers.
  • Archivez et utilisez Générer le rapport de confidentialité pour obtenir une vue d'ensemble.
  • Comparez le rapport avec vos réponses au questionnaire de confidentialité de l'App Store.

Pour les outils live update, déclarez les API dont la raison d'utilisation est requise et que votre updater utilise réellement (par exemple l'espace disque, les horodatages de fichiers ou les user defaults). L'accès au réseau n'est pas une catégorie de raison requise pour API. Si l'updater collecte des données personnelles, déclarez ces données dans vos étiquettes de confidentialité et vos réponses au questionnaire de l'App Store ; le simple fait de récupérer une mise à jour via HTTPS ne crée pas de nouvelle catégorie de divulgation. Maintenez la conformité Capgo live update à l'esprit lorsque vous documentez le comportement OTA.

Ajouter PrivacyInfo.xcprivacy dans un projet iOS Capacitor

  1. Synchronisez le projet natif : bunx cap sync ios.
  2. Ouvrez le workspace Xcode sous ios/App.
  3. Fichier > Nouveau > Fichier, choisissez App Privacy (ou ajoutez un PrivacyInfo.xcprivacy plist vide).
  4. Enregistrez le fichier sous ios/App (même dossier que AppDelegate est correct).
  5. Dans la cible Phases de build > Copy Bundle Resources, confirmez PrivacyInfo.xcprivacy est listé.
  6. Renseignez le suivi, les types de données collectées et les API de motifs requis selon votre app et vos plugins.
  7. Archivez, générez le rapport de confidentialité et corrigez les catégories manquantes avant l'upload sur App Store Connect.

Si vous modifiez le plist en XML sur le disque, rouvrez Xcode pour que l'appartenance à la cible reste correcte.

Chaque app ou cible SDK conserve son propre PrivacyInfo.xcprivacy. Lors de l'archive, Xcode agrège ces manifests dans un seul rapport de confidentialité. Vous n'avez pas à fusionner manuellement les plists des dépendances dans votre fichier d'app.

Pour un plugin Capacitor personnalisé livré comme son propre framework iOS, ajoutez PrivacyInfo.xcprivacy sous le dossier de ce plugin ios/Plugin/ (ou équivalent) et listez-le dans la cible du plugin Copier les ressources du bundle, et pas seulement dans la cible de l'app.

Quand NSPrivacyTracking est vrai ou si vous intégrez des SDK de publicité ou d'analytics, alignez le manifeste sur les étiquettes de confidentialité de l'App Store et affichez le prompt App Tracking Transparency quand iOS l'exige. @capgo/capacitor-app-tracking-transparency couvre le flux ATT pour les apps Capacitor.

Checklist de validation avant soumission

  • La cible de l'app inclut PrivacyInfo.xcprivacy dans Copier les ressources du bundle.
  • Chaque catégorie de motif requis dans le rejet ou le rapport contient des codes de motif approuvés.
  • Chaque SDK tiers listé dans le build inclut son propre manifeste au chemin attendu.
  • Le rapport de confidentialité correspond à votre compréhension des SDK d'analytics, de publicité et d'authentification.
  • App Store privacy labels align with the merged report.

FAQ

Do Capacitor plugins need their own privacy manifests?

Si un plugin est distribué sous forme de source dans votre repo, son utilisation de API fait partie du binaire de votre app. Déclarez les API appelées par le plugin dans le app ou contribuez à un manifeste dans la cible du plugin s'il est livré comme un framework séparé. Les pods binaires doivent respecter les règles SDK tierces d'Apple.

Puis-je corriger l'erreur ITMS-91061 en modifiant uniquement le PrivacyInfo.xcprivacy de mon app ?

Non. Le SDK doit livrer le manifeste. Votre fichier doit uniquement documenter les pratiques de votre app.

Où sont documentées les dates des politiques d'Apple ?

Required Reason API : appliquées depuis 1er mai 2024. Les règles de manifeste et de signature pour les SDK tiers listés sont décrites dans Exigences pour les SDK tiers.

Continuer avec Privacy Manifest pour les apps iOS

Si vous utilisez Privacy Manifest pour les apps iOS pour planifier la sécurité et la conformité, connectez-l’à Chiffrement pour les détails d'implémentation dans Chiffrement, Conformité pour le détail d’implémentation dans Compliance, Scanner de sécurité Capgo pour le workflow produit dans Capgo Security Scanner, Capgo Sécurité pour le workflow produit dans Capgo Security, et Capgo Centre de confiance pour le workflow produit dans Capgo Trust Center.

Live updates pour les apps Capacitor

Quand un bug de la couche web est en production, déployez le correctif via Capgo au lieu d'attendre des jours l'approbation des stores. Les utilisateurs reçoivent la mise à jour en arrière-plan, tandis que les changements natifs suivent le circuit de validation habituel.

Les derniers articles du blog

Capgo vous apporte les meilleures informations pour créer une application mobile vraiment professionnelle.