UIImagePickerController在没有NS Photo Library和Camera描述的情况下工作

我正在使用UIImagePickerController,因为我正在创建一个允许通过照片库和相机发布图像的应用程序。 我创建了一个基本的演示,它包含一个UIImageView,UIButton和一些代码来设置UIImagePickerController。 另外,我还在Xcode的plist部分设置了(NSPhotoLibraryUsageDescription和NSCameraUsageDescription)。 图像拾取function工作得很漂亮但是当我运行模拟器时,我不会被问到是否应该让应用程序允许访问我的相机或照片库。 然后我尝试取消plist语句并再次运行。 没有这些,应用程序应该崩溃,但它不会。 我的问题是我在这里做错了,让选择器在没有plist的情况下工作,为什么应用程序不要求NS使用声明的权限?

import UIKit class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { @IBOutlet weak var imageView: UIImageView! @IBAction func importImage(_ sender: UIButton) { let imagePickerController = UIImagePickerController() imagePickerController.delegate = self let actionSheet = UIAlertController(title: "Add Your Profile Picture", message: "Choose An Option", preferredStyle: . actionSheet) actionSheet.addAction(UIAlertAction(title: "Camera", style: .default, handler: { (action:UIAlertAction) in if UIImagePickerController.isSourceTypeAvailable(.camera) { imagePickerController.sourceType = .camera self.present(imagePickerController, animated: true, completion: nil) } else { print("Camera not Available") } })) actionSheet.addAction(UIAlertAction(title: "Camera Roll", style: .default, handler:{ (action:UIAlertAction) in imagePickerController.sourceType = .photoLibrary self.present(imagePickerController, animated: true, completion: nil) })) actionSheet.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil )) self.present(actionSheet, animated: true, completion: nil) } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let image = info[UIImagePickerControllerOriginalImage] as? UIImage imageView.image = image picker.dismiss(animated: true, completion: nil) } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { picker.dismiss(animated: true, completion: nil) } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } 

}

故事板视图

plist图像

为什么应用程序不要求NS用法语句的权限

这是由于iOS 11的变化。您不再需要用户授权仅通过UIImagePickerController接收UIImage。

但是,如果您想要更深入的信息,即以PHAsset及其元数据访问图像, 需要用户授权。

当然,如果您希望此应用程序在iOS 10及之前运行,您仍需要用户授权。