swift - macOS 10.13 (High Sierra) 上的 MCNearbyServiceAdvertiser 无法正常工作

标签 swift bonjour multipeer-connectivity macos-high-sierra

我正在尝试在 macOS 10.13 中宣传具有 Multipeer Connectivity 的服务:

    override init() {
    self.serviceAdvertiser = MCNearbyServiceAdvertiser(peer: peerID, discoveryInfo: nil, serviceType: serviceID);
    super.init();
    self.serviceAdvertiser.delegate = self;
    self.serviceAdvertiser.startAdvertisingPeer();
}

在哪里

    private let serviceID = "sample-test";
private let peerID = MCPeerID(displayName:  Host.current().localizedName!);

广告商没有获得正确的委托(delegate)回调方法,而是立即失败,这就是我在控制台中得到的结果:

2017-10-16 11:22:35.568607-0700 macApp[3060:288948] [] tcp_listener_socket_create bind(fd 3) failed: [1] Operation not permitted
2017-10-16 11:22:35.569223-0700 macApp[3060:288940] [MCNearbyServiceAdvertiser] Server did not publish: errorDict [{
    NSNetServicesErrorCode = 1;
    NSNetServicesErrorDomain = 1;
}].

知道如何解决这个问题吗?

更新:

在 iOS 模拟器中运行完全相同的代码工作正常,所以我猜它与 Mac 机器上的某些权限有关。

看到日志说这是一个权限问题,我继续在 Mac 上启用 root 用户并尝试运行相同的代码但无济于事。

我正在考虑关闭系统完整性保护,但我很难接受这样一个事实,即如果需要所有这些安全妥协才能使用它,Apple 会发布这个框架。将继续调查。

最佳答案

经过几天的努力,解决方案非常简单。确保为您的目标启用网络授权。请参阅附件快照:

enter image description here

关于swift - macOS 10.13 (High Sierra) 上的 MCNearbyServiceAdvertiser 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46776855/

相关文章:

iphone - 用于 iPhone 到 Mac 集成的 CFNetwork 和 Bonjour 集成

ios - 如何在 iOS 7 的 Multipeer Connectivity 框架中设置 tcp_nodelay

swift - 实现DispatchQueue的正确方法

swift - Xcode10.1 RestKit错误_$s7RestKit11DynamicKeysVN

swift - 无法将字符串转换为双 Swift

ios - 从父类(super class) UIView 连接的 IBoutlet 仍然为零

ios - 发现网络上安装了我的应用程序的计算机

c - bonjour 如何发现网络上的设备?

ios - 与非 iOS 设备的多点蓝牙连接

xcode - 尝试在 Swift 的多点连接测试应用程序中使用 NSNotification