iOS 10 - 相机、麦克风和照片库权限请求变更导致应用崩溃

107

iOS 10现在需要用户许可才能访问媒体库、照片、相机等硬件设备。解决方案是将它们的键添加到info.plist中,并为用户提供描述,说明我们如何使用他们的数据。

我只找到了一些键。

NSPhotoLibraryUsageDescription
NSMicrophoneUsageDescription
NSCameraUsageDescription

我想知道是否有其他硬件也需要更多的密钥,就像在中一样。 如果您没有提供带有正确密钥说明的info.plist,则使用XCode-8 beta构建应用程序时会崩溃。


iOS 10是否在NDA保密协议之下? - sage444
我不确定这个。 - Syed Ali Salman
3个回答

145

[已更新隐私密钥列表至iOS 13-请参见下文]

以下是您可以在Info.plist文件中指定的所有Cocoa Keys列表:

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

(Xcode:Target -> Info -> Custom iOS Target Properties)

iOS早期版本(iOS 6,iOS 7)就已经要求访问麦克风、相机和媒体库的权限,但自从iOS 10以来,如果您不提供请求权限的描述(它不能是空的),则应用程序会崩溃。

带示例描述的隐私密钥: cheatsheet

来源

或者,您可以将 Info.plist 文件以源代码形式打开: source code

来源

并像这样添加隐私密钥:

<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}需要访问相机来拍摄照片更改为${PRODUCT_NAME}需要访问相机来更新您的头像

看起来苹果现在更加关注隐私使用说明,我们应该详细解释为什么要请求权限。


2
是的,但是改变在于如果您没有提供为什么我们要求权限的描述,应用程序现在将崩溃。如果我错了,请纠正我。 - Syed Ali Salman
1
@Syed Ali Salman,你说得对 - 自iOS10以来它会崩溃,现在我真正理解了你的问题。我会更新答案的。 :) - KlimczakM
1
我希望苹果能决定是否强制执行。根据苹果的文档,它并不是强制执行的:如果信息不明显,请解释您的应用程序为什么需要该信息。您可以向系统提供的权限请求警报添加自定义文本。使文本具体和礼貌,以便人们不感到压力。保持文本简短,并使用句子大小写。无需包括您的应用程序名称。系统已经识别出您的应用程序是发出请求的应用程序。 - PiotrDomo
13
我认为苹果让一个应用程序因缺少权限描述而崩溃是完全无意义的,这会给用户带来糟糕的体验!AppStore评论中不断涌现着匿名人士的抱怨......当然模拟器的表现也不同...... - Gabriel
我的应用程序没有使用这些功能,但是我的一些框架似乎使用了它们。这就解释了为什么我需要指定。我仍在努力弄清楚为什么iTunes Connect说我的应用程序访问照片库。我在使用的框架中还没有找到任何东西。 - FateNuller
显示剩余5条评论

70
请查看以下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>

1
谢谢,这是真实的答案,就是苹果公司说“无需包含您的应用程序名称。系统已经识别出您是发出请求的应用程序。” - Yucel Bayram
2
那就是我在寻找的答案。 - Dinesh Falwadiya

18

你需要在Info.plist中添加此权限以用于iOS 10。

相片:

Key       :  Privacy - Photo Library Usage Description    
Value   :  $(PRODUCT_NAME) photo use

麦克风:

Key        :  Privacy - Microphone Usage Description    
Value    :  $(PRODUCT_NAME) microphone use

相机:

Key       :  Privacy - Camera Usage Description   
Value   :  $(PRODUCT_NAME) camera use

正确的键就像 NSPhotoLibraryUsageDescription - BangOperator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接