Apple privacy manifests are mandatory for App Store uploads: chaque app nécessite un PrivacyInfo.xcprivacy qui décrit la collecte de données, les domaines de tracking et toute API avec raison requise vos appels code. Les SDK tiers sur la liste requise d'Apple doivent fournir leurs propres manifests (et signatures lorsqu'ils sont distribués sous forme de binaires). Ce guide se concentre sur la conformité 2026 et le dépannage pour Capacitor les apps iOS : quoi déclarer et comment corriger ITMS-91053 et ITMS-91061, et comment valider avant la soumission.
Ce que couvre un privacy manifest
Un privacy manifest est une property list incluse dans votre app ou SDK. Xcode regroupe chaque manifest lors de l'archive en un rapport de confidentialité unique.
| Clé | Objectif |
|---|---|
NSPrivacyTracking |
Si 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 dont vous avez besoin pour vos 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 présents 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.
Catégories d'API à motif requis
Depuis 1er mai 2024, App Store Connect rejette les uploads lorsque votre application utilise une API listée sans raison approuvée dans NSPrivacyAccessedAPITypes. Apple documente les API et les raisons approuvées dans Décrire l'utilisation de l'API à raison requise.
D'après la note d'Apple TN3183, les catégorie 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.
Exemple de fragment (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 figure lui-même sur la les exigences SDK de tiers liste d'Apple, donc le framework livre un manifeste pour l'usage de API par Capacitor. Vous avez toujours besoin d'un manifeste au niveau de l'app pour votre les couches natives et JavaScript, les plugins et toutes les API non couvertes par les dépendances.
ITMS-91053 : déclaration API manquante
ITMS-91053 signifie qu'App Store Connect a détecté une raison API requise dans votre build sans entrée correspondante dans un manifeste de confidentialité fusionné.
Correction :
- Lisez l'e-mail de rejet ou le log d'upload. Il indique l’API catégorie (par exemple
NSPrivacyAccessedAPICategoryDiskSpace). - Ouvrez le rapport de confidentialité de l'archive dans Xcode (Product > Archive, puis Générer le rapport de confidentialité de l'archive) et vérifiez si l'écart vient de la cible de votre app ou d'une dépendance.
- Si l’API se trouve dans votre code ou un plugin que vous maintenez, ajoutez la catégorie et une raison approuvée à
ios/App/PrivacyInfo.xcprivacy. - Si l’API provient d'une dépendance, passez le pod ou le package SPM à une version qui inclut un manifeste, ou patchez le plugin pour ne déclarer que ce que votre fork appelle réellement.
- Refaites une archive et vérifiez 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 confidentialité dans votre bundle d'application n'a pas de PrivacyInfo.xcprivacy. Apple précise que lorsque vous publiez 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 de SDK.
Correction :
- Copiez le chemin du framework depuis l'e-mail (par exemple
Frameworks/FirebaseCore.framework/FirebaseCore). - Identifiez le package CocoaPods, SPM ou binaire vendorisé.
- Passez à une release vendor qui inclut le bundle
PrivacyInfo.xcprivacyà la racine du framework. - Nettoyez, recompilez et vérifiez le fichier dans le
.xcarchiveavant l'upload.
Ne pas déplacez pas les déclarations de collection ou API de SDK dans le manifeste de votre app. Apple avertit explicitement que le manifeste doit décrire uniquement l'app. Si le SDK n'est plus maintenu, remplacez-l’ou utilisez un build vendorisé conforme.
Les SDK listés incluent les stacks mobiles courantes (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 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 installou pour résoudre SPM, recherchezios/pourPrivacyInfo.xcprivacyfichiers. - 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 à raison d'utilisation requise 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 API à raison requise. Si l'updater collecte des données personnelles, déclarez ces données dans vos étiquettes de confidentialité App Store et vos réponses au questionnaire ; le simple fait de récupérer une mise à jour via HTTPS ne crée pas de nouvelle catégorie de divulgation. Gardez Conformité Capgo live update in mind when you document OTA behavior.
Ajoutez PrivacyInfo.xcprivacy dans un projet iOS Capacitor
- Synchronisez le projet natif :
bunx cap sync ios. - Ouvrez l'espace de travail Xcode sous
ios/App. - Fichier > Nouveau > Fichier, choisissez App Privacy (ou ajoutez un
PrivacyInfo.xcprivacyplist vide). - Enregistrez le fichier sous
ios/App(même dossier queAppDelegateest correct). - Dans la cible Phases de build > Copy Bundle Resources, confirmez que
PrivacyInfo.xcprivacyest listé. - Remplissez les types de suivi, les données collectées et les API de motifs requis selon votre app et vos plugins.
- 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 framework iOS à part, ajoutez PrivacyInfo.xcprivacy sous ce plugin ios/Plugin/ dossier de ce 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 pub ou d'analytics, alignez le manifeste avec les labels 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.xcprivacydans 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 code 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 manifeste de l'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 ?
API à motif requis : appliquées depuis 1er mai 2024. Les règles de manifeste et de signature tiers pour les SDK 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 du chiffrement, Conformité pour les détails d'implémentation de la conformité, Scanner de sécurité Capgo pour le workflow produit dans Capgo Security Scanner, Capgo et la sécurité pour le workflow produit dans Capgo Security, et Capgo Centre de confiance pour le workflow produit dans Capgo Trust Center.