2011-01-19 59 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