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时仍然值得添加密钥.
让我们明白两件事。
在 plist 文件中有如此多的隐私密钥,例如相机使用、联系人使用位置使用、面部识别使用等......避免崩溃的描述。
第二件事是,特别是对于NSPhotoLibraryUsageDescription,如果您在iOS 6 以上和iOS 11.3 以下使用此密钥,那么您将不会出现任何崩溃,但在iOS 11.3 及更高版本之后,您需要再添加一个密钥,即NSPhotoLibraryAddUsageDescription。
同时,如果您的应用程序是 iOS 8 或 9 或更高版本至最新的 iOS 11.3 及更高版本,则您可以同时使用这两个密钥。
在__CRASHING_DUE_TO_PRIVACY_VIOLATION__碰撞发生每当有一个强制许可字符串中缺少应用程式的plist中。Apple 有时会在新的 iOS 版本中更改权限级别。因此,正在运行的代码将开始因对 plist 有新要求的 iOS 更新而中断。
您应该评估此处所有答案中列出的哪些权限可能会影响您(NSFaceIDUsageDescription、NSCameraUsageDescription、NSPhotoLibraryAddUsageDescription、 其他人?),因为您可能不会在您的应用中使用任何这些功能。
就我而言,我们支持蓝牙 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)
这修复了它。
情况1
当尝试使用 a 读取文件UIDocumentPickerViewController而不首先调用startAccessingSecurityScopedResource()返回的URL.
案例2
这是另一种可能的(角落)情况:
如果您用于EKEventEditViewController将事件添加到用户的日历中,则NSCalendarsUsageDescriptioninfo.plist 中的密钥可能不够!
如果用户尝试将受邀者添加到活动中,NSContactsUsageDescription则还需要密钥。否则,当用户尝试搜索其联系人时,就会发生隐私侵犯并且应用程序崩溃。
| 归档时间: |
|
| 查看次数: |
9158 次 |
| 最近记录: |