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 中添加了<key>NSCameraUsageDescription</key>
,但我在 XCode 9.2 上遇到了同样的问题。
绝对接受的答案!!我的项目中有两个目标,我尝试将此<key>NSCameraUsageDescription</key>
添加到第二个 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?的主要内容,如果未能解决你的问题,请参考以下文章