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



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

  • https://github.com/httpswift/swifter
  • https://github.com/swisspol/GCDWebServer

例如,我正在使用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()
}
}
}

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

我试过电报

第 1 步。打开 Podfile 并添加一个依赖项 - pod 'Telegraph'

第 2 步。打开 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")

第 3 步。在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
}

您能否详细说明通过在进程中启动HTTP服务器来实现的目标?

如果您需要控制做出响应的方式,我建议您查看使用 WKWebViewConfiguration.setURLSchemeHandler(_:forURLScheme:( 注册自定义 URL 协议处理程序。然后,要求 WKWebView 从该自定义 URL 方案加载资源,您的处理程序(符合 WKURLSchemeHandler(将被调用,您可以根据需要构造 URLResponse。

相关内容

  • 没有找到相关文章

最新更新