在macOS 10.13(High Sierra)上,MCNearbyServiceAdvertiser不起作用。

9

我正在尝试在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!);

代理回调方法没有被正确调用,广告商立即失败,并在控制台中得到以下信息:

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用户,并尝试运行相同的代码,但没有效果。
我打算关闭系统完整性保护,但我很难接受如果要使用它就需要所有这些安全妥协,苹果会发布这个框架的事实。将继续调查。
1个回答

20

经过多日的奋斗,解决方案非常简单。确保你为你的目标启用了网络权限。请参见附图:

在此输入图片说明


同样适用于OSX Mojave和Sift 5. :) - ingconti
我也需要这个技巧来适用于我的Swift 5 + Xcode 12 + macOS 11 Big Sur组合。谢谢。 - 拇指 muzhi.com
无法感谢你们的付出 :-) - Yogesh Patel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接