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

调用UIImageWriteToSavedPhotosAlbum报错:缺少指定Entitlement权限

问题:从服务器保存图片时触发RBSServiceErrorDomain权限错误

我用Swift实现从服务器URL保存图片的功能,代码如下:

let urlString = "http://someValidUrlToAnImage.png"
let url = URL(string: urlString )
                                   
DispatchQueue.global().async {
    if let data = try? Data(contentsOf: url!) {
        if let image = UIImage(data: data) {
            DispatchQueue.main.async {
                UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
                print( "Image saved !!!!" )
            }
        }
    }
}

此前功能正常,但现在出现以下错误:

Error acquiring assertion: <Error Domain=RBSServiceErrorDomain Code=1 "(originator doesn't have entitlement com.apple.runningboard.assertions.webkit AND originator doesn't have entitlement com.apple.multitasking.systemappassertions)" UserInfo={NSLocalizedFailureReason=(originator doesn't have entitlement com.apple.runningboard.assertions.webkit AND originator doesn't have entitlement com.apple.multitasking.systemappassertions)}>

我通过USB连接Xcode测试,且已在Xcode的plist文件和AppStoreConnect后台添加所有权限,请问该错误的原因是什么?


问题分析与解决方案

这个错误核心是系统RunningBoard服务的权限断言校验失败,和代码里的同步网络请求以及iOS版本的权限管控变化直接相关,具体原因和修复方式如下:

错误原因

  • 同步网络请求触发系统后台管控:你使用的Data(contentsOf:)是同步阻塞式网络请求,在后台队列执行时,一旦请求耗时较长,iOS(尤其是iOS 16+)会触发RunningBoard的后台权限检查,而报错里的两个权限都是苹果系统级私有权限,第三方App根本无法获取。
  • SDK/iOS版本更新导致校验收紧:苹果在新版本系统或SDK中加强了后台任务的权限校验,之前的代码在旧版本中可以正常运行,但新版本会拦截这类潜在的后台违规操作。
  • 权限配置可能未正确生效:虽然你说添加了所有权限,但可能存在Xcode缓存导致配置未更新,或者漏加了相册写入的关键权限NSPhotoLibraryAddUsageDescription。

修复步骤

  1. 替换同步请求为异步网络请求:用URLSession的异步方式替代Data(contentsOf:),避免同步阻塞触发系统检查,示例代码:
let urlString = "http://someValidUrlToAnImage.png"
guard let url = URL(string: urlString) else { return }

URLSession.shared.dataTask(with: url) { data, response, error in
    guard let data = data, error == nil, let image = UIImage(data: data) else {
        print("图片加载失败: \(error?.localizedDescription ?? "未知错误")")
        return
    }
    DispatchQueue.main.async {
        UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
        print("Image saved !!!!")
    }
}.resume()
  1. 确认相册写入权限配置:检查Info.plist中是否添加了NSPhotoLibraryAddUsageDescription(iOS 11及以上版本必填),键值要明确说明用途,比如"需要保存图片到相册"。
  2. 清理Xcode缓存并重建:按Command+Shift+K清理构建缓存,再重新运行App,避免旧配置残留导致权限未生效。
  3. 适配iOS新版本后台规则:如果测试设备是iOS 16+,确保你的后台操作符合苹果最新的后台任务规范,避免长时间在后台执行网络请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:10:35