5

我正在寻找一种在 iPhone 应用程序中显示可用 WiFi 的方法。到目前为止,我的研究结果如下:

  • 实现(ed)此类功能的应用程序已从 AppStore 中删除(意味着您无法通过 AppStore 部署应用程序,这对我来说很好)
  • Apple 在私有框架中隐藏了扫描所需的功能,您找不到任何关于“如何使用”的解释/评论/示例
  • http://code.google.com/p/iphone-wireless似乎是最有前途的。无论如何,我不知道如何在我的代码中包含交付的源代码,以便它在设备上运行

即使提到 htt ://code.google.com/p/iphone-wireless/issues/detail?id=26 的改编也没有让我得到想要的结果。最大的进步是结束了

dlopen 错误:dlopen(/System/Library/SystemConfiguration/Aeropuerto.bundle/Aeropuerto,1):找不到图像失败:__Apple80211Associate

在设备(iPhone 3GS;iOS 3.1.3)上启动应用程序后的消息。

使用的产生错误的源代码在这里:

NSMutableDictionary *networks;
bool scanning;
void *libHandle;
void *airportHandle;
int (*open)(void *);
int (*bind)(void *, NSString *);
int (*close)(void *);
int (*scan)(void *, NSArray **, void *);

networks = [[NSMutableDictionary alloc] init];
// libHandle = dlopen("/System/Library/Frameworks/Preferences.framework/Preferences", RTLD_LAZY);
// libHandle = dlopen("/System/Library/PrivateFrameworks/Apple80211.framework/Preferences", RTLD_LAZY);
libHandle = dlopen("/System/Library/SystemConfiguration/WiFiManager.bundle/WiFiManager", RTLD_LAZY);

open = dlsym(libHandle, "Apple80211Open");
bind = dlsym(libHandle, "Apple80211BindToInterface");
close = dlsym(libHandle, "Apple80211Close");
scan = dlsym(libHandle, "Apple80211Scan");

open(&airportHandle);
bind(airportHandle, @"en0");

NSLog(@"Scanning...");
scanning = true;
NSArray *scan_networks;
NSDictionary *parameters = [[NSDictionary alloc] init];
scan(airportHandle, &scan_networks, parameters);
bool changed;
for (int i = 0; i < [scan_networks count]; i++) {
    if([networks objectForKey:[[scan_networks objectAtIndex: i] objectForKey:@"BSSID"]] != nil 
       && ![[networks objectForKey:[[scan_networks objectAtIndex: i] objectForKey:@"BSSID"]] isEqualToDictionary:[scan_networks objectAtIndex: i]])
        changed = true;
    [networks setObject:[scan_networks objectAtIndex: i] forKey:[[scan_networks objectAtIndex: i] objectForKey:@"BSSID"]];
}
if(changed) {
    NSLog(@"NetworksUpdated");
}
scanning = false;
NSLog(@"Scan Finished...");
NSLog(@"Found %i networks: %@", [networks count], networks);

即使尝试其他注释行之一,它也不起作用:程序收到 EXC_BAD_ACCESS 和几个

警告:check_safe_call:无法恢复当前帧

警告:无法恢复先前选择的帧。

我正在搜索的是如何在我的项目中包含 iphone-wireless 以及如何修改给定代码的提示?另一种方法是关于如何在您的环境中扫描 WiFi 的提示。

如果有人能帮忙就好了。

4

1 回答 1

1

路径在 3.X 及更高版本中已更改,从:

/System/Library/SystemConfiguration/Aeropuerto.bundle/Aeropuerto

至:

/System/Library/SystemConfiguration/IPConfiguration.bundle/IPConfifuration
于 2012-05-28T06:10:11.910 回答