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

原正常运行的MPMediaPickerController功能突然报错,是什么原因?

问题根源

该报错为iOS 15及更高版本对媒体库访问权限规则调整后的常见问题,现有配置缺少Entitlement相关权限项,访问逻辑也存在兼容漏洞。

解决方案

  • 打开Xcode项目的Signing & Capabilities标签页,添加Apple Music能力,勾选Media Library Access选项,补齐报错提示缺失的com.apple.accounts.appleaccount.fullaccess权限配置。
  • 提前触发媒体库权限请求,不要在初始化MPMediaPickerController时才触发权限校验,确保仅在拿到授权后再唤起选择器,参考代码:
import MediaPlayer

func checkMediaPermissionAndOpenPicker() {
    let status = MPMediaLibrary.authorizationStatus()
    switch status {
    case .authorized:
        selectAudioFromIpod()
    case .notDetermined:
        MPMediaLibrary.requestAuthorization { [weak self] newStatus in
            guard newStatus == .authorized else { return }
            DispatchQueue.main.async {
                self?.selectAudioFromIpod()
            }
        }
    default:
        // 此处可添加引导用户到系统设置开启权限的逻辑
        print("无媒体库访问权限")
    }
}
  • 兼容无本地缓存的订阅音频场景:如果用户选中的是未下载到本地的Apple Music订阅曲目,MPMediaItemPropertyAssetURL会默认返回nil,属于系统预期行为,可在获取URL为空时增加提示,告知用户仅支持选取本地存储的音频文件。
  • 优化原有代码的强制解包逻辑,避免异常场景下崩溃:
func mediaPicker(_ mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) {
    dismiss(animated: true) { [weak self] in
        guard let audioItem = mediaItemCollection.items.first,
              let audioURL = audioItem.value(forProperty: MPMediaItemPropertyAssetURL) as? URL else {
            print("无法获取有效音频地址,请确认选择的是本地存储的音频文件")
            return
        }
        self?.audioAsset = AVAsset(url: audioURL)
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:36:02