macOS 10.13 (High Sierra) 上的 MCNearbyServiceAdvertiser 无法正常工作
MCNearbyServiceAdvertiser on macOS 10.13 (High Sierra) not working
我正在尝试在 macOS 10.13 中宣传具有多点连接的服务:
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 用户并尝试 运行 相同的代码无济于事。
我正在考虑关闭系统完整性保护,但我很难接受这样一个事实,即如果需要所有这些安全妥协才能使用它,Apple 会发布这个框架。将继续调查。
经过几天的努力,解决方案非常简单。确保为您的目标启用网络授权。请参阅随附的快照:
我正在尝试在 macOS 10.13 中宣传具有多点连接的服务:
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 用户并尝试 运行 相同的代码无济于事。
我正在考虑关闭系统完整性保护,但我很难接受这样一个事实,即如果需要所有这些安全妥协才能使用它,Apple 会发布这个框架。将继续调查。
经过几天的努力,解决方案非常简单。确保为您的目标启用网络授权。请参阅随附的快照: