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

iOS Swift中WKWebView真机无法加载本地PDF的问题解决

iOS真机WKWebView加载沙盒PDF报错的解决办法

问题原因

WKWebView在iOS真机上有严格的安全限制,不允许直接通过file://协议访问App沙盒内的文件,而模拟器因为权限管控宽松,所以可以正常加载。

解决方法

方法1:配置WKWebView允许文件访问权限

构造WKWebView时,修改配置开启文件访问权限,再加载file://请求:

// 替换成你的PDF文件绝对路径
let pdfPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! + "/Sample.pdf"
let fileURL = URL(fileURLWithPath: pdfPath)
let request = URLRequest(url: fileURL)

let webConfig = WKWebViewConfiguration()
// 开启文件URL间的访问权限
webConfig.preferences.setValue(true, forKey: "allowFileAccessFromFileURLs")
webConfig.preferences.setValue(true, forKey: "allowUniversalAccessFromFileURLs")

let webView = WKWebView(frame: view.bounds, configuration: webConfig)
webView.load(request)

方法2:通过Data加载PDF(更推荐)

绕开file://协议,直接读取文件Data并加载,避免权限限制:

guard let docDir = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first else { return }
let pdfPath = docDir + "/Sample.pdf"

guard let pdfData = try? Data(contentsOf: URL(fileURLWithPath: pdfPath)) else {
    // 处理文件读取失败的情况
    return
}

let webView = WKWebView(frame: view.bounds)
// 加载PDF Data,指定MIME类型为application/pdf
webView.load(pdfData, mimeType: "application/pdf", characterEncodingName: "utf-8", baseURL: URL(fileURLWithPath: pdfPath))

权限说明

不需要在Info.plist中添加额外隐私权限,App沙盒的Documents目录属于私有访问范围,本身具备访问权限,问题并非来自系统隐私权限限制。

内容的提问来源于stack exchange,提问作者iOS Swift Architect

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:40:24