UIImagePickerController不要求许可

sco*_*c00 5 info.plist uiimagepickercontroller ios swift

我在应用程序中实现了以下代码,以允许用户向应用程序添加图像。但是,永远不会要求用户授予访问照片的权限。我在这里想念什么?

在我的info.plist中,我设置了:隐私-图片库使用说明=请提供对您图片库的访问权限

捆绑包标识符为:$(PRODUCT_BUNDLE_IDENTIFIER)

import UIKit

class NewPostXIB: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

@IBOutlet weak var image: UIImageView!

let imagePicker = UIImagePickerController()

override func viewDidLoad() {
    super.viewDidLoad()
    imagePicker.delegate = self
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    super.touchesBegan(touches, with: event)
    self.view.endEditing(true)
}

@IBAction func closeButton(_ sender: Any) {
    dismiss(animated: false, completion: nil)
}

@IBAction func addImageButton(_ sender: Any) {
    if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
        imagePicker.allowsEditing = true
        imagePicker.sourceType = .photoLibrary
        present(imagePicker, animated: true, completion: nil)
        }
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let pickedImage = info[UIImagePickerControllerEditedImage] as? UIImage {
        image.contentMode = .scaleAspectFill
        image.image = pickedImage
    }
    dismiss(animated: false, completion: nil)
}

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    dismiss(animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)

sco*_*c00 10

添加以下函数解决了问题:

 func checkPermission() {
    let photoAuthorizationStatus = PHPhotoLibrary.authorizationStatus()
    switch photoAuthorizationStatus {
    case .authorized:
        present(imagePicker, animated: true, completion: nil)
        print("Access is granted by user")
    case .notDetermined:
        PHPhotoLibrary.requestAuthorization({
            (newStatus) in
            print("status is \(newStatus)")
            if newStatus ==  PHAuthorizationStatus.authorized {
                /* do stuff here */
                self.present(self.imagePicker, animated: true, completion: nil)
                print("success")
            }
        })
        print("It is not determined until now")
    case .restricted:
        // same same
        print("User do not have access to photo album.")
    case .denied:
        // same same
        print("User has denied the permission.")
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

根据苹果文档

笔记

当使用 UIImagePickerController 调出用户的照片库时,您的应用程序不需要明确请求权限。

照片会在需要时自动提示用户请求授权。


fal*_*ypt 5

答案很简单:这是自iOS 11以来的正常行为,因为UIImagePickerController运行在单独的进程中,因此对于只读访问,您不需要任何特殊权限。