3

我正在尝试使用带有 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);

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

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

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

4

1 回答 1

2

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

您已将捆绑 ID 替换为wifi.manager-access权利。您需要保留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>
于 2013-10-18T09:37:31.980 回答