Guide confidentialité Apple

Apple Privacy Manifest pour React Native

Le Privacy Manifest décrit données, domaines de tracking et raisons autorisées pour certaines APIs.

LaunchLint Academy

11 min de lectureVérifié par l’équipe éditoriale de LaunchLint
Illustration de PrivacyInfo xcprivacy entre dépendances React Native et bundle iOS
La preuve est dans les manifests et APIs du bundle final, pas seulement dans un fichier du fichiers du projet.
TL;DR

La réponse courte

  • PrivacyInfo.xcprivacy déclare des pratiques et les raisons approuvées pour certaines Required Reason APIs.
  • Dans React Native et Expo, les accès viennent souvent des dépendances natives. Vérifiez SDK, Pods et rapport Xcode final.
  • Le manifest ne remplace ni App Privacy, ni politique de confidentialité, ni le consentement ATT lorsqu’il s’applique.

1. Ce que décrit PrivacyInfo.xcprivacy

Apple utilise des manifests lisibles par machine pour apps et SDK. Xcode peut agréger ceux des tiers afin d’examiner les pratiques incluses et préparer App Privacy.

Le fichier peut contenir données collectées, domaines de tracking et Required Reason APIs. Toutes les clés ne concernent pas toutes les apps ; copier un modèle crée des affirmations techniques.

Couches distinctes
CoucheRôleRemplace ?
ManifestDéclaration bundleNon
Rapport XcodeAgrégationNon
App PrivacyDéclaration publiqueNon
politique de confidentialitéTraitement et droitsNon

2. Required Reason APIs : une raison réelle

UserDefaults, timestamps, boot time, espace disque ou clavier actif peuvent nécessiter une raison approuvée. Apple peut étendre la liste ; consultez la version actuelle.

Le code n’est pas un texte libre ni un correctif cosmétique. Il doit correspondre à l’usage réel ; sinon corrigez l’implémentation ou la dépendance.

3. Les SDK tiers font partie de la soumission

Apple maintient une liste de SDK soumis à manifest et signature dans certains cas. Les stacks React Native incluent parfois Hermes, Firebase, GoogleUtilities, Protobuf, OneSignal ou SDWebImage.

Vous restez responsable. Préférez une version avec manifest fournisseur correct et ne masquez pas un manifest obsolète avec un fichier global.

  • Inventorier dépendances natives
  • Comparer la liste Apple
  • Lire docs et releases
  • Localiser le manifest
  • Vérifier signature
  • Supprimer modules inutiles
  • Régénérer le rapport

4. Configurer avec Expo et React Native

Avec CNG, utilisez expo.ios.privacyManifests. En bare React Native, créez le fichier dans Xcode et associez le bon target. Une OTA JavaScript ne suffit pas.

Exemple Expo : UserDefaults et reason code
{
  "expo": {
    "ios": {
      "privacyManifests": {
        "NSPrivacyAccessedAPITypes": [
          {
            "NSPrivacyAccessedAPIType":
              "NSPrivacyAccessedAPICategoryUserDefaults",
            "NSPrivacyAccessedAPITypeReasons": ["CA92.1"]
          }
        ]
      }
    }
  }
}

Ce n’est pas un modèle universel. Vérifiez CA92.1 et chaque code avec la documentation actuelle et la configuration production résolue.

  • Résoudre production
  • Valider les clés
  • Relier raison et usage
  • Bon target
  • Nouveau binaire
  • Augmenter le build

5. Le bundle final est la preuve

Un fichier du fichiers du projet montre une intention. L’archive contient Pods, frameworks et ressources. Lisez le rapport Xcode et les manifests agrégés ; Expo documente des limites avec certaines dépendances statiques.

Vérifiez app, extensions, widgets et notification extensions. Conservez rapport, build et lockfile.

  • Archive Release
  • Tous les targets
  • Rapport agrégé
  • Types ou domaines inattendus
  • Raisons contre usages
  • Warning liée au build
  • Fix dans nouvel artefact

6. Manifest, App Privacy et ATT sont distincts

App Privacy est publique ; le manifest est technique. Un manifest SDK ne décrit pas seul votre backend ni le comportement dynamique et ne génère pas le formulaire complet.

ATT est une autre couche. NSPrivacyTracking n’accorde aucune permission et le dialogue ATT ne remplace pas le label.

7. Corriger systématiquement

Reliez warning, catégorie et module. Vérifiez code natif, Pods, frameworks, mises à jour et finalité avant de changer le manifest.

LaunchLint inventorie fichiers, config, versions et catégories sans exécuter de build. La tâche distingue preuve fichiers du projet et validation manuelle du bundle.

  • Conserver warning et build
  • Identifier module
  • Valider raison
  • Mettre à jour ou retirer SDK
  • Manifest minimal
  • Nouveau release
  • Rapport et upload
  • Mettre à jour label et politique de confidentialité

8. Preflight avant l’upload

Figez lockfile et configuration production avant l’archive. Construisez depuis le commit prévu, notez le build number et ne confondez pas un avertissement d’un ancien upload avec le nouvel artefact. Après toute modification de Pod, plugin ou target, recommencez la vérification.

Lisez le Privacy Report comme une série de questions : reconnaissez-vous chaque SDK, catégorie, domaine et raison ? Étudiez l’inattendu avant la soumission. Comparez ensuite avec App Privacy et la politique de confidentialité, y compris le backend que le manifest ne décrit pas. Une approbation précédente ne valide pas la nouvelle combinaison.

Checklist finale :

  • Commit et lockfile identifiés
  • Configuration production résolue
  • Tous les targets archivés
  • Rapport agrégé relu
  • Raisons liées aux usages
  • SDK Apple à jour
  • App Privacy et politique de confidentialité comparées
  • Build exact dans TestFlight
  • Emails de validation vérifiés
  • Preuves conservées

9. Erreurs qu’un manifest valide n’empêche pas

Un plist valide peut rester faux : raisons copiées d’une autre app, catégories absentes du build, fichier global masquant un SDK ancien, extension oubliée ou configuration production différente. La validation de syntaxe ne prouve ni l’usage réel ni la présence dans le bon target.

Évitez aussi de traiter une couche comme vérité complète : modifier App Privacy sans relire le bundle, corriger le manifest sans la politique de confidentialité ou croire qu’ATT couvre tout tracking. Une personne compare les couches et une seconde relit l’archive afin de ne pas dépendre seulement de l’auteur du fix.

Bloquer la soumission si :

  • Raison sans usage précis
  • Version SDK inconnue
  • Extension non vérifiée
  • Domaine inattendu
  • Warning d’un autre build
  • Changement natif livré en OTA
  • Label et politique de confidentialité divergents
  • Rapport non conservé

Questions fréquentes

Toute app a-t-elle besoin de son manifest ?

Pas avec les mêmes entrées. Cela dépend des APIs et SDK du bundle final.

Puis-je copier les reason codes ?

Non. Ils doivent correspondre à l’usage approuvé réel.

Le manifest remplace App Privacy ?

Non. Ce sont des couches distinctes avec politique de confidentialité et ATT. Le formulaire public couvre aussi le backend et les finalités absentes du manifest technique.

Une OTA suffit-elle ?

Non. Le manifest fait partie du binaire natif.

Sources officielles

Cet article s’appuie sur les sources officielles ci-dessous. Les règles peuvent évoluer : vérifiez leur version actuelle avant chaque soumission.