Сбой requestAccessForMediaType в iOS 10

В моем приложении я использую card.io для сканирования кредитных карт. В iOS 9 он работает нормально. В iOS 10 происходит сбой приложения, и я не могу найти журнал сбоев в консоли xcode 8 beta 2, поскольку он выдает много мусорных сообщений.

А затем я проверил в настройках приватности-> настройки, чтобы увидеть, не отключена ли камера для моего приложения, но мое приложение не указано в этом разделе. Кажется, что iOS 10 не дает разрешения моему приложению использовать камеру.

Я использую следующий код для запроса разрешения:

-(BOOL)checkCameraPermissions{

    AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
    if(authStatus == AVAuthorizationStatusAuthorized)
    {
        // start card-io
        return YES;
    }
    else if(authStatus == AVAuthorizationStatusNotDetermined)
    {

        [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted)
         {
             if(granted)
             {
                 //Start card-io
                 [self testIsNewCard];
             }

         }];
    }
    else if (authStatus == AVAuthorizationStatusRestricted)
    {
        //Alert
        // Alert camera denied

        UIAlertController *aCon=[UIAlertController alertControllerWithTitle:@"Camera denied" message:@"Camera cannot be used" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction *ok =[UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            [aCon dismissViewControllerAnimated:YES completion:nil];
        }];
        [aCon addAction:ok];
        [self presentViewController:aCon animated:YES completion:nil];

        return NO;

    }

    return NO;

}

Когда я запускаю этот код, authStatus возвращается как AVAuthorizationStatusNotDetermined

и приложение упало сразу после входа в блок requestAccessForMediaType:AVMediaTypeVideo

В консоли отображается так много журналов мусора, и я понятия не имею, чтобы найти сообщение об ошибке.

Редактировать: я нашел возможность отключить все ненужные журналы в xcode 8. Ответ размещен здесь. Но все же xcode не показывал никаких аварийных журналов даже после отключения отладки backtrace.

Мой xcode8 просто показывает это сообщение, и приложение просто закрывается:

  App[1124:226447] [access] <private>

Я также попытался сбросить местоположение и конфиденциальность, но приложение по-прежнему зависает при попытке запросить доступ к мультимедиа.

Есть идеи, почему это происходит?

3 ответа

Решение

Я добавил "Privacy - Camera Usage Description" ключ к моему файлу info.plist, и теперь он работает.

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

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

Для получения дополнительной информации, пожалуйста, найдите ниже GIF.

GIF

Или, если вы хотите добавить через info.plist, вам нужно добавить ключ NSCameraUsageDescription.

Просто скопируйте и вставьте строку ниже в info.plist.

<key>NSCameraUsageDescription</key>
<string>Take the photo</string>

Пожалуйста, найдите ниже GIF для получения дополнительной информации.

GIF

Для получения дополнительной информации, пожалуйста, просмотрите ссылку.

iOS 10 продолжил политику конфиденциальности и внедрил новые правила конфиденциальности. И мы должны помнить, чтобы реализовать их в наших следующих проектах.

Для вашей проблемы вам нужно добавить следующую строку в info.plist

<!--  Camera -->
<key>NSCameraUsageDescription</key>
<string><Your description goes here></string>

Ниже приведены остальные правила конфиденциальности:

<!--  Photo Library -->
<key>NSPhotoLibraryUsageDescription</key>
<string><Your description goes here></string>

<!--  Camera -->
<key>NSCameraUsageDescription</key>
<string><Your description goes here></string>

<!--  Microphone -->
<key>NSMicrophoneUsageDescription</key>
<string><Your description goes here></string>

<!--  Location -->
<key>NSLocationUsageDescription</key>
<string><Your description goes here></string>

<!--  Location When In Use -->
<key>NSLocationWhenInUseUsageDescription</key>
<string><Your description goes here></string>

<!--  Location Always -->
<key>NSLocationAlwaysUsageDescription</key>
<string><Your description goes here></string>

<!--  Calendars -->
<key>NSCalendarsUsageDescription</key>
<string><Your description goes here></string>

<!-- ⏰ Reminders -->
<key>NSRemindersUsageDescription</key>
<string><Your description goes here></string>

<!--  Motion -->
<key>NSMotionUsageDescription</key>
<string><Your description goes here></string>

<!--  Health Update -->
<key>NSHealthUpdateUsageDescription</key>
<string><Your description goes here></string>

<!--  Health Share -->
<key>NSHealthShareUsageDescription</key>
<string><Your description goes here></string>

<!-- ᛒ Bluetooth Peripheral -->
<key>NSBluetoothPeripheralUsageDescription</key>
<string><Your description goes here></string>

<!--  Media Library -->
<key>NSAppleMusicUsageDescription</key>
<string><Your description goes here></string>

Надеюсь это поможет.:)

Другие вопросы по тегам