从GCDWebServer获取Bonjour URL

时间:2017-07-16 14:09:27

标签: ios swift swift3 gcdwebserver

我正在使用GCDWebServer并通过运行:

启动它
private int getWeek(String datum) {
    TimeZone zone = TimeZone.getTimeZone("Europe/Berlin");
    SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");

    //     v--- set the timezone here 
    format.setTimeZone(zone);

    Date date = null;
    try {
        date = format.parse(datum);
    } catch (ParseException e) {
        e.printStackTrace();
    }

    Calendar calendar = Calendar.getInstance(zone);
    calendar.setTime(date);

    int week = calendar.get(Calendar.WEEK_OF_YEAR);
    return week;
}

从GCDWebServer检查webServer!.start(withPort: 8080, bonjourName: "Test") 日志时,我可以在两个不同的位置看到两条消息:

  • GCDWebServer在端口8080上启动,可在http:// {deviceIp}上找到:8080 /
  • GCDWebServer现在可以通过http:// {deviceName} .local:8080
  • 在本地访问

我被其他网址使用的设备名称而不是我在上面的代码中配置的[INFO]这一事实所消耗,但这并不是什么大问题。

更重要的是,在实施bonjourName GCDWebServerDelegate之后,从那里打印webServerDidStart仍会显示IP网址。

我还可以看到在我在日志中获得GCDWebServer 消息的 Bonjour注册完成之前调用了serverURL

如何获取人类可读的网址?

3 个答案:

答案 0 :(得分:1)

要使用的属性是bonjourServerURLserverURL始终是IP地址,一旦webServerDidCompleteBonjourRegistration委托方法被调用,bonjourServerURL就会保存该值。我不知道为什么Bonjour网址中的主机名与bonjourName参数值不匹配。

答案 1 :(得分:1)

这完全是关于新的本地网络隐私设置。通过在 info.plist 中添加以下内容解决了 Bonjour 的问题:

<key>NSLocalNetworkUsageDescription</key>
    <string>My app uses local network</string>

<key>NSBonjourServices</key>
<array>
    <string>_http._tcp</string>
</array>

答案 2 :(得分:0)

是的,Bonjour不能在真实设备上使用iOS14.x。该服务仅适用于模拟器。该框架必须进行修订。