iOS 崩溃:__CRASHING_DUE_TO_PRIVACY_VIOLATION__

iOS Crash: __CRASHING_DUE_TO_PRIVACY_VIOLATION__

这是我的崩溃报告的一部分。

#0. com.apple.contacts.store
0  libsystem_kernel.dylib         0x18c34d1c4 semaphore_wait_trap + 8
1  libdispatch.dylib              0x18c2387d8 _dispatch_semaphore_wait_slow + 216
2  Contacts                       0x195b99584 +[CNAuthorization requestAccessWithTimeout:entityType:] + 224
3  Contacts                       0x195b6288c -[CNiOSAddressBookDataMapper requestAccessForEntityType:error:] + 40
4  Contacts                       0x195b733fc -[CNDataMapperContactStore unifiedContactCountWithError:] + 60
5  ContactsUI                     0x196b7603c -[CNContactStoreSnapshot countOf_contacts] + 144
6  ContactsUI                     0x196b78820 -[CNContactStoreSnapshot prepareEnoughContacts] + 244
7  libdispatch.dylib              0x18c2261bc _dispatch_client_callout + 16
8  libdispatch.dylib              0x18c2337f0 _dispatch_barrier_sync_f_invoke + 84
9  ContactsUI                     0x196b7a9ec -[CNContactStoreDataSource _reloadSynchronously:] + 180
10 ContactsUI                     0x196b7af5c -[CNContactStoreDataSource currentSnapshot] + 64
11 ContactsUI                     0x196b79b80 -[CNContactStoreDataSource contacts] + 24
12 ContactsUI                     0x196b2045c -[CNContactListViewController _updateCountStringNow:] + 68
13 ContactsUI                     0x196b1f210 -[CNContactListViewController loadView] + 408
14 UIKit                          0x1932525bc -[UIViewController loadViewIfRequired] + 184
15 UIKit                          0x19330c2bc -[UINavigationController _layoutViewController:] + 72
16 UIKit                          0x19330c194 -[UINavigationController _updateScrollViewFromViewController:toViewController:] + 416
17 UIKit                          0x19330b4dc -[UINavigationController _startTransition:fromViewController:toViewController:] + 140
18 UIKit                          0x19330af28 -[UINavigationController _startDeferredTransitionIfNeeded:] + 856
19 UIKit                          0x19330aadc -[UINavigationController __viewWillLayoutSubviews] + 64
20 UIKit                          0x19330aa40 -[UILayoutContainerView layoutSubviews] + 188
21 UIKit                          0x1934e3fdc _runAfterCACommitDeferredBlocks + 292
22 UIKit                          0x1934d5d50 _cleanUpAfterCAFlushAndRunDeferredBlocks + 560
23 UIKit                          0x1932450b4 _afterCACommitHandler + 168
24 CoreFoundation                 0x18d34a0c0 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32
25 CoreFoundation                 0x18d347cf0 __CFRunLoopDoObservers + 372
26 CoreFoundation                 0x18d348180 __CFRunLoopRun + 1024
27 CoreFoundation                 0x18d2762b8 CFRunLoopRunSpecific + 444
28 GraphicsServices               0x18ed2a198 GSEventRunModal + 180
29 UIKit                          0x1932bd7fc -[UIApplication _run] + 684
30 UIKit                          0x1932b8534 UIApplicationMain + 208
31 MainApp                        0x1001365e8 main (main.m:16)
32 libdispatch.dylib              0x18c2595b8 (Missing)

经过我的研究,似乎是 com.apple.contacts.store 由于隐私政策导致了崩溃。问题是我根本没有使用联系人存储。这只发生在一位用户身上。

看起来您正在使用 Apple 的 ContactsUI 框架,这要求您在 info.plist 中包含 NSContactsUsageDescription 以请求用户的许可。更多信息在隐私权下:https://developer.apple.com/reference/contacts

https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW14

如果您使用启用了 dataDetectorTypesUITextView,用户可以通过 phone 数字上的强制按下触摸手势进入上下文菜单(由系统提供) .从此菜单中,可以使用此 phone 号码创建新联系人,或者可以将 phone 号码添加到现有联系人(参见屏幕截图)。一旦用户点击 "Add To Contact" (Zu Kontakt hinzufügen),应用程序将尝试请求访问地址簿。如果您的 Info.plist 中没有 NSContactsUsageDescription,它将崩溃。