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

iOS应用WebKit视图点击拨号按钮报错Error acquiring assertion是什么原因?

[assertion] 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)}>

报错产生原因

该错误来自iOS系统的RunningBoard服务,该服务负责全系统进程的生命周期管控、权限校验和运行资源断言分配。报错的直接触发逻辑如下:

  • 当在WKWebView中点击tel:协议的呼叫链接时,WebKit内核会先尝试向RunningBoard服务申请进程保活断言,确保跳转至系统拨号页面前Web进程不会被系统提前回收
  • com.apple.runningboard.assertions.webkit和com.apple.multitasking.systemappassertions是苹果仅向系统内置应用、Safari浏览器开放的专属权限,普通第三方应用默认没有该权限,断言申请被系统拒绝后就会抛出该错误

注意:该报错本身属于警告级别的日志输出,绝大多数情况下不会直接导致呼叫功能失效。如果你的呼叫功能完全无法触发,是因为WKWebView默认没有对tel:协议做跳转适配,和该报错没有直接关联。

功能修复方案

如果呼叫功能无法正常触发,按照以下步骤处理即可:

  • 实现WKNavigationDelegate的decidePolicyFor navigationAction代理方法,手动拦截tel:协议跳转,不要交予WebKit默认处理
  • 拦截到tel:链接后,主动调用UIApplication的开放接口触发系统拨号逻辑,避免WebKit的断言申请动作
  • 无需为该报错额外申请权限,苹果不会向第三方应用开放对应的entitlement,不会影响应用审核和正常功能使用

示例代码(Objective-C):

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
    NSURL *requestUrl = navigationAction.request.URL;
    if ([requestUrl.scheme isEqualToString:@"tel"]) {
        if ([[UIApplication sharedApplication] canOpenURL:requestUrl]) {
            [[UIApplication sharedApplication] openURL:requestUrl options:@{} completionHandler:nil];
        }
        decisionHandler(WKNavigationActionPolicyCancel);
        return;
    }
    decisionHandler(WKNavigationActionPolicyAllow);
}

示例代码(Swift):

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    guard let url = navigationAction.request.url, url.scheme == "tel" else {
        decisionHandler(.allow)
        return
    }
    if UIApplication.shared.canOpenURL(url) {
        UIApplication.shared.open(url)
    }
    decisionHandler(.cancel)
}

如果呼叫功能已经可以正常触发,仅控制台输出该报错,无需做任何额外处理,属于iOS系统的正常日志输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:15:07