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

iOS Widget中通过AppIntent按钮复制到UIPasteboard失败

解决iOS Widget中AppIntent调用剪贴板报错PBErrorDomain Code=11的问题

你遇到的问题是因为Widget扩展处于受限的沙盒环境,没有直接访问系统通用剪贴板的权限,直接调用UIPasteboard.general会触发权限错误。以下是可行的解决方案:

核心修改:让Intent在主应用中执行

给你的CopyTextIntent添加openAppWhenRun属性,将其设置为true。这样点击Widget按钮时,系统会打开主应用,在主应用的完整权限环境下执行剪贴板操作,就能避免权限报错。

修改后的完整代码:

struct CopyTextIntent: AppIntent {
    static var title: LocalizedStringResource = "Copy Resource"
    
    static var isDiscoverable: Bool { false }
    // 新增:让Intent在主应用中运行,获取完整权限
    static var openAppWhenRun: Bool { true }
    
    var resource: String
    
    init(resource: String) {
        self.resource = resource
    }
    
    init() {
        self.resource = "'_'/"
    }
    
    func perform() async throws -> some ReturnsValue<String> & ProvidesDialog {
        let pasteboard = UIPasteboard.general
        pasteboard.string = resource
        
        // 可选:添加执行成功的提示弹窗
        return .result(value: resource) {
            IntentDialog("已复制内容到剪贴板")
        }
    }
}

补充说明

  • Widget扩展的沙盒限制了对系统敏感API(如剪贴板)的直接访问,必须依托主应用的权限才能完成操作。
  • 如果需要避免打开主应用,目前iOS系统没有提供其他可行方案,因为Widget不具备访问通用剪贴板的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:17:40