iOS 10.0 运行时崩溃中的 NSCameraUsageDescription?

NSCameraUsageDescription in iOS 10.0 runtime crash?

使用 iOS 10.0 上次测试版。我曾尝试在我的应用程序中使用相机扫描条形码,但由于此运行时错误而崩溃。

This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.

把这个key放到plist里了,还是死机了?

您必须在 info.plist 中添加下面的键。

NSCameraUsageDescription 要么 Privacy - Camera usage description

并添加使用说明。

这里有详细的截图link

由于 Apple 更改了您访问 iOS 10 中任何用户私有数据类型的方式。

您需要将“Privacy - Camera usage description”键添加到您的应用程序的 Info.plist 及其适用于您的应用程序的使用信息,如下例中我提供的我曾经扫描过条形码。

如需了解更多信息,请查看以下屏幕截图。

在 iOS10 之后,您必须定义并提供您的应用程序在 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

家庭套件:

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

您可以在thislink中获取详细信息。

或者打开 Info.plist 作为源代码并添加:

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

我在尝试使用相机时遇到的另一个实例是,即使在添加 "Camera Usage Description" 之后,它仍然忙于提供相同的 _CRASHING_DUE_TO_PRIVACY 崩溃。在无法从调用堆栈中获取任何有形信息后,切换到 "Organizer" 并查看设备上的崩溃报告。我发现它实际上是在抱怨缺少 "Microphone Usage Description" 导致的隐私问题。我添加了它并摆脱了这种神秘的故障。

使用这些原始值并复制到 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>

xcode UI 从一个版本到下一个版本发生了一些变化,所以如果有帮助,您可以在这里更新 9.0 beta 4 的 plist 项目 -> 目标 -> 信息

您可以通过向您的应用程序的 Info.plist 添加一个使用密钥以及一个目的字符串来做到这一点。 NSCamera使用说明 指定您的应用访问设备相机的原因

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

对于那些即使您将正确的密钥添加到 Info.plist 中仍然出现错误的人:

确保您将密钥添加到正确的 Info.plist。 xCode 的较新版本,显然有 3 Info.plist.

其中一个位于包含您的应用程序名称的文件夹下,这为我解决了问题。

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

希望对您有所帮助。

如果您使用的是 Ionic,您可以通过添加内部平台 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 的回答

我检查了 plist,发现它不起作用,只有在 "project" 信息中,您需要添加 "Privacy - Camera ....",然后它应该可以工作。希望能帮到你。

我遇到了同样的问题,但找不到解决方案。 Mark90 是对的,有很多 info.plist 个文件,您应该编辑正确的。转到 Project,在 TARGETS select 项目(不是测试)下,在选项卡栏 select Info 中并在“Custom iOS Target Properties".

对于那些像我一样正在测试 Ionic 项目并且必须添加隐私权限密钥的人,请确保将它们添加到正确的 .plist 文件中。找到它的最佳方法是使用 Xcode 搜索,带有您的应用程序名称的就是那个。我分享了一个截图,右边有一圈Info.plist你需要修改。我浪费时间修改了库文件夹中的另一个,导致了关于隐私的错误。希望此屏幕截图有所帮助。在我的例子中,我在文件底部单击 + 并滚动直到找到 Privacy - Camera usage description,我插入了简短描述 used for Qrcodes 并开始工作