【发布时间】:2013-10-10 18:55:23
【问题描述】:
我正在尝试使用带有 iOS6.1 的 iPod Touch 4G 和带有有效配置文件的 Xcode 4.6.3 访问我周围几个 AP 的 RSSI 值。我已经阅读了一些关于这个主题的讨论,最好的方法似乎是使用私有框架 MobileWifi。由于这个项目仅供私人使用,我可以接受。
根据this 网站,我需要特殊权限才能访问 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 和WiFiManagerClientCopyNetworks 方法返回了一些错误的值,如果我设置了一些检查点来检查它们的地址,它们在调用这些方法后是 0x00000000,并且应用程序在返回它们的数组计数时由于 EXC_BAD_ACCESS 而崩溃。
我了解到,如果我不使用正确的权利,MobileWifi 功能将无法工作。其他一些人写道,应该使用 entitlement.xml 文件而不是 .entitlement 文件并使用ldid对应用程序进行代码签名并将其传输到设备上,但我不喜欢手动执行此操作,因为我更喜欢使用 Xcode 的编码时的调试器和控制台。
我花了一整天的时间试图摆脱这些问题,但我没有找到任何解决方案,所以如果有人能帮助我解决这个问题,我会非常高兴!
【问题讨论】:
-
第一个问题很好。欢迎来到stackoverflow!
-
你明白了吗?必须越狱设备吗?
-
@doxsi 不幸的是我当时不得不越狱我的设备。不过不知道今天有没有其他办法……
标签: objective-c ios6 wifi xcode4.6