2017-03-10 53 views
4

在Crashlytics中,我可以看到iOS 10用戶經常遇到這個崩潰。但是,當我在使用iPhone 7/10.2的模擬器中測試時,我無法重現崩潰。在我的plist中,我已經有字符串__CRASHING_DUE_TO_PRIVACY_VIOLATION__

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 

任何線索如何重現或解決這一問題?我確實允許用戶訪問聯繫人,但當我在模擬器中測試該功能時,系統不會提示您提供任何權限。但是,當用戶從我的應用程序訪問攝像頭時,模擬器確實會提示我獲得許可。這讓我認爲訪問聯繫人不需要一個字符串。

回答

9

我必須在plist中添加一個字符串NSCameraUsageDescription,因爲允許用戶拍照。

1

您必須從授予許可從用戶訪問通訊簿。

#import <AddressBookUI/AddressBookUI.h> 

    // Request authorization to Address Book 
    ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL); 

    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) { 
    ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) { 
     if (granted) { 
      // First time access has been granted, add the contact 
      [self _addContactToAddressBook]; 
     } else { 
      // User denied access 
      // Display an alert telling user the contact could not be added 
     } 
    }); 
    } 
    else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) { 
    // The user has previously given access, add the contact 
    [self _addContactToAddressBook]; 
    } 
    else { 
    // The user has previously denied access 
    // Send an alert telling user to change privacy setting in settings app 
    } 

有更新在iOS 9.0及以上版本:

從蘋果網站:

重要 地址簿UI框架iOS中9.使用過時的ContactsUI框架中定義,而不是這些API 。要了解更多信息,請參閱ContactsUI。