Как использовать PHAuthorizationStatusLimited в iOS 14
Чтобы получить дату создания фотографии, используйте requestAuthorizationForAccessLevel перед показом PHPickerViewController.
PHAccessLevel level = PHAccessLevelReadWrite;
[PHPhotoLibrary requestAuthorizationForAccessLevel:level handler:^(PHAuthorizationStatus status) {
if (status == PHAuthorizationStatusLimited || status == PHAuthorizationStatusAuthorized) {
dispatch_async(dispatch_get_main_queue(), ^{
PHPickerConfiguration *configuration = [[PHPickerConfiguration alloc] initWithPhotoLibrary:[PHPhotoLibrary sharedPhotoLibrary]];
configuration.filter = [PHPickerFilter imagesFilter];
configuration.selectionLimit = 1;
PHPickerViewController *picker = [[PHPickerViewController alloc] initWithConfiguration:configuration];
picker.delegate = self;
[self showViewController:picker sender:nil];
});
}
}];
хотя статус ограничен, но iOS 14 по-прежнему отображает все изображения.
Как я могу получить только ограниченное количество фотографий с помощью PHPickerViewController?
1 ответ
Итак, в iOS 14 изменилось несколько вещей, давайте рассмотрим шаг за шагом.
1. Как прочитать статус разрешения доступа к PHPhotoLibrary
Старый
let status = PHPhotoLibrary.authorizationStatus()
Новый
let status = PHPhotoLibrary.authorizationStatus(for: .readWrite)
2. Как запросить разрешение на доступ к PHPhotoLibrary
Старый
PHPhotoLibrary.requestAuthorization { status in
//your code
}
Новый
PHPhotoLibrary.requestAuthorization(for: .readWrite) { status in
switch status {
case .limited:
print("limited access granted")
default:
print("denied, .restricted ,.authorized")
}
}
Вы обязаны показать галерею, как показано ниже, в случае, если пользователь предоставил вам ограниченное разрешение.
if status == .limited {
PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: self)
}
Когда вы представляете LimitedLibraryPicker, выбранные изображения из предыдущего сеанса будут уже отмечены флажком вместе с сообщением в верхней части экрана - " Выберите больше фотографий или отмените выбор, чтобы закрыть доступ "
В случае, если пользователь предоставил вам ограниченный доступ, вы по-прежнему представляете обычную галерею, используя UIImagePickerController или стороннюю библиотеку, такую как BSImagePicker, галерея со всеми изображениями будет отображаться, даже если вы можете выбрать и импортировать в свое приложение, но в консоли Xcode 12 она будет отображаться предупреждения, как показано ниже
Failed to decode image
[ImageManager] Failed to get sandbox extension for url: file///filepath/5003.JPG, error: Error Domain=com.apple.photos.error Code=41008 "Invalid asset uuid for client" UserInfo={NSLocalizedDescription=Invalid asset uuid for client}