我正在尝试使用带有 iOS6.1 的 iPod Touch 4G 和带有有效配置文件的 Xcode 4.6.3 访问我周围几个 AP 的 RSSI 值。我已经阅读了一些关于这个主题的讨论,最好的方法似乎是使用私有框架 MobileWifi。由于这个项目仅供私人使用,我可以接受。
根据这个网站,我需要一个特殊的权利才能访问 MobileWiFi 功能。我以前从未使用过权利,但根据一些示例,我的 .entitlement 文件如下所示:
<?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>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)com.apple.wifi.manager-access</string>
</array>
</dict>
</plist>
我还进行了越狱并安装了 AppSync,以便根据无效权利消除错误。我可以在我的 iPod 上运行该应用程序,但每次我想检查网络或设备时,应用程序都会崩溃。到目前为止,这是我的代码:
WiFiManagerRef manager = WiFiManagerClientCreate(kCFAllocatorDefault, 0);
if (!manager)
NSLog(@"ERROR: Couldn't create WiFiManagerClient!");
CFArrayRef devices = WiFiManagerClientCopyDevices(manager);
if (!devices)
NSLog(@"ERROR: devices is NULL");
CFArrayRef networks = WiFiManagerClientCopyNetworks(manager);
if (!networks)
NSLog(@"ERROR: networks is NULL");
NSLog(@"manager: %@", manager);
NSLog(@"%d devices: %@", (int)CFArrayGetCount(devices), devices);
NSLog(@"%d networks: %@",(int)CFArrayGetCount(networks), networks);
似乎WiFiManagerClientCopyDevices
andWiFiManagerClientCopyNetworks
方法返回了一些错误的值,如果我在调用这些方法后设置了一些检查点来检查它们的地址,它们是 0x00000000,并且应用程序在返回它们的数组计数时由于 EXC_BAD_ACCESS 而崩溃。
我读到如果我不使用正确的权利,MobileWifi 功能将无法工作。其他一些人写道,应该使用 entitlement.xml 文件而不是 .entitlement 文件并用于ldid
对应用程序进行代码签名并将其传输到设备上,但我不喜欢手动执行此操作,因为我更喜欢使用 Xcode 的调试器和控制台编码时。
我花了一整天的时间试图摆脱这些问题,但我没有找到任何解决方案,所以如果有人能帮助我解决这个问题,我会非常高兴!