iOS 10.0运行时崩溃,原因是NSCameraUsageDescription?

186

使用 iOS 10.0 最后一个测试版时,我尝试在我的应用程序中使用相机扫描条形码,但出现了以下运行时错误。

此应用程序因未提供使用说明而尝试访问涉及隐私的数据而崩溃。 应用程序的 Info.plist 必须包含一个 NSCameraUsageDescription 键,其字符串值必须向用户解释应用程序如何使用此数据。

已将此键放入 plist 中,但仍然崩溃?


6
我遇到了相同的问题,已在info.plist中添加了NSCameraUsageDescription,但仍然以相同的错误信息崩溃。你解决了吗?显然,回答这个问题的人都没有理解即使已经添加了键也会崩溃的情况。 - CarmenA
1
如果您已将条目添加到正确的info.plist文件中,但仍然失败,可能是因为Xcode有时无法注意到资源文件(如info.plist、图像、音频、电影等)的更改。您可能需要执行清理操作或从Derived Data文件夹中删除应用程序构建产品,以强制Xcode使用最新版本。 - Walt Sellers
14个回答

266
在iOS 10之后,您必须在Info.plist中定义和提供您的应用程序访问的所有系统隐私敏感数据的使用说明,如下所示:

日历

Key    :  Privacy - Calendars Usage Description    
Value  :  $(PRODUCT_NAME) calendar events

温馨提示:

Key    :   Privacy - Reminders Usage Description    
Value  :   $(PRODUCT_NAME) reminder use

联系方式:

Key    :   Privacy - Contacts Usage Description     
Value  :  $(PRODUCT_NAME) contact use

照片:

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

蓝牙分享:

Key    :  Privacy - Bluetooth Peripheral Usage Description     
Value  :  $(PRODUCT_NAME) Bluetooth Peripheral use

麦克风(也用于视频录制):

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

相机(拍照或录像):

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

位置:

Key    :  Privacy - Location Always Usage Description   
Value  :  $(PRODUCT_NAME) location use

Key    :  Privacy - Location When In Use Usage Description   
Value  :  $(PRODUCT_NAME) location use

希斯:

Key    :  Privacy - Health Share Usage Description   
Value  :  $(PRODUCT_NAME) heath share use

Key    :  Privacy - Health Update Usage Description   
Value  :  $(PRODUCT_NAME) heath update use

HomeKit:

Key    :  Privacy - HomeKit Usage Description   
Value  :  $(PRODUCT_NAME) home kit use

媒体库:

Key    :  Privacy - Media Library Usage Description   
Value  :  $(PRODUCT_NAME) media library use

运动:

Key    :  Privacy - Motion Usage Description   
Value  :  $(PRODUCT_NAME) motion use

语音识别:

Key    :  Privacy - Speech Recognition Usage Description   
Value  :  $(PRODUCT_NAME) speech use

SiriKit:

Key    :  Privacy - Siri Usage Description  
Value  :  $(PRODUCT_NAME) siri use

电视供应商:

Key    :  Privacy - TV Provider Usage Description   
Value  :  $(PRODUCT_NAME) tvProvider use

您可以在此链接中获取详细信息。


1
Privacy - Photo Library Usage Description did it for the error NSPhotoLibraryUsageDescription - Bruno Bieri
我是苹果开发的新手,这个问题很烦人。很高兴我找到了解决方法。干杯! - user2529011
1
@MaylorTaylor:是的,你必须添加它。 - Bhoopi
我稍微编辑了答案,以澄清视频录制需要麦克风权限(与相机权限一起)。这并不是很明显,我认为简单的评论可能不足以满足快速读者的需求。 - igorsantos07

127

随着苹果在 iOS 10 中更改了访问任何用户私有数据类型的方式。

您需要将“Privacy - Camera usage description”键添加到您的应用程序的Info.plist中,以及他们适用于您的应用程序的使用信息,就像下面的示例一样,我提供了我用于扫描条形码的示例。

有关更多信息,请查看以下屏幕截图。

输入图像描述


67
你需要在info.plist中添加以下key:

NSCameraUsageDescriptionPrivacy - Camera usage description

并添加使用说明。
详细的截图可以在这个链接中找到:链接

听起来他已经添加了,但仍然崩溃。这与我遇到的问题相同,即使那个KVP在plist中,它仍会崩溃,好像它不存在一样。 - user5104686

62

或者打开Info.plist作为源代码,添加以下内容:

<key>NSCameraUsageDescription</key>
<string>Camera usage description</string>

4
如果有人想本地化“NSCameraUsageDescription”,请在您的本地化infoPlist.strings文件中添加"NSCameraUsageDescription" = "需要访问相机"; - Khurram Shehzad

49

使用这些原始值并将其复制到Info.plist中

    <key>NSCalendarsUsageDescription</key>
      <string>$(PRODUCT_NAME) calendar events</string>
    <key>NSRemindersUsageDescription</key>
      <string>$(PRODUCT_NAME) reminder use</string>
    <key>NSCameraUsageDescription</key>
      <string>This app requires to access your photo library to show image on profile and send via chat</string>
    <key>NSMicrophoneUsageDescription</key>
      <string>This app requires to access your microphone to record video with your voice send via chat</string>
    <key>NSPhotoLibraryUsageDescription</key>
      <string>This app requires to access your photo library to show image on profile and send via chat</string>
    <key>NSContactsUsageDescription</key>
       <string>$(PRODUCT_NAME) contact use</string>
    <key>NSLocationAlwaysUsageDescription</key>
      <string>$(PRODUCT_NAME) location use</string>
    <key>NSLocationWhenInUseUsageDescription</key>
      <string>$(PRODUCT_NAME) location use</string>

1
你从哪里获得这些原始的键名? - Omar N Shamali
1
这太棒了。它让我在xCode中省去了很多点击。 - MaylorTaylor

29

Xcode的用户界面在不同版本之间有些许变化,因此如果需要,您可以在这里更新9.0 beta 4的plist文件

项目->目标->信息输入图像描述


2
这应该是被接受的答案!我在XCode 9.2上遇到了完全相同的问题,尽管已经将<key>NSCameraUsageDescription</key>添加到了info.plist中。 - psantos
2
绝对是被接受的答案!!我的项目有两个目标,我尝试将 <key>NSCameraUsageDescription</key> 添加到第二个 info.plist 文件中,但没有效果。我可以确认 XCode(10.1)绝对不会通过运行 git status 来考虑这些更改,因为我的另一个目标的 info.plist 没有任何更改。所以正确的方法是通过 Project->Target->Info 进行操作。谢谢! - bra.Scene

8
如果您使用的是Ionic,则可以在platform ios标签内添加以下内容,直接从config.xml中解决问题:
<platform name="ios">
.
.
.
    <config-file target="*-Info.plist" parent="NSPhotoLibraryUsageDescription">
        <string>photo library usage description</string>
    </config-file>
    <config-file target="*-Info.plist" parent="NSCameraUsageDescription">
        <string>camera usage description</string>
    </config-file>
.
.
.
</platform>

我也想感谢@BHUPI的答案。


6

对于那些即使已经在 Info.plist 中添加了正确的密钥仍然遇到错误的人:

确保将密钥添加到正确的 Info.plist 中。最新版本的 xCode 显然有 3 个 Info.plist。

一个是在您的应用程序名称文件夹下,这解决了我的问题。

第二个是在 YourappnameTests 下,第三个是在 YourappnameUITests 下。

希望能有所帮助。


4

在尝试使用相机时,我遇到的另一个情况是,即使添加了“相机使用说明”,它仍然忙于崩溃,并给出相同的_CRASHING_DUE_TO_PRIVACY。在无法从调用堆栈中获得任何有意义的信息后,切换到“组织者”并查看设备上的崩溃报告。我发现它实际上是由于缺少“麦克风使用说明”而抱怨隐私问题。我添加了这个说明并摆脱了这样一个神秘的故障。


2

我曾经遇到同样的问题,但找不到解决方法。Mark90说得对,有很多info.plist文件,你需要编辑正确的那一个。进入项目,在TARGETS下选择项目(而不是测试),在选项卡中选择Info,并在“Custom iOS Target Properties”下添加权限。


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