启动本地服务器iOS &将其加载到WKWebView上。

问题描述 投票:0回答:1

我找到了以下库来启动本地服务器。

例如,我使用的是 swifter. 它确实是为iOS编译的。

我还添加了如下的启动本地服务器的代码。

class ViewController: UIViewController {
    var webView: WKWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        let server = HttpServer()
        server["/hello"] = { .ok(.htmlBody("You asked for \($0)"))  }
        let semaphore = DispatchSemaphore(value: 0)
        do {
            try server.start(9080, forceIPv4: true)
            print("Server has started ( port = \(try server.port()) ). Try to connect now...")
            let config = WKWebViewConfiguration()
            webView = WKWebView(frame: self.view.bounds, configuration: config)
            /////////////////////////////
            // What should be url here to point to local server?
            webView.load(URLRequest(url: URL(string: "http://192.168.31.70:9080/hello")!))
            /////////////////////////////
            view = webView
            semaphore.wait()
        } catch {
            print("Server start error: \(error)")
            semaphore.signal()
        }
    }
}

另外,如果我把它提交给苹果,是否有可能因为启动本地服务器而被拒绝?

ios webserver wkwebview gcdwebserver swifter
1个回答
1
投票

你能详细说明你想通过在进程中启动一个HTTP服务器来实现什么吗?

如果你需要控制响应的方式,我建议你使用WKWebViewConfiguration.setURLSchemeHandler(_:forURLScheme:)注册一个自定义URL协议处理程序。然后,要求WKWebView从自定义的URL方案中加载资源,你的处理程序(符合WKURLSchemeHandler)就会被调用,你可以按照自己的意愿构建一个URLResponse。


0
投票

我试过 电报

第1步:打开Podfile &添加依赖关系 - pod 'Telegraph'。打开Podfile & 添加一个依赖关系 - pod 'Telegraph'

第2步:打开AppDelegate.swift &将代码如下。打开AppDelegate.swift &放入如下代码。

// Serve the Server from Build folder
let demoBundleURL = Bundle.main.url(forResource: "webApp", withExtension: nil)!
// and handle those requests at Path
serverHTTP.serveDirectory(demoBundleURL, "/webApp")
// Setting Custom Router - OPTIONAL
serverHTTP.httpConfig.requestHandlers.insert(DRHTTPMiddleWare(), at: 0)
// Start Server
try? serverHTTP.start(port: 9000, interface: "localhost")

ViewController.swift,输入代码如下。

func loadWebView() {
    guard let url = URL(string: "http://localhost:9000/webApp") else { return }
    webView = WKWebView(
        frame: self.view.bounds, 
        configuration: WKWebViewConfiguration()
    )
    webView.load(URLRequest(url: url))
    view = webView
}
© www.soinside.com 2019 - 2024. All rights reserved.