ITunes Connectにアップロードすると、アプリにNSCalendarsUsageDescription
プライバシーが提供されていないというエラーが表示されます。現在、この情報は必須であることは承知していますが、このプライバシー使用法の説明を必要とするものをアプリが何をどこで使用しているかはわかりません。
NSCalendarsUsageDescription
が必要なアプリは何をしていますか/使用していますか?
Dear developer,
We have discovered one or more issues with your recent delivery for "MyApp". To process your delivery, the following issues must be corrected:
This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCalendarsUsageDescription key with a string value explaining to the user how the app uses this data.
Once these issues have been corrected, you can then redeliver the corrected binary.
Regards,
The App Store team
編集:最初の回答で既にコメントしたようにソリューションが機能しなかったという事実と、可能性のある複製が実際にこの使用法の説明を必要とするもの(実際)の質問に答えていないという事実のため、重複ではありません。
nm
ツールを使用して、フレームワークバイナリ内のEventKit固有のシンボルを探すことができます。
nm YourFramework.framework/YourFramework | grep EK # EK is a prefix for EventKit classes
または、1行(拡張子のないファイルを探し、CodeResourcesも無視して、無関係な出力を減らします):
find YourApp/Frameworks ! -name '*CodeResources*' -type f ! -name "*.*" -exec nm -o -- {} + | grep EK
そのようなものがある場合、次のようなものが表示されます。
0000000000003fdb t -[ClusterPrePermissions EKEquivalentEventType:]
U _OBJC_CLASS_$_EKEventStore
Info.plistファイルを更新して、拒否メールに許可ベースを追加しますまたはエラーログ。
NSCameraUsageDescription
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) camera use.</string>
NSContactsUsageDescription
<key>NSContactsUsageDescription</key>
<string>$(PRODUCT_NAME) contacts use.</string>
NSPhotoLibraryUsageDescription
<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) photos and video use.</string>
NSBluetoothPeripheralUsageDescription
<key>NSBluetoothPeripheralUsageDescription</key>
<string>$(PRODUCT_NAME) bluetooth use.</string>
NSMicrophoneUsageDescription
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) microphone use.</string>
NSMotionUsageDescription
<key>NSMotionUsageDescription</key>
<string>$(PRODUCT_NAME) motion use.</string>
NSLocationAlwaysUsageDescription
<key>NSLocationAlwaysUsageDescription</key>
<string>$(PRODUCT_NAME) location use.</string>
NSLocationUsageDescription
<key>NSLocationUsageDescription</key>
<string>$(PRODUCT_NAME) location use.</string>
NSLocationWhenInUseUsageDescription
<key>NSLocationWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) location use.</string>
NSRemindersUsageDescription
<key>NSRemindersUsageDescription</key>
<string>$(PRODUCT_NAME) reminders use.</string>
NSSiriUsageDescription
<key>NSSiriUsageDescription</key>
<string>$(PRODUCT_NAME) siri use.</string>
NSVideoSubscriberAccountUsageDescription
<key>NSVideoSubscriberAccountUsageDescription</key>
<string>$(PRODUCT_NAME) video use.</string>
NSSpeechRecognitionUsageDescription
<key>NSSpeechRecognitionUsageDescription</key>
<string>$(PRODUCT_NAME) speech recognition use.</string>
NSCalendarsUsageDescription
<key>NSCalendarsUsageDescription</key>
<string>$(PRODUCT_NAME) user your calendar.</string>
プライバシーに敏感なデータアプリの拒否の解決
https://developer.Apple.com/library/content/qa/qa1937/_index.html
リンゴのドキュメントによると:
NSCalendarsUsageDescription(文字列-iOS)このキーを使用すると、アプリがユーザーのカレンダーにアクセスする理由を説明できます。システムがユーザーにアクセスを許可するようプロンプトを出すと、この文字列がアラートの一部として表示されます。
次に、実装方法の説明に進みます。
重要:ユーザーのプライバシーを保護するには、iOS 10.0以降にリンクされ、ユーザーのカレンダーにアクセスするiOSアプリが、その意図を静的に宣言する必要があります。 NSCalendarsUsageDescriptionキーをアプリのInfo.plistファイルに含め、このキーの目的の文字列を提供します。アプリが、対応する目的の文字列なしでユーザーのカレンダーにアクセスしようとすると、アプリは終了します。
基本的にこれをあなたに挿入するinfo.plist
ファイル
<key>NSCalendarsUsageDescription</key>
<string>purpose for using calendar</string>
ココアキーの詳細についてはこちらをご覧ください こちら
AdMob SDKの新しいバージョンに更新すると、問題が解決しました。
CocoaPodsまたはCarthageのせいで、アプリが突然これらすべてのアクセス許可設定を持つようになった理由を知りたい場合は、これらすべてのアクセス許可にフックを設定します。アプリをアップグレードしてcordova-plugin-firebasex
これには、広範なCocoapods(および依存関係)がインストールされています。プロジェクトにcocoapodsをインストールする前に、PermissionsConfiguration.xcconfig
プロジェクトのルートにあります。これについては、こちらで詳しく読むことができます。 https://cocoapods.org/pods/Permission#installation
私のアプリの新しいバージョンが7つの許可で拒否されたとき、これはすべて私を驚かせましたkey/string
Info.plistファイルにありません。私のアプリはこれらのアクセス許可を必要としない(使用していない)ため、これを引き起こしているものを見つけるためにプロジェクトを掘り下げなければなりませんでした。
それは存在するかもしれませんが、現時点ではポッド統合後に権限を削除する方法を見つけることができません...プロジェクトをやり直さずにこれを行う方法を掘り下げなければなりません。