web-dev-qa-db-ja.com

NSCalendarsUsageDescriptionがないため、iTunes Connectのアップロードが無効なバイナリで拒否されました

XCode 8を使用して既存のアプリの更新をアップロードしようとしています。アップロード後、このメールを受信しました。

「このアプリは、使用法の説明なしでプライバシーに敏感なデータにアクセスしようとします。アプリのInfo.plistには、アプリがこのデータをどのように使用するかを説明する文字列値を持つNSCalendarsUsageDescriptionキーが含まれている必要があります。」

IOS 10の新しいプライバシーポリシーと、必要な説明を追加する方法について知っています。私の問題は、アプリでカレンダーを使用していないことです。

なぜAppleはカレンダーを使用していると考えているのでしょうか?GoogleのAdMobSDKで使用されているのでしょうか?

15
Stefan

これについて不満を言っているメールをGoogleに送信しましたが、AdMob SDKの将来のバージョンで解決されることを願っています。それまでは、NSCalendarsUsageDescriptionをinfo.plistに追加することで回避できます。 NSBluetoothPeripheralUsageDescriptionでも同じことをしなければなりませんでした。

編集:NSPhotoLibraryUsageDescriptionも追加することも非常に重要です: https://groups.google.com/forum/#!category-topic/google-admob-ads-sdk/ios/UmeVUDrcDaw

2016年9月18日更新:Googleはバージョン7.11.0をリリースしました。これにより、これらのいずれかが不要になります。

14
Stephen

EventKitフレームワークを使用すると、Appleから受け取った自動拒否をトリガーできます。 1つの解決策は、そのフレームワークを削除することです。

Tapjoy(バージョン11.8.1より前)やAdMobなどの多くの広告SDKには、必須のフレームワークとしてEventKitがあります。

広告SDKに必要なため、アプリケーションにEventKitフレームワークがある場合、.plistファイルに次の変更を加えることで、この拒否を回避できることがわかりました。

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

Stephen および Zachary Drake's 答えは正しい:)

私の側では、xcodeプロジェクトが毎回生成されるため、PlistBuddyを使用してコマンドラインからこれらの値を設定する方法があります(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
1
GabLeRoux

xcode V9をビルドターゲットIOS 10.0で使用して、メインアプリplistではなくlocal.plistに追加する必要がありました。

 {
     "NSCalendarsUsageDescription" = "This App needs to use your calendar";
 }
0