iOS 10.0 运行时崩溃中的 NSCameraUsageDescription?

Posted

技术标签:

【中文标题】iOS 10.0 运行时崩溃中的 NSCameraUsageDescription?【英文标题】:NSCameraUsageDescription in iOS 10.0 runtime crash? 【发布时间】:2017-01-20 19:10:12 【问题描述】:

使用ios 10.0 最后一个测试版。我曾尝试使用相机扫描我的应用程序中的条形码,但它因运行时错误而崩溃。

此应用已崩溃,因为它试图访问隐私敏感信息 没有使用说明的数据。应用的 Info.plist 必须包含 一个带有字符串值的 NSCameraUsageDescription 键,用于解释 用户应用如何使用这些数据。

把这个key放入plist,还是crash?

【问题讨论】:

我有同样的问题,在 info.plist 中添加了 NSCameraUsageDescription,但仍然崩溃并显示相同的消息。你有办法解决吗?显然,即使您已经添加了密钥,也没有人知道它会崩溃。 如果你将条目添加到正确的 info.plist 文件中,但仍然失败,可能是因为 Xcode 有时无法注意到资源文件的更改,例如 info.plist、图像、音频、电影、等。您可能需要从 Derived Data 文件夹执行清理或删除应用程序构建产品,以强制 Xcode 使用最新版本。 【参考方案1】:

在 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

家庭套件:

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

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

【讨论】:

Privacy - Photo Library Usage Description 这样做是为了错误NSPhotoLibraryUsageDescription 我是 Apple 开发的新手,这个问题很烦人。很高兴我遇到了它。干杯! @MaylorTaylor:是的,你必须添加它。【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

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

NSCameraUsageDescription 要么 Privacy - Camera usage description

并添加使用说明。

详细截图可在此link获得

【讨论】:

听起来他已经添加了,但仍然出现崩溃。这与我遇到的问题相同,即使 KVP 在 plist 中,它仍然像不在一样崩溃。【参考方案4】:

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

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

【讨论】:

如果有人希望本地化“NSCameraUsageDescription”,请在本地化的 infoPlist.strings 文件中添加 "NSCameraUsageDescription" = "Requires access to the camera";【参考方案5】:

使用这些原始值并复制到 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 中进行大量点击【参考方案6】:

xcode UI 已从一个版本更改为下一个版本,因此如果有帮助,您可以在此处更新 9.0 beta 4 的 plist 项目->目标->Info

【讨论】:

这应该是公认的答案!尽管已经在 info.plist 中添加了 &lt;key&gt;NSCameraUsageDescription&lt;/key&gt;,但我在 XCode 9.2 上遇到了同样的问题。 绝对接受的答案!!我的项目中有两个目标,我尝试将此&lt;key&gt;NSCameraUsageDescription&lt;/key&gt; 添加到第二个 info.plist 文件中,但没有任何效果,我可以确认 XCode (10.1) 绝对是没有通过运行 git status 来考虑这些更改,因为我的 info.plist 对另一个目标没有任何更改。所以正确的方法是通过Project->Target->Info。谢谢大佬!【参考方案7】:

对于那些即使您在 Info.plist 中添加了正确的键仍然收到错误的人:

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

一个在你的应用名称的文件夹下,它为我解决了问题。

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

希望对你有帮助。

【讨论】:

【参考方案8】:

如果你使用的是 Ionic,你可以直接从 config.xml 中通过添加内部平台 ios 标签来解决它:

<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 的回答。

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

我检查了plist,发现它不起作用,只有在“项目”信息中,您需要添加“隐私 - 相机......”,然后它应该可以工作。希望能帮到你。

【讨论】:

【参考方案11】:

您可以通过在应用的 Info.plist 中添加使用键以及目的字符串来实现此目的。 NSCameraUsageDescription 指定应用访问设备摄像头的原因

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

【讨论】:

【参考方案12】:

我遇到了同样的问题,找不到解决方案。 Mark90 是对的,有很多 info.plist 文件,你应该编辑正确的。转到 Project,在 TARGETS 下选择项目(不是测试),在标签栏中选择 Info 并在“Custom iOS Target Properties”下添加权限。

【讨论】:

【参考方案13】:

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

【讨论】:

以上是关于iOS 10.0 运行时崩溃中的 NSCameraUsageDescription?的主要内容,如果未能解决你的问题,请参考以下文章

iOS6中的MapView在缩放地图时崩溃

ios 应用程序在调试模式下完美运行,但在发布时崩溃

ios 版本 13 中的照片库插件崩溃

在连接到 IPv6 网络的 Wi-Fi 上运行 iOS 10.0

iOS中的崩溃类型

如何在 ios 10.0 中授予访问电话通讯录的权限?