iOS12 Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"

这个错误在我使用 WKWebView 进行重定向的时候出现,当时在项目中有一个需求是这样的:先访问一个线上的链接,然后当访问某个链接的时候,转为访问本地的链接。

我开发完成后,发现在 iOS13 及以上正常运行,但是在 iOS12 上报这个错:
Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted" UserInfo={_WKRecoveryAttempterErrorKey=, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <721C0E5C-E0C3-49FF-B7D7-A5D82451E09D>.<9>, _kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=1}

最后经过测试发现,是在 iOS12 上的 WKWebView 的问题,目前没有发现直接的解决办法,想到的一个方案是:在 iOS12 的时候,一个 webview 访问线上链接,一个 webview 访问本地链接。哪位大佬有解决办法还望告知,感激不尽。

测试代码如下:

import UIKit
import WebKit
import ZipArchive

class ViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white
        
        //创建 webview
        let webConfiguration = WKWebViewConfiguration();
        let jsStr = "var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width,initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0, user-scalable=no'); document.getElementsByTagName('head')[0].appendChild(meta);"
        let wkUScript = WKUserScript.init(source: jsStr, injectionTime: WKUserScriptInjectionTime.atDocumentEnd, forMainFrameOnly: true)
        let wkuContentController = WKUserContentController.init()
        wkuContentController.addUserScript(wkUScript)
        webConfiguration.userContentController = wkuContentController
        let webView = WKWebView(frame: self.view.bounds, configuration: webConfiguration);
        webView.navigationDelegate = self
        webView.translatesAutoresizingMaskIntoConstraints = false;
        self.view.addSubview(webView)
        
        //先打开线上的链接
        webView.load(URLRequest.init(url: URL.init(string: "https://www.baidu.com")!))
        
        //5s后开始打开本地链接
        //这里我本地链接用的是 一个zip解压到本地沙盒的方式
        DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
            //解压
            let filePath = "\(NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first!)/localHtml"
            if !FileManager.default.fileExists(atPath: filePath) {
                let localPath = Bundle.main.path(forResource: "gui_dist.zip", ofType: nil)
                let zip = ZipArchive.init()
                zip.unzipOpenFile(localPath)
                zip.unzipFile(to: filePath, overWrite: true)
                let success = zip.unzipCloseFile()
                print("unzipCloseFile  ---- \(success)")
            }
            
            //打开本地链接
            let htmlUrl = URL.init(string: "file://\(filePath)/index.html")
            let fileUrl = URL.init(fileURLWithPath: filePath)
            webView.loadFileURL(htmlUrl!, allowingReadAccessTo:fileUrl)
        }
    }
}

extension ViewController: WKNavigationDelegate {
    
    func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
        print("didFailProvisionalNavigation --- \(error)")
    }
}

你可能感兴趣的:(iOS12 Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted")