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 :
- Lisez l'e-mail de rejet ou le log d'upload. Il nomme l’API category (par exemple
NSPrivacyAccessedAPICategoryDiskSpace). - Ouvrez le rapport de confidentialité de l'archive dans Xcode (Produit > 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.
- 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. - 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.
- 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 :
- Copiez le chemin du framework depuis l'e-mail (par exemple
Frameworks/FirebaseCore.framework/FirebaseCore). - Identifiez le package CocoaPods, SPM ou le package binaire vendored.
- Passez à une release vendor qui embarque
PrivacyInfo.xcprivacyà la racine du framework. - Nettoyez, recompilez et vérifiez le fichier dans le
.xcarchiveavant 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 installou la résolution de SPM, recherchezios/dans lesPrivacyInfo.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 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
- Synchronisez le projet natif :
bunx cap sync ios. - Ouvrez le workspace 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
PrivacyInfo.xcprivacyest listé. - Renseignez le suivi, les types de 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 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.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 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.