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