使用startMonitoringEventWithType:error:努力检测wifi SSID的变化

Muh*_*fat 11 macos cocoa ssid corewlan osx-yosemite

Apple似乎在Yosemite和CoreWLAN框架上引入了相当大的变化.我想使用它的新API,引用头文件:

/*!
 * @method
 *
 * @param type
 * A CWEventType value.
 *
 * @param error
 * An NSError object passed by reference, which upon return will contain the error if an error occurs.
 * This parameter is optional.
 *
 * @result
 * A BOOL value indicating whether or not an error occurred. YES indicates no error occurred.
 *
 * @abstract 
 * Register for specific Wi-Fi event notifications.
 * 
 * @discussion
 * Requires the <i>com.apple.wifi.events</i> entitlement.
 */
- (BOOL)startMonitoringEventWithType:(CWEventType)type error:(out NSError **)error NS_AVAILABLE_MAC(10_10);
Run Code Online (Sandbox Code Playgroud)

并将CWEventType设置为: CWEventTypeSSIDDidChange

它说它需要权利,但我无法在我的Mac上运行它.错误消息是:

该应用程序意外退出.来自调试器的消息:由于代码签名错误而终止.

我的权利文件(我怀疑问题在哪里)是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.wifi.events</key>
    <true/>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

我正在目标的构建设置中设置代码签名路径.说到这一点,如果我排除本地权利文件,应用程序会运行,但行为不符合预期.正在研究的API返回一个错误对象,其中包含以下描述:

Error Domain=com.apple.wifi.request.error Code=4 "The operation couldn’t be completed. (com.apple.wifi.request.error error 4.)"
Run Code Online (Sandbox Code Playgroud)

这绝对是一个令人头疼的事,或者至少我希望不然我是一个完全白痴.我在会员中心有我的应用程序的特定应用程序ID,以及特定的开发配置文件(虽然我不应该,因为我使用的是通配符开发配置文件).

提前致谢.

Jan*_*ken 4

目前(2015 年 7 月 31 日)似乎存在一个错误CWWiFiClient:未正确授予权利。这甚至扩展到非沙盒应用程序。请参阅Apple 开发者论坛上的此问题以获取更多信息。

因此,我们可能不得不暂时求助于已弃用的 API。syammala 提供了一个很好的示例来说明如何使用已弃用的 API。