これはiOSのバグかもしれないと思います。
次の簡単なコードを実行して、ネット サービスをブロードキャストします。
self.netService = [[NSNetService alloc] initWithDomain:@"local."
type:@"_testnetwork._tcp."
name:[[UIDevice currentDevice] name]
port:port];
self.netService.delegate = self;
[self.netService publish];
別のデバイスで、次のコードを実行して、ネット サービスを検出します。
self.netServiceBrowser = [[NSNetServiceBrowser alloc] init];
self.netServiceBrowser.delegate = (id)self;
[self.netServiceBrowser searchForServicesOfType:@"_testnetwork._tcp." inDomain:@"local."];
何が起こるかというと、ブラウザはネット サービスが初めて現れたときを検出し、その後サービスがなくなると、ほとんどの場合それを検出せず、NSNetService がまだブロードキャスト中であると見なします。興味深いことに、アプリは両方のデバイスで停止でき、ブラウザを起動しても、現在ブロードキャストされている古いサービスを引き続き検出できます。
Mac のターミナルでこのコードを使用すると、サービスの表示と非表示が正しく表示されます。
dns-sd -B _test._tcp
この問題の解決策はありますか? これはiOSのバグですか?