Objective c 列出/扫描可用的WIFI iPhone

Objective c 列出/扫描可用的WIFI iPhone,objective-c,iphone,wifi,network-scan,Objective C,Iphone,Wifi,Network Scan,我正在寻找一种在iPhone应用程序中显示可用WIFI的方法。 到目前为止,我的研究结果如下: 实现(ed)此类功能的应用程序已从AppStore中删除(意味着您无法通过AppStore部署应用程序,这对我来说很好) 苹果公司在私有框架中隐藏了扫描所需的功能,你找不到任何关于“如何使用”的解释/注释/示例 似乎是最有希望的。无论如何,我不知道如何在我的代码中包含交付的源代码,以便它在设备上运行 即使是上面提到的改编版htt://code.google.com/p/iphonewireless

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

  • 实现(ed)此类功能的应用程序已从AppStore中删除(意味着您无法通过AppStore部署应用程序,这对我来说很好)
  • 苹果公司在私有框架中隐藏了扫描所需的功能,你找不到任何关于“如何使用”的解释/注释/示例
  • 似乎是最有希望的。无论如何,我不知道如何在我的代码中包含交付的源代码,以便它在设备上运行
即使是上面提到的改编版htt://code.google.com/p/iphonewireless/issues/detail?id=26也没有得到我想要的结果。最大的进步是以一个

dlopen错误:dlopen(/System/Library/SystemConfiguration/aeroperto.bundle/aeroperto,1):未找到映像 失败:\应用程序801关联

在设备(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);
NSMutableDictionary*网络;
布尔扫描;
void*libHandle;
void*airportHandle;
内部(*开放)(无效*);
int(*bind)(void*,NSString*);
int(*结束)(无效*);
int(*扫描)(无效*,无阵列**,无效*);
networks=[[NSMutableDictionary alloc]init];
//libHandle=dlopen(“/System/Library/Frameworks/Preferences.framework/Preferences”,RTLD_-LAZY);
//libHandle=dlopen(“/System/Library/privateframes/apple8011.framework/Preferences”,RTLD_-LAZY);
libHandle=dlopen(“/System/Library/SystemConfiguration/WiFiManager.bundle/WiFiManager”,RTLD_);
open=dlsym(libHandle,“apple801open”);
bind=dlsym(libHandle,“apple801bindtointerface”);
close=dlsym(libHandle,“apple801close”);
scan=dlsym(libHandle,“apple801scan”);
打开(&airportHandle);
绑定(airportHandle,@“en0”);
NSLog(@“扫描…”);
扫描=真;
NSArray*扫描网络;
NSDictionary*参数=[[NSDictionary alloc]init];
扫描(空中手柄和扫描网络、参数);
布尔变了;
对于(int i=0;i<[scan_networks count];i++){
如果([networks objectForKey:[[scan_networks objectAtIndex:i]objectForKey:@“BSSID”]]!=nil
&&![[networks objectForKey:[[scan_networks objectAtIndex:i]objectForKey:@“BSSID”]]isEqualToDictionary:[scan_networks objectAtIndex:i]]
更改=正确;
[networks setObject:[scan_networks objectAtIndex:i]forKey:[scan_networks objectAtIndex:i]objectForKey:@“BSSID”];
}
如果(更改){
NSLog(“网络支持”);
}
扫描=假;
NSLog(@“扫描完成…”);
NSLog(@“找到%i个网络:%@,[networks count],networks);
即使尝试其他注释行之一,也不起作用: 程序收到EXC_坏访问和几个

警告:检查安全呼叫:无法还原当前帧

警告:无法还原以前选择的帧

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


如果有人能帮上忙,那就太好了。

有关iphone wireless的使用示例,您可以查看以下帖子:

在这里,您还可以找到一个使用XCode 4.2开发的示例项目

正如你所提到的,这只是用于研究或私人项目,我们不能分发

祝你好运


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

/System/Library/SystemConfiguration/Aeropuerto.bundle/Aeropuerto
致:


退房。我已经在GitHub中为此创建了一个存储库。

刚刚尝试过:尽管代码在运行时警告我;它打印出了找到的WIFI。一定有比这辆马车更好的方法吗?最好至少正确地打开和关闭对WiFi硬件的访问(这似乎与上述代码不兼容)0oIt在iOS8上的iPhone 6+上运行。这只扫描连接到同一网络的设备,而不扫描可用的WiFi/访问点。您是否已将其上传到其他地方?上面的链接好像断了。
/System/Library/SystemConfiguration/IPConfiguration.bundle/IPConfifuration