当尝试访问联系人时,应用程序会出现__CRASHING_DUE_TO_PRIVACY_VIOLATION__崩溃。

43
在升级到iOS 10后,尝试通过插件cordova-plugin-contacts v2.2.0访问联系人时,应用程序会弹出错误:

__CRASHING_DUE_TO_PRIVACY_VIOLATION__

我目前不知道能提供什么其他额外信息,如果可以更具体地告诉我就好了。谢谢。

也许这个链接有用:https://dev59.com/81kS5IYBdhLWcg3w25oM#39416858,但我找不到如何在cordova中指定这些使用说明的指南。


你创建了一个Xcode项目吗?使用Xcode的导航器(左侧面板)查找Info.Plist文件,在plist文件中添加你在问题链接中找到的条目。完成后安装全新的副本。 - NeverHopeless
找到了,现在,我需要使用哪个确切的键/字符串组合来处理联系人?链接中的组合是关于相机的。 - Daniel Birowsky Popeski
7个回答

35
创建Xcode项目并找到 Info.Plist 文件后,您可以尝试添加 NSContactsUsageDescription 键,该键应接受一个字符串值。
完整的 Cocoa Keys 列表,请参见这里
希望这可以帮助您!
编辑部分文档说明:(这可以帮助您了解为什么会崩溃)
重要提示:为了保护用户隐私,在 iOS 10.0 或更新版本上链接的 iOS 应用程序,如果访问用户的联系人,则必须静态声明其意图。将 NSContactsUsageDescription 键包含在您的应用程序的 Info.plist 文件中,并为此键提供一个用途字符串。如果您的应用程序尝试访问用户的联系人而没有相应的用途字符串,则您的应用程序将退出。

确实有帮助,现在我需要弄清楚如何从Cordova配置中操作那个plist文件。 - Daniel Birowsky Popeski
一旦您在“Info.Plist”中添加了条目,系统应该在执行期间从plist本身读取此条目,您不必(卸载)加载此plist文件。当代码发起对此类基于权限的服务的请求时,它会在“<ProductName>Info.plist”文件中查找使用说明。 - NeverHopeless
当然,但问题在于所有这些特定于平台的文件都是从Cordova配置文件生成的。因此,它们不是版本控制系统的一部分。因此,我必须在Cordova配置中明确指定这些更改,以便它们可以在任何地方生成。 - Daniel Birowsky Popeski
我认为没有直接的方法,因为当我使用Unity并将其移植到Xcode时,需要在部署之前进行一些手动步骤。我通过谷歌找到了这个链接 https://dev59.com/5mEh5IYBdhLWcg3wIgbN ,其中提到编写和安装插件可以完成此任务。另一个编写插件的示例是 http://meumobi.github.io/tips%20and%20tricks/2016/05/05/add-entry-ios-plist-cordova.html。 - NeverHopeless
是的,那就是我要走的路线。 - Daniel Birowsky Popeski

8

我的应用缺少NSFaceIDUsageDescription


1
如果你发现这只发生在iPhone X设备上,那么肯定是*info.plist中缺少NSFaceIDUsageDescription关键字。 - Chao Ruan

6
我的Info.plist文件缺少NSPhotoLibraryAddUsageDescription。现在与照片库关联的权限有两个(从iOS 11开始):
  • NSPhotoLibraryUsageDescription - 访问照片库的权限
  • NSPhotoLibraryAddUsageDescription - 写入照片库的权限
我在iOS 11之前已经获得了第一个权限,这是使用照片库所需的唯一密钥。显然,在iOS 11中添加了第二个键并且必须添加到照片库中才能写入照片。因此,如果您支持iOS10但不包括第二个键,则在iOS 11上会崩溃。 所有密钥都在此处

你对我的情况是正确的,我在这里也找到了相同的解释。https://ios.developreference.com/article/14888338/Identifying+privacy+violation+in+iOS+10 - Gomer Grek

6
简而言之,用法描述需要在* info.plist内指定。
这对于Cordova代码库来说并不好,因为.plist文件不是存储库的一部分。我找到的最简单的方法是将它们放在config.xml中,具体步骤如下:
1. 安装cordova-custom-config 2. 在config.xml中添加以下内容:
<platform name="ios">
    <config-file parent="NSContactsUsageDescription" target="*info.plist">
      <string>Easily invite your friends</string>
    </config-file>
</platform>

4
对于我来说,我尝试请求麦克风权限,但是我没有定义“隐私-麦克风使用说明”字符串。
进入您的Info.plist文件,并向下滚动到以“隐私”开头的值。确保为与您的应用程序相关的所有内容添加键和字符串值。
请参考以下截图:Screenshot of the values that start with Privacy in the info.plist

你尝试将“NSMicrophoneUsageDescription”添加为您的plist中的麦克风使用说明键吗?您可以在我的答案中添加的链接中找到它。 - NeverHopeless
这对我来说是升级到较新的iOS版本后的答案,在此之前这些并不需要。感谢提醒! - DBrown

1

我使用Kudan AR via Unity时遇到了同样的错误,@NeverHelpless的回答很准确,但修复方法是NSCameraUsageDescription(将其添加到Info.plist中并加上描述字符串)


0

如果您清楚问题出现在访问联系人时,请按照上面答案中发布的说明进行操作。

但是,如果这些方法都没有帮助您解决问题,您可能需要阅读我在此处提供的相关答案,了解其他可能的解决方案(如果您的应用程序使用蓝牙): https://dev59.com/q1gQ5IYBdhLWcg3weD2E#60073667


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