__CRASHING_DUE_TO_PRIVACY_VIOLATION__

ami*_*mit 13 crash permissions privacy ios ios-permissions

在Crashlytics中,我可以看到iOS 10用户经常遇到此崩溃.但是,当我使用iPhone 7/10.2在Simulator中测试时,我无法重现崩溃.在我的plist中,我已经有了字符串

NSCalendarsUsageDescription,NSMicrophoneUsageDescription和NSPhotoLibraryUsageDescription.

这是来自Crashlytics的堆栈跟踪:

Crashed: com.apple.root.default-qos
0  libsystem_kernel.dylib         0x183765d74 __abort_with_payload + 8
1  libsystem_kernel.dylib         0x18376249c <redacted> + 100
2  libsystem_kernel.dylib         0x1837624c8 abort_with_payload + 10
3  TCC                            0x1869d6328 __TCCAccessRequest_block_invoke_2.80 + 258
4  TCC                            0x1869d6224 __CRASHING_DUE_TO_PRIVACY_VIOLATION__ + 702
5  TCC                            0x1869d9330 __tccd_send_block_invoke + 348
6  libxpc.dylib                   0x18386afcc _xpc_connection_reply_callout + 80
7  libxpc.dylib                   0x18386af3c _xpc_connection_call_reply + 40
8  libdispatch.dylib              0x1836221bc _dispatch_client_callout + 16
9  libdispatch.dylib              0x183630a4c _dispatch_queue_override_invoke + 732
10 libdispatch.dylib              0x18363234c _dispatch_root_queue_drain + 572
11 libdispatch.dylib              0x1836320ac _dispatch_worker_thread3 + 124
12 libsystem_pthread.dylib        0x18382b2a0 _pthread_wqthread + 1288
13 libsystem_pthread.dylib        0x18382ad8c start_wqthread + 4
Run Code Online (Sandbox Code Playgroud)

有任何线索如何重现或修复此问题?我允许用户访问联系人,但在模拟器中测试该功能时,系统不会提示我获得任何权限.但是,当用户从我的应用程序访问摄像头时,模拟器会提示我进行许可.这让我觉得访问联系人不需要字符串.

Max*_*tov 25

如果您在iPhone X上看到这些崩溃并且您使用Touch ID/Face ID,原因可能是NSFaceIDUsageDescription您的Info.plist中缺少密钥.这个密钥是在iOS 11中添加的,看起来它可能在iOS 11.3之后成为强制性的,因为在iOS 11.3发布后,我看到iPhone X上出现了大量的崩溃.Apple 在这里模糊地记录了这里:

NSFaceIDUsageDescription(String - iOS).通过此键,您可以描述应用使用Face ID的原因.

重要提示:为保护用户隐私,在iOS 11或之后链接的iOS应用程序以及在硬件支持时访问Face ID的iOS应用程序必须静态声明这样做的意图.在应用程序的Info.plist文件中包含NSFaceIDUsageDescription键,并为此密钥提供目的字符串.如果您的应用尝试访问没有相应目的字符串的Face ID,您的应用可能会退出

iOS 11及更高版本支持此密钥.

有趣的是,我无法在我的开发iPhone X上重现iOS 11.3上的崩溃,也许它在调试或TestFlight构建中表现不同.如果我们相信Apple的文档,在您的应用中使用Face ID时仍然值得添加密钥.

  • 非常感谢@Max.非常非常有帮助. (3认同)

ami*_*mit 12

我必须NSCameraUsageDescription在plist中添加一个字符串,因为允许用户拍照.


Nar*_*ini 7

让我们明白两件事。

在 plist 文件中有如此多的隐私密钥,例如相机使用、联系人使用位置使用、面部识别使用等......避免崩溃的描述。

第二件事是,特别是对于NSPhotoLibraryUsageDescription,如果您在iOS 6 以上iOS 11.3 以下使用此密钥,那么您将不会出现任何崩溃,但在iOS 11.3 及更高版本之后,您需要再添加一个密钥,即NSPhotoLibraryAddUsageDescription

同时,如果您的应用程序是 iOS 8 或 9 或更高版本至最新的 iOS 11.3 及更高版本,则您可以同时使用这两个密钥。

所有键的参考


Jua*_*nez 6

__CRASHING_DUE_TO_PRIVACY_VIOLATION__碰撞发生每当有一个强制许可字符串中缺少应用程式的plist中。Apple 有时会在新的 iOS 版本中更改权限级别。因此,正在运行的代码将开始因对 plist 有新要求的 iOS 更新而中断。

您应该评估此处所有答案中列出的哪些权限可能会影响您(NSFaceIDUsageDescriptionNSCameraUsageDescriptionNSPhotoLibraryAddUsageDescription、 其他人?),因为您可能不会在您的应用中使用任何这些功能。

就我而言,我们支持蓝牙 BLE 设备,并且从 iOS13 开始需要一个新的强制许可:NSBluetoothAlwaysUsageDescription所以我添加到我的 plist 中:

<key>NSBluetoothAlwaysUsageDescription</key>
    <string>We use Bluetooth to connect to your ... while the app is in the background</string>
Run Code Online (Sandbox Code Playgroud)

这修复了它。


m_k*_*kis 5

情况1

当尝试使用 a 读取文件UIDocumentPickerViewController而不首先调用startAccessingSecurityScopedResource()返回的URL.

案例2

这是另一种可能的(角落)情况:

如果您用于EKEventEditViewController将事件添加到用户的日历中,则NSCalendarsUsageDescriptioninfo.plist 中的密钥可能不够

如果用户尝试将受邀者添加到活动中,NSContactsUsageDescription则还需要密钥。否则,当用户尝试搜索其联系人时,就会发生隐私侵犯并且应用程序崩溃。