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

Posted

技术标签:

【中文标题】启动本地服务器 iOS 并将其加载到 WKWebView【英文标题】:Start local server iOS & load it on WKWebView 【发布时间】:2020-05-13 01:00:51 【问题描述】:

我发现以下库可以在本地启动服务器。

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()
        
    

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

【问题讨论】:

【参考方案1】:

您能否详细说明您试图通过在进程中启动 HTTP 服务器来实现什么?

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

【讨论】:

【参考方案2】:

我试过Telegraph

步骤 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")

Step 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

【讨论】:

以上是关于启动本地服务器 iOS 并将其加载到 WKWebView的主要内容,如果未能解决你的问题,请参考以下文章

如何启动本地数据库服务器并将其连接到 Java? [复制]

在云端共享 iOS 和 Android 之间的本地化

iOS如何在屏幕外启动图像并将其动画到屏幕上

Cordova iOS 视频标签本地文件源

将文件加载到应用程序本地存储

Backbone.js 本地存储,从服务器预先加载