使用 NWBrowser for Network.framework 时,为什么 TXT 记录设置为 nil?

Cha*_*ish 3 mdns bonjour ios swift network-framework

我正在尝试使用 Swift 中的 Network.framework 为我的 iOS 应用程序获取在本地网络上运行的 Bonjour 服务列表。为了发现与我的应用程序运行时使用相同协议版本的设备,我需要能够查看网络上运行的 Bonjour 服务的 TXT 记录。但是,当我尝试打印时result.endpoint.txtRecord总是返回零。

下面是我的代码示例(经过简化以重点关注此示例的关键部分):

let parameters = NWParameters.tcp
parameters.includePeerToPeer = true
parameters.allowLocalEndpointReuse = true

let browser = NWBrowser(for: .bonjour(type: "_tictactoe._tcp", domain: nil), using: parameters)

browser.browseResultsChangedHandler = { results, changes in
    for result in results {
        print("Browser result. txtRecords: \(result.endpoint.txtRecord)")
    }
}
Run Code Online (Sandbox Code Playgroud)

Cha*_*ish 7

事实证明,使用创建 NWBrowser永远不会.bonjour给你 TXT 记录,并且总是返回 nil。但是,如果您在创建 NWBrowser 时使用,您也将获得 TXT 记录。.bonjourWithTXTRecord

此外,由于某种原因,您需要通过result.metadata而不是result.endpoint.txtRecord获取实际记录。

下面是一个实际的例子。

let browser = NWBrowser(for: .bonjourWithTXTRecord(type: "_tictactoe._tcp", domain: nil), using: parameters)

browser.browseResultsChangedHandler = { results, changes in
    for result in results {
        if case NWBrowser.Result.Metadata.bonjour(let txtRecord) = result.metadata {
            print("Browser result with txt records: \(txtRecord.dictionary)")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)