2011-01-19 86 views
5

我正在寻找一种方法在iPhone应用程序中显示可用的WiFis。 到目前为止,我的研究导致了以下内容:实施列表/扫描可用的WiFis iPhone

  • 应用(ED)这样的功能,从AppStore的删除(意味着你不能部署通过AppStore的应用程式是为我好)
  • Apple在隐私框架中隐藏了扫描所必需的功能,并且您无法找到关于“如何使用”的任何解释/评论/示例。
  • http://code.google.com/p/iphone-wireless似乎是最有希望的。无论如何,我不知道如何在我的代码中包含交付的源代码,以便它可以在设备上运行

即使所提及的适配器为htt://code.google.com/p/iphone-无线/问题/细节?ID = 26没有得到我想要的结果。在设备上启动应用程序(iPhone 3GS; iOS 3.1.3)后,最大的进展结束于

dlopen error: dlopen(/System/Library/SystemConfiguration/Aeropuerto.bundle/Aeropuerto, 1): image not found failed: __Apple80211Associate

消息。

是procudes错误使用的源代码是在这里:

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和几个

warning: check_safe_call: could not restore current frame

warning: Unable to restore previously selected frame.

我在寻找的是提示如何在我的项目中包含iphone-wireless以及如何修改给定的代码? 另一种选择是如何在您的环境中扫描WiFis的提示。

如果有人能帮忙,会不错。

+0

只是试过了:虽然代码在运行时警告我;它打印出找到的WiFis。必须有比这个越野车更好的方法吗?会很好,至少正确地打开和关闭访问WiFi的硬件(这似乎不工作与上述代码)0o – 2011-01-19 14:52:07

回答

5

为iPhone无线的使用示例,您可以查看下面的帖子,

http://blog.guvenergokce.com/iphone-wireless-scanner-ios5/

在那里,你还可以找到的XCode 4.2开发了一个样本项目。

正如您所提到的,这仅用于研究或私人项目,我们无法分发。

祝你好运,

Guvener

+0

你有没有在其他地方上传?似乎上面的链接已关闭。 – Razgriz 2016-04-04 05:29:51

1

路径3.X已经改变和超越,从:

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

到:

/System/Library/SystemConfiguration/IPConfiguration.bundle/IPConfifuration 
1

检查this出来。我为此在GitHub中创建了一个Repository。

+0

它运行在iOS8上的iphone6 +上。 – 2015-03-12 23:28:02