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

iOS 14+用PHAccessLevel.addOnly查询相册权限始终返回notDetermined

问题原因

  • 核心是API使用不匹配:iOS 14新增分级别相册权限后,请求时指定了PHAccessLevel.addOnly,查询状态时却调用了无参的旧方法PHPhotoLibrary.authorizationStatus(),这个无参方法默认查询的是readWrite级别的权限状态,你从未申请过读写权限,所以返回值永远是notDetermined,和模拟器本身无关。
  • 你测试时用readWrite请求能正常返回结果,也刚好验证了这个逻辑:因为无参查询的就是读写权限的状态,请求和查询的级别匹配,结果自然正确。

修正方案

1. 替换权限查询方法

iOS 14及以上版本,请求什么级别的权限,就查询对应级别的状态,同时做好iOS 10~iOS 13的旧版本兼容:

import Photos

func authorizationStatusPhotos() {
    // iOS 14及以上版本适配
    if #available(iOS 14, *) {
        // 请求仅添加照片权限
        PHPhotoLibrary.requestAuthorization(for: .addOnly) { _ in
            // 必须查询对应addOnly级别的权限状态
            switch PHPhotoLibrary.authorizationStatus(for: .addOnly) {
            case .notDetermined:
                print("notDetermined")
            case .restricted:
                print("restricted")
            case .denied:
                print("denied")
            case .authorized:
                print("authorized")
            case .limited:
                // addOnly级别不会返回limited,该状态仅属于readWrite级别
                print("limited")
            @unknown default:
                print("default")
            }
        }
    } else {
        // iOS 10 - iOS 13 旧版本适配
        PHPhotoLibrary.requestAuthorization { status in
            switch status {
            case .notDetermined:
                print("notDetermined")
            case .restricted:
                print("restricted")
            case .denied:
                print("denied")
            case .authorized:
                print("authorized")
            @unknown default:
                print("default")
            }
        }
    }
}

2. 补充Info.plist权限声明

  • 如果仅需要添加照片权限,添加NSPhotoLibraryAddUsageDescription,填写权限申请的用途说明
  • 如果需要读写相册权限,添加NSPhotoLibraryUsageDescription

补充说明

部分旧版本Xcode的iOS 14模拟器确实存在相册权限缓存异常的问题,如果修正代码后仍有异常,可以重置模拟器内容与设置后重新测试,真机不会存在该类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 06:18:01