__CRASHING_DUE_TO_PRIVACY_VIOLATION__

В Crashlytics я вижу, что пользователи iOS 10 часто получают эту ошибку. Однако, когда я тестирую симулятор с помощью iPhone 7/10.2, я не могу воспроизвести авария. В моем 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

Любой ключ, как воспроизвести или исправить это? Я разрешаю пользователю получать доступ к контактам, но я не запрашиваю никаких разрешений при тестировании этой функции в симуляторе. Однако, когда пользователь обращается к камере из моего приложения, симулятор запрашивает у меня разрешение. Это заставляет меня думать, что строка не нужна для доступа к контактам.

Ответ 1

Я должен был добавить строку для NSCameraUsageDescription в NSCameraUsageDescription потому что пользователю разрешено делать фотографии.

Ответ 2

Если вы видите эти сбои на iPhone X, и вы используете Touch ID/Face ID, причиной может быть отсутствие ключа NSFaceIDUsageDescription в вашем Info.plist. Ключ был добавлен в iOS 11 и выглядит так, как будто он стал обязательным после iOS 11.3, учитывая, что я вижу всплеск сбоев на iPhone X после выхода iOS 11.3. Он смутно задокументированы Apple, здесь:

NSFaceIDUsageDescription (String - iOS). Этот ключ позволяет описать причину, в которой ваше приложение использует идентификатор лица.

Важно: чтобы защитить конфиденциальность пользователей, приложение iOS, которое ссылается на iOS 11 или после него, и которое будет обращаться к идентификатору лица, если аппаратное обеспечение поддерживает его, должно статически объявлять о намерении сделать это. Включите ключ NSFaceIDUsageDescription в свой файл Info.plist приложения и укажите целую строку для этого ключа. Если ваше приложение пытается получить доступ к идентификатору лица без соответствующей целевой строки, ваше приложение может выйти.

Этот ключ поддерживается в iOS 11 и более поздних версиях.

Интересно, что я не смог воспроизвести крах на iOS 11.3 на моем iPhone разработки iPhone, возможно, он ведет себя по-разному в отладочной или тестовой сборке. Все еще стоит добавить ключ, когда вы используете Face ID в своем приложении, если мы верим документации Apple.

Ответ 3

Позвольте понять две вещи.

В файле plist есть так много секретных ключей, например, использование камеры, использование использования местоположения, использование идентификатора лица и т.д.... если вы пропустите какой-либо из ключей и попытаетесь использовать эти функции, вы получите сбой, поэтому используйте ключи и описание авария авария.

Во-вторых, особенно для NSPhotoLibraryUsageDescription, если вы использовали этот ключ выше iOS 6 и ниже iOS 11.3, тогда вы не получите никакого сбоя, но после iOS 11.3 и более поздних версий вам нужно добавить еще один ключ, который является NSPhotoLibraryAddUsageDescription.

В то же время вы можете использовать оба ключа, если ваше приложение - iOS 8 или 9 или выше, до последней версии iOS 11.3 и выше.

Ссылка для всех ключей

Ответ 4

У меня была такая же проблема с iphone X с iOS 14. Решилась проблема добавления NSPhotoLibraryAddUsageDescription в файл info.plist.

в соответствии с этим форумом: https://forums.developer.apple.com/thread/100732

Ответ 5

Вам необходимо предоставить разрешение от пользователя на доступ к адресной книге.

  #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 и выше:

С веб-сайта Apple:

Важно. Структура пользовательского интерфейса адресной книги устарела в iOS 9. Вместо этого используйте API, определенные в структуре ContactsUI. Дополнительные сведения см. В разделе Контакты.

Ответ 6

В моем случае я получил такой же отчет о сбое при попытке прочитать файлы, используя UIDocumentPickerViewController без предварительного вызова startAccessingSecurityScopedResource() для возвращенного URL.