iOS6.1:尝试访问 WiFi RSSI 时出现问题(MobileWiFi.framework)

Posted

技术标签:

【中文标题】iOS6.1:尝试访问 WiFi RSSI 时出现问题(MobileWiFi.framework)【英文标题】:iOS6.1: Problems while trying to access WiFi RSSI (MobileWiFi.framework) 【发布时间】: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);

似乎WiFiManagerClientCopyDevicesWiFiManagerClientCopyNetworks 方法返回了一些错误的值,如果我设置了一些检查点来检查它们的地址,它们在调用这些方法后是 0x00000000,并且应用程序在返回它们的数组计数时由于 EXC_BAD_ACCESS 而崩溃。

我了解到,如果我不使用正确的权利,MobileWifi 功能将无法工作。其他一些人写道,应该使用 entitlement.xml 文件而不是 .entitlement 文件并使用ldid对应用程序进行代码签名并将其传输到设备上,但我不喜欢手动执行此操作,因为我更喜欢使用 Xcode 的编码时的调试器和控制台。

我花了一整天的时间试图摆脱这些问题,但我没有找到任何解决方案,所以如果有人能帮助我解决这个问题,我会非常高兴!

【问题讨论】:

第一个问题很好。欢迎来到***! 你明白了吗?必须越狱设备吗? @doxsi 不幸的是我当时不得不越狱我的设备。不过不知道今天有没有其他办法…… 【参考方案1】:

在我看来,您的权利文件不正确。

您已用 wifi.manager-access 权利替换了您的捆绑包 ID。您需要保留 keychain-access-group 并在文件末尾添加 wifi.manager-access 权利作为新的键/值对。

在 Xcode 中生成一个新的授权文件并添加以下键/值对。

    <key>com.apple.wifi.manager-access</key>
    <true/>

您的自定义权利文件最终应如下所示:

<?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>YOUR_APP_BUNDLE_ID</string>
    </array>
    <key>com.apple.wifi.manager-access</key>
    <true/>
</dict>
</plist>

【讨论】:

注意:它只是因为你有越狱设备才起作用。对你有好处,只是想让其他阅读本文的人意识到这一点:***.com/questions/16429521/… 应该是 ,不是吗? 我已经把 改成了

以上是关于iOS6.1:尝试访问 WiFi RSSI 时出现问题(MobileWiFi.framework)的主要内容,如果未能解决你的问题,请参考以下文章

WIFI扫描

XCode 4.6:iOS 6.1 - 验证时出现 CFBundleVersion 和 CFBundleShortVersionString 错误

从 WiFi 切换到 3G 时出现网络错误

android WifiManager中Rssi是啥意思

为啥在尝试下载 HDP 时出现“访问受限”?

为啥在尝试使用指针访问结构时出现此分段错误?