You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何展示仅显示用户已授权照片的PHPickerViewController选择器

iOS 14+ 调起仅展示已授权照片的PHPickerViewController方案

核心原理

默认初始化的PHPickerViewController走系统独立沙箱进程,不受App的照片访问权限限制,始终展示全量照片。要限制仅展示用户已授权的资源,需要将选择器与当前App的PHPhotoLibrary实例绑定,匹配当前的权限范围。

实现步骤

  • 第一步:导入依赖框架
import Photos
import PhotosUI
  • 第二步:确认当前照片访问权限状态
    只有当权限状态为PHAuthorizationStatus.limited(限选访问)时,才会触发「仅展示已授权照片」的效果,其他权限状态下会按规则展示全量照片/无权限提示
let status = PHPhotoLibrary.authorizationStatus(for: .readWrite)
// 仅当当前是限选权限时才有「已授权照片」的范围,可先主动申请限选权限
if status == .notDetermined {
    PHPhotoLibrary.requestAuthorization(for: .readWrite) { newStatus in
        // 权限回调后再调起选择器
    }
}
  • 第三步:初始化绑定了当前照片库实例的PHPicker配置

注意不能用默认的PHPickerConfiguration()初始化,必须传入PHPhotoLibrary.shared()

// 核心:关联当前App的PHPhotoLibrary实例,自动匹配权限范围
var config = PHPickerConfiguration(photoLibrary: PHPhotoLibrary.shared())
// 可自定义选择类型、数量等参数
config.filter = .images
config.selectionLimit = 1

let picker = PHPickerViewController(configuration: config)
picker.delegate = self
present(picker, animated: true)

额外说明

  • 限选权限下用该方式调起的选择器,右下角会自带「管理」按钮,用户可直接调整授权给App的照片范围,无需跳转系统设置
  • 若App已获得完全访问权限(状态为.authorized),该配置的选择器仍会展示所有照片
  • 该方式无需额外申请全量照片权限,符合苹果隐私合规要求

内容的提问来源于stack exchange,提问作者jfredsilva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:06:05