Я могу получить доступ к библиотеке фотографий iOS без разрешения - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь получить доступ к библиотеке фотографий для нового приложения, которое я пишу.У меня есть actionSheet, который позволяет пользователю выбирать между своей камерой и своей библиотекой фотографий.При открытии камеры пользователь запрашивает разрешение, а при открытии библиотеки фотографий - нет.Несмотря на это, он все равно переносит пользователя в свою библиотеку фотографий.Я специально упомянул об этом в своем info.plist, но разницы до сих пор нет.Любая помощь?Мой код:

@IBAction func allowAccessToPhotos(_ sender: Any) {

    let imagePickerController = UIImagePickerController()
    imagePickerController.delegate = self

    let actionSheet = UIAlertController(title: "Photo Source", message: "Choose a Source", preferredStyle: .actionSheet)

    actionSheet.addAction(UIAlertAction(title: "Photo Library", style: .default, handler: { (action:UIAlertAction) in imagePickerController.sourceType = .photoLibrary
        self.present(imagePickerController, animated: true, completion: nil)

    }))

    actionSheet.addAction(UIAlertAction(title: "Camera", style: .default, handler: { (action:UIAlertAction) in imagePickerController.sourceType = .camera
        self.present(imagePickerController, animated: true, completion: nil)

    }))

    actionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))

    self.present(actionSheet, animated: true, completion: nil)
}

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Начиная с iOS 11, UIImagePickerController работает удаленно в отдельном процессе.Таким образом, вашему приложению не требуется стандартная авторизация конфиденциальности для доступа к библиотеке фотографий, оно получает доступ только для чтения только для любого актива (ов), выбранных пользователем в imagePicker.

Чтобы добавить новый ресурс в фото-нужная вам библиотека NSPhotoLibraryAddUsageDescription в вашем Info.plist - ветка форума

0 голосов
/ 31 января 2019

В соответствии с UIImagePickerController поведением, он никогда не дает пользователю диалог для доступа Photos.UIImagePickerController запрашивает только разрешение Camera.

Вы должны запросить Photos permission вручную для пользователя.Используя приведенный ниже код, вы можете запросить у пользователя разрешение Photos.

import Photos

@IBAction func allowAccessToPhotos(_ sender: Any) {

    let imagePickerController = UIImagePickerController()
    imagePickerController.delegate = self
    let actionSheet = UIAlertController(title: "Photo Source", message: "Choose a Source", preferredStyle: .actionSheet)
    actionSheet.addAction(UIAlertAction(title: "Photo Library", style: .default, handler: { (action:UIAlertAction) in imagePickerController.sourceType = .photoLibrary
        let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus()
        switch photoAuthorizationStatus {
        case .authorized:
            self.present(imagePickerController, animated: true, completion: nil)
        case .notDetermined:
            PHPhotoLibrary.requestAuthorization({
                (newStatus) in
                DispatchQueue.main.async {
                    if newStatus ==  PHAuthorizationStatus.authorized {
                        self.present(imagePickerController, animated: true, completion: nil)
                    }else{
                        print("User denied")
                    }
                }})
            break
        case .restricted:
            print("restricted")
            break
        case .denied:
            print("denied")
            break
        }}))

    actionSheet.addAction(UIAlertAction(title: "Camera", style: .default, handler: { (action:UIAlertAction) in imagePickerController.sourceType = .camera
        self.present(imagePickerController, animated: true, completion: nil)
    }))
}

См. Ссылку .

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

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