访问iOS照片库,无需授权

547 阅读1分钟

大家好,这里是程序员阿山哥🤓最近在写个App小功能的时候,无意间发现了,在用户未授权的情况情况下,也能访问到照片。这次发现也解答了我一个多年来的疑问,为何别人的APP没有授权情况下也能传入用户选择的照片🤔

测试环境:
Xcode 13.2.1
iPhone5s(iOS 12.5.6)

实现方案:UIImagePickerController

// 创建一个UIImagePickerController()
let imagePicker = UIImagePickerController()
// 设置代理,可以在后面实现代理方法中获得用户选择的照片
imagePicker.delegate = self
// 设置类型,有photoLibrary,camera,savedPhotosAlbum
imagePicker.sourceType = .photoLibrary

imagePicker.sourceType的三种类型的一些了解

  • photoLibrary,相簿列表,用户可以选择不同的相簿里的照片视频
  • savedPhotosAlbum,保存的照片列表,用户可以选择照片列表里的照片视频
  • camera,调用摄像头,这个需要再多一点设置,UIImagePickerController里有对应的设置属性

注意: 记得在info里加上对应Privacy配置,这是Apple开发的要求

附上完整的ViewController代码

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var imageView: UIImageView!
    
    let imagePicker = UIImagePickerController()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        imagePicker.delegate = self
        imagePicker.sourceType = .photoLibrary
    }
    
  	@IBAction func addImageBtnPressed(_ sender: UIButton) {
      present(imagePicker, animated: true, completion: nil)
    }
}

extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let userPickedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            imageView.image = userPickedImage
        }
        imagePicker.dismiss(animated: true, completion: nil)
    }
}

所以,iOS用户如果发现App没有照片授权,却能选择图片要多加小心。希望开发者不要搞什么幺蛾子(大概率不会的)。通过App Store下载的APP大部分都是安全的,放心,Apple的审核挺严格的(不过有时候审核也是莫名其妙的,所以iOS软件开发最大的挑战不是编程,是上架审核🤣)