iOS 10-カメラ、マイク、フォトライブラリの権限を要求する際の変更により、アプリケーションがクラッシュする


103

iOS 10では、メディアライブラリ、写真、カメラ、およびその他のこれらのハードウェアにアクセスするためのユーザー権限が必要になりました。これに対する解決策はinfo.plist、ユーザーのデータをどのように使用しているかについての説明をキーに追加することです。

いくつかのキーしか見つけることができませんでした

NSPhotoLibraryUsageDescription
NSMicrophoneUsageDescription
NSCameraUsageDescription

XCode-8ベータを使用してビルドするとアプリケーションがクラッシュするため、適切なキーの説明がiOS 10 提供さinfo.plistれていない場合のように、他のハードウェアにもキーがあるかどうかを知りたいです。


iOS 10はNDAの下にありませんか?
sage444

これについてはよくわかりません。
Syed Ali Salman

回答:


138

[iOS 13に更新されたプライバシーキーリスト-以下を参照]

ファイルでCocoa Keys指定できるすべてのリストがありInfo.plistます。

https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

(Xcode:ターゲット->情報->カスタムiOSターゲットプロパティ)

iOSでは以前にマイク、カメラ、メディアライブラリにアクセスするための権限がすでに必要でしたが(iOS 6、iOS 7)、権限を要求する理由を説明しないとiOS 10アプリがクラッシュするため、許可することはできません。空の)。

説明付きのプライバシーキー: カンニングペーパー

ソース

または、Info.plistソースコードとして開くこともできます。 ソースコード

ソース

次のようなプライバシーキーを追加します。

<key>NSLocationAlwaysUsageDescription</key>
<string>${PRODUCT_NAME} always location use</string>

すべてのプライバシーキーのリスト:[iOS 13に更新]

NFCReaderUsageDescription
NSAppleMusicUsageDescription
NSBluetoothAlwaysUsageDescription
NSBluetoothPeripheralUsageDescription
NSCalendarsUsageDescription
NSCameraUsageDescription
NSContactsUsageDescription
NSFaceIDUsageDescription
NSHealthShareUsageDescription
NSHealthUpdateUsageDescription
NSHomeKitUsageDescription
NSLocationAlwaysUsageDescription
NSLocationUsageDescription
NSLocationWhenInUseUsageDescription
NSMicrophoneUsageDescription
NSMotionUsageDescription
NSPhotoLibraryAddUsageDescription
NSPhotoLibraryUsageDescription
NSRemindersUsageDescription
NSSiriUsageDescription
NSSpeechRecognitionUsageDescription
NSVideoSubscriberAccountUsageDescription

アップデート2019:

過去数か月間、カメラの使用方法の説明に、私が撮った写真の処理方法を指定していないため、レビュー中に2つのアプリが拒否されました。

私からの説明を変更しなければならなかった${PRODUCT_NAME} need access to the camera to take a photo${PRODUCT_NAME} need access to the camera to update your avatarアプリケーションコンテキストは(ユーザーはアバターをタップ)は明らかだったにもかかわらず。

Appleはプライバシー使用法の説明にさらに注意を払っているようで、許可を求める理由を詳細に説明する必要があります。


2
はい、しかし、変更点は、許可を求める理由についての説明を提供しなかった場合、アプリケーションがクラッシュすることです。私が間違っていたら訂正してください。
Syed Ali Salman

1
@Syed Ali Salman正解です-iOS10からクラッシュします。答えを更新します。:)
KlimczakM 2016

1
アップルが必須かどうかを決定してほしい。アップルのドキュメントによると、そうではありません:Explain why your app needs the information if it’s not obvious. You can add custom text to the system-provided permission request alert. Make the text specific and polite, so people don’t feel pressured. Keep the text short, and use sentence case. There’s no need to include your app name. The system already identifies your app as the one making the request.
sumofighter666

私は以前、これらの値を空白のままにしてシステム生成メッセージを表示することができることについてコメントしましたが、機能的には正常に機能しますが、これらのキーを含めても値を設定しないと、Appleはバイナリを自動的に拒否するようです。
Stonz2

13
許可の説明がない場合にアプリをクラッシュさせるのは、Appleからはまったくナンセンスだと私には思われます...なんと悪いユーザーエクスペリエンスでしょうか。(匿名)AppStoreレビューでフローが速く不平を言う...そしてもちろんSimultorの動作は異なる...
Gabriel

65

以下のiOS 10リクエスト許可サンプルのコードを見つけてくださいinfo.plist
カスタムメッセージを変更できます。

    <key>NSCameraUsageDescription</key>
    <string>${PRODUCT_NAME} Camera Usage</string>

    <key>NSBluetoothPeripheralUsageDescription</key>
    <string>${PRODUCT_NAME} BluetoothPeripheral</string>

    <key>NSCalendarsUsageDescription</key>
    <string>${PRODUCT_NAME} Calendar Usage</string>

    <key>NSContactsUsageDescription</key>
    <string>${PRODUCT_NAME} Contact fetch</string>

    <key>NSHealthShareUsageDescription</key>
    <string>${PRODUCT_NAME} Health Description</string>

    <key>NSHealthUpdateUsageDescription</key>
    <string>${PRODUCT_NAME} Health Updates</string>

    <key>NSHomeKitUsageDescription</key>
    <string>${PRODUCT_NAME} HomeKit Usage</string>

    <key>NSLocationAlwaysUsageDescription</key>
    <string>${PRODUCT_NAME} Use location always</string>

    <key>NSLocationUsageDescription</key>
    <string>${PRODUCT_NAME} Location Updates</string>

    <key>NSLocationWhenInUseUsageDescription</key>
    <string>${PRODUCT_NAME} WhenInUse Location</string>

    <key>NSAppleMusicUsageDescription</key>
    <string>${PRODUCT_NAME} Music Usage</string>

    <key>NSMicrophoneUsageDescription</key>
    <string>${PRODUCT_NAME} Microphone Usage</string>

    <key>NSMotionUsageDescription</key>
    <string>${PRODUCT_NAME} Motion Usage</string>

    <key>kTCCServiceMediaLibrary</key>
    <string>${PRODUCT_NAME} MediaLibrary Usage</string>

    <key>NSPhotoLibraryUsageDescription</key>
    <string>${PRODUCT_NAME} PhotoLibrary Usage</string>

    <key>NSRemindersUsageDescription</key>
    <string>${PRODUCT_NAME} Reminder Usage</string>

    <key>NSSiriUsageDescription</key>
    <string>${PRODUCT_NAME} Siri Usage</string>

    <key>NSSpeechRecognitionUsageDescription</key>
    <string>${PRODUCT_NAME} Speech Recognition Usage</string>

    <key>NSVideoSubscriberAccountUsageDescription</key>
    <string>${PRODUCT_NAME} Video Subscribe Usage</string>

iOS 11以降、写真/画像をライブラリに追加する場合は、このキーを追加する必要があります

    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>${PRODUCT_NAME} library Usage</string>

その正解のおかげで、Appleは「アプリ名を含める必要はありません。システムはすでに、リクエストを行ったアプリとしてアプリを識別しています」と述べています。
Yucel Bayram 2017

2
それが私が探していた答えです
Dinesh Phalwadiya

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.