Ce que cela signifie
Starting May 1, 2024, apps that don't describe their use of required reason API in their privacy manifest file aren't accepted by App Store Connect.
Apple, Describing use of required reason API
Selon Apple, depuis le 1er mai 2024, les applications qui ne décrivent pas leur usage des API à justification dans leur manifeste de confidentialité ne sont pas acceptées par App Store Connect. Cinq catégories existent : dates des fichiers, temps de démarrage du système, espace disque, claviers actifs et préférences utilisateur. Chaque catégorie déclarée exige au moins un code de justification de la liste d'Apple (pour les préférences utilisateur, CA92.1 désigne un accès par l'application elle-même). Apple exige la déclaration pour chaque exécutable ou bibliothèque dynamique : le bundle qui le contient doit avoir son propre manifeste, un framework ne peut donc pas s'appuyer sur celui de l'application.
Échéance
En vigueur depuis le 1er mai 2024 pour les nouvelles applications et les mises à jour.
Corriger
1. Trouver la catégorie et le binaire
L'e-mail nomme le fichier et les catégories. Le contrôle lit les symboles importés de chaque exécutable de l'IPA et liste, par binaire, la catégorie non déclarée et les symboles qui l'exigent.
2. La déclarer avec une justification approuvée
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>Dans Xcode : File, New, File, App Privacy. Choisissez dans la liste d'Apple le code qui correspond à l'usage réel ; la justification est un code, pas un texte libre.
3. Corriger les frameworks tiers à la source
Si la catégorie manque dans le bundle d'un framework, passez à une version du SDK qui embarque un manifeste de confidentialité. La déclarer dans le manifeste de l'application ne couvre pas un framework dynamique distinct.
Vérifier avant de soumettre
Déposez l'IPA sur la page de contrôle des stores. Elle exécute APPSTORE-REQUIRED-REASON-API avec les dates de cette page, puis supprime le fichier : rien de l'application n'est conservé. Le même moteur tourne hors ligne dans la CLI Narvy et renvoie le code 1 quand un point bloquant est trouvé, ce qui permet de bloquer un job de CI.
narvy store-check MyApp.ipa --lang frQuestions fréquentes
Pourquoi le contrôle signale-t-il un avertissement et non un point bloquant ?
L'outil d'analyse d'Apple n'est pas public, et des applications publiées contiennent des imports non déclarés : un refus ne peut donc pas être prédit avec certitude. La documentation d'Apple est claire sur le fait que la déclaration est exigée.
Que signifie "non déterminé" pour ce contrôle ?
Certaines API (systemUptime, activeInputModes, fileModificationDate) sont appelées par nom de message Objective-C. Le binaire prouve que le message est envoyé, pas à quelle classe : le contrôle le liste pour vérification au lieu de conclure à un échec.