我正在使用GCDWebServer并通过运行以下命令启动它:
webServer!.start(withPort: 8080, bonjourName: "Test")
检查来自 GCDWebServer 的[INFO]
日志时,我可以在两个不同的位置看到两条消息:
- GCDWebServer 在端口 8080 上启动,可通过 http://{deviceIp}:8080/访问
- GCDWebServer 现在可通过 http://{deviceName}.local:8080 进行本地访问
另一个 URL 使用设备名称而不是我在上面的代码中配置的bonjourName
这一事实让我感到困惑,但这没什么大不了的。
更大的问题是,在实现GCDWebServerDelegate
的webServerDidStart
后,从那里打印serverURL
仍然显示IP网址。
我还可以看到,在日志中完成GCDWebServer 消息的 Bonjour 注册之前,webServerDidStart
被调用了。
如何获取人类可读的 URL?
这都是关于新的本地网络隐私设置的。Bonjour的问题是通过在info.plist中添加以下内容来解决的:
<key>NSLocalNetworkUsageDescription</key>
<string>My app uses local network</string>
<key>NSBonjourServices</key>
<array>
<string>_http._tcp</string>
</array>
要使用的属性是bonjourServerURL
。serverURL
始终是 IP 地址,一旦调用webServerDidCompleteBonjourRegistration
委托方法,bonjourServerURL
将保存该值。我不知道为什么 Bonjour URL 中的主机名与bonjourName
参数值不匹配。