iOS 14.3 WKWebView启动相机卡首帧且报com.apple.tccd沙箱扩展错误如何解决
问题根因
你遇到的两条报错均和苹果系统隐私权限管控逻辑相关:
Could not create a 'com.apple.tccd' sandbox extension [WebRTC] Unable to create com.apple.tccd sandbox extension
com.apple.tccd是苹果系统负责透明度、同意和控制的隐私权限管控守护进程,该报错表示WKWebView内部的WebRTC独立进程没有拿到访问相机硬件的沙箱扩展权限,即使主App已经获取到相机权限,Web进程的独立沙箱权限没有同步下发也会导致相机启动后卡在首帧。
可行解决方案
- 第一步:正确配置WKWebView初始化参数
初始化WKWebViewConfiguration时必须添加以下配置:let config = WKWebViewConfiguration() // 允许媒体内嵌播放,禁止自动弹出全屏播放器 config.allowsInlineMediaPlayback = true // 取消媒体播放的用户手势限制 config.mediaTypesRequiringUserActionForPlayback = [] - 第二步:实现WKUIDelegate的权限授予方法
不要依赖系统默认的权限弹窗,主动实现网页媒体权限申请代理,显式授予权限:func webView(_ webView: WKWebView, requestMediaCapturePermissionFor origin: WKSecurityOrigin, initiatedByFrame frame: WKFrameInfo, type: WKMediaCaptureType, decisionHandler: @escaping (WKPermissionDecision) -> Void) { // 校验域名符合预期后授予权限 decisionHandler(.grant) } - 第三步:提前触发原生权限申请
在加载需要调用相机的网页之前,先调用原生AVFoundation接口请求一次相机权限,提前触发tccd的权限同步逻辑:import AVFoundation AVCaptureDevice.requestAccess(for: .video) { granted in // 权限确认后再加载网页 } - 第四步:校验Info.plist配置
确保已经添加两个权限描述字段,且描述内容清晰符合苹果审核要求:NSCameraUsageDescription:相机使用权限的说明文案NSMicrophoneUsageDescription:麦克风使用权限的说明文案
注意:如果你的App启用了多场景(Scene)支持,必须保证WKWebView在当前活跃的场景中创建,后台场景创建的WKWebView无法拿到tccd的沙箱扩展权限。
内容的提问来源于stack exchange,提问作者Line Voldmose Jansen
相关产品推荐
相关产品推荐

