iOS 10-相机,麦克风和照片库的询问权限更改导致应用程序崩溃


103

iOS 10现在需要用户权限才能访问媒体库,照片,相机和其他类似硬件。解决方案是将其密钥添加到info.plist用户的描述中,以说明我们如何使用其数据,

我只能找到几把钥匙

NSPhotoLibraryUsageDescription
NSMicrophoneUsageDescription
NSCameraUsageDescription

我想知道是否还有其他硬件的键,例如,iOS 10 如果没有提供info.plist正确的键说明,则使用XCode-8 beta构建应用程序将崩溃


NDA下没有iOS 10吗?
sage444 '16

我对此不确定。
Syed Ali Salman

Answers:


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:

在过去的几个月中,我的两个应用在审核期间被拒绝了,因为相机使用说明未指定我对所拍摄照片的处理方式。

我必须说明从改变${PRODUCT_NAME} need access to the camera to take a photo${PRODUCT_NAME} need access to the camera to update your avatar,即使应用程序上下文是显而易见的(用户点击的头像)。

看来苹果公司现在正在更加关注隐私使用说明,我们应该详细解释为什么我们要求获得许可。


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 '16

之前,我曾评论过能够将这些值保留为空白以仅显示系统生成的消息,并且尽管它可以正常工作,但如果您包括这些键但未为其设置值,Apple似乎会自动拒绝您的二进制文件。 。
Stonz2 '16

13
在我看来,Apple完全是胡说八道,让应用程序在缺少权限描述时就崩溃了……糟糕的用户体验!(匿名)在AppStore评论中抱怨流程过快……而且Simultor的行为也有所不同……
Gabriel

64

请为的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

2
那就是我一直在寻找的答案
Dinesh Phalwadiya

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.