web-dev-qa-db-fra.com

le téléchargement iTunes Connect a été rejeté avec un fichier binaire non valide en raison de l'absence de NSCalendarsUsageDescription.

J'essaie de télécharger une mise à jour pour une application existante avec XCode 8. Après le téléchargement, j'ai reçu cet email:

"Cette application tente d'accéder aux données confidentielles sans description d'utilisation L'info.plist de l'application doit contenir une clé NSCalendarsUsageDescription avec une valeur de chaîne expliquant à l'utilisateur .__ comment l'utilisateur utilise ces données."

Je connais la nouvelle politique de confidentialité pour iOS 10 et aussi comment ajouter la description nécessaire. Mon problème est le suivant: je n'utilise pas le calendrier dans mon application.

Existe-t-il un moyen de savoir pourquoi Apple pense utiliser le calendrier? Peut-être qu'il est utilisé par AdMobSDK de Google?

15
Stefan

J'ai envoyé un e-mail à Google pour se plaindre et j'espère que cela sera résolu dans les futures versions du SDK AdMob. Jusque-là, vous pouvez contourner le problème en ajoutant NSCalendarsUsageDescription à votre info.plist. J'ai aussi dû faire la même chose avec NSBluetoothPeripheralUsageDescription.

Édition: Il est également très important d’ajouter la description NSPhotoLibraryUsageDescription à: https://groups.google.com/forum/#!category-topic/google-admob-ads-sdk/ios/UmeVUDrcDaw

Mise à jour du 18 sept. 2016: Google a publié la version 7.11.0, qui évite d'avoir à en posséder.

14
Stephen

Si vous utilisez la structure EventKit, cela peut déclencher le rejet automatique reçu d’Apple. Une solution consiste à supprimer ce cadre. 

De nombreux SDK publicitaires, tels que Tapjoy (avant la version 11.8.1) et AdMob, utilisent EventKit comme infrastructure requise. 

Si vous avez un cadre EventKit dans votre application parce que cela est nécessaire pour votre SDK publicitaire, j'ai vu ce rejet évité avec la modification suivante du fichier .plist:

<key>NSCalendarsUsageDescription</key>
<string>Some ad content may access calendar</string>
15
Zachary Drake

Stephen et Zachary Drake les réponses sont exactes :)

De mon côté, mon projet xcode est généré à chaque fois. Voici donc un moyen de définir ces valeurs à partir d'une ligne de commande à l'aide de PlistBuddy (j'avais également besoin de NSCameraUsageDescription):

/usr/libexec/PlistBuddy -c "Add :NSCameraUsageDescription string" ./Info.plist || true
/usr/libexec/PlistBuddy -c "Set :NSCameraUsageDescription 'not used'" ./Info.plist

/usr/libexec/PlistBuddy -c "Add :NSCalendarsUsageDescription string" ./Info.plist || true
/usr/libexec/PlistBuddy -c "Set :NSCalendarsUsageDescription 'Some ad content may access calendar'" ./Info.plist

/usr/libexec/PlistBuddy -c "Add :NSPhotoLibraryUsageDescription string" ./Info.plist || true
/usr/libexec/PlistBuddy -c "Set :NSPhotoLibraryUsageDescription 'Some ad content may access photo library'" ./Info.plist
0
GabLeRoux

en utilisant Xcode V9 avec la cible de construction IOS 10.0, je devais ajouter cela à la liste de local.plist et non au plist principal de l'application:

 {
     "NSCalendarsUsageDescription" = "This App needs to use your calendar";
 }
0
Dr. Roger Webster