iOS перестала запрашивать у пользователя разрешение на фотобиблиотеку

iOS больше не запрашивает у пользователя разрешение на фотобиблиотеку. Даже когда я удалил приложение с устройства. Это также происходит на Simulator.

switch ([ALAssetsLibrary authorizationStatus]) { case ALAuthorizationStatusAuthorized: RPMLog(@"authorized"); break; case ALAuthorizationStatusDenied: RPMLog(@"denied"); break; case ALAuthorizationStatusNotDetermined: RPMLog(@"not determined"); break; case ALAuthorizationStatusRestricted: RPMLog(@"restricted"); break; } 

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

Затем я запрашиваю numberOfAssets в SavedPhotos и получаю его без подсказки доступа:

 ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) { if (!group) return; UIActionSheet *actionSheet = nil; if (([group numberOfAssets] > 0)) { actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) destructiveButtonTitle:nil otherButtonTitles:NSLocalizedString(@"Take new photo", nil), NSLocalizedString(@"Use last photo taken", nil), NSLocalizedString(@"Choose existing", nil), nil]; } else { actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) destructiveButtonTitle:nil otherButtonTitles:NSLocalizedString(@"Take new photo", nil), NSLocalizedString(@"Choose existing", nil), nil]; } actionSheet.actionSheetStyle = UIActionSheetStyleBlackTranslucent; [actionSheet showFromTabBar:self.tabBar]; [TestFlight passCheckpoint:@"New Look: Tab Bar"]; } failureBlock:^(NSError *error) { NSAssert(!error, [error description]); }]; 

Что происходит: iOS сохраняет разрешение, предоставленное вашему приложению, сопоставленное с идентификатором пакета, если приложение удалено, эти данные сохраняются в течение 24 часов, это позволяет избежать повторного запроса пользователя, если он переустанавливает приложение (возможно, после ошибочного удаления приложения) ,

Это также происходит для подсказок Push Notification.

В качестве обходного пути я цитирую Apple в отношении Push-уведомлений:

Сброс предупреждений о разрешении Push-уведомлений на iOS

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

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

Источник: Техническая нота Apple TN2265

Поскольку вопрос заключается в разрешениях на фотобиблиотеку, существует другой способ без изменения системных часов и выключения устройства.

Вы можете просто перейти в приложение «Настройки»

(Общие> Сброс> Сброс местоположения и конфиденциальности).

Это заставит приложения снова запрашивать библиотеку фотографий, местоположение и другие разрешения.

Перезапуск через приложение настроек сложно автоматизировать. Мы используем simctl для simctl сброса содержимого и настроек симуляторов, чтобы сбросить диалог разрешений. Это потребует повторной установки приложения в симуляторе, но снова simctl может это сделать.

Если вы используете iOS Simulator, сброс его с помощью Simulator / Reset Content and Settings …, похоже, сбросит эту настройку. Конечно, вам нужно будет переустановить приложение на него.

Вы можете проверить это разрешение двумя типами:

  • В симуляторе
    вы можете сделать Simulator / Reset Content and Settings .
  • В физическом устройстве (iPhone, iPad)
    Вы можете изменить дату, по крайней мере разница должна быть 24 часа.

но сначала удалите приложение с устройства, затем перезапустите, затем примените эту вещь, тогда она будет работать.

Вам просто нужно следовать ниже, нет необходимости переустанавливать или удалять приложение.

  • Приложение удалено из фона
  • Перейдите в Настройки-> Общие-> Сброс-> нажмите « Сбросить местоположение и конфиденциальность»

Надеюсь, тебе нужна помощь.

  • Измените цвет темного оттенка серого, удерживая пользовательский UIButton?
  • Возвращаемый объект метода из внутреннего блока
  • как установить текст UISegmentedControl с левой стороны
  • AVPlayerItemDidPlayToEndTimeNotification публикуется, когда элемент не закончил игру
  • REGEX, чтобы получить следующее Следующее слово
  • Изменение размера шрифта uibutton не работает
  • При удалении ячейки и в PFQueryTableViewController она получает ошибку Assertion в
  • iOS: пользовательский UISegmentedControl не настраивается при изменении ориентации
  • Ошибка Xcode при удалении варианта IPR iPad
  • Обмен изображениями с Whatsapp & Facebook
  • Как можно реализовать скользящие UITableViewCells?
  • Давайте будем гением компьютера.