2011-01-19 11 views
5

Sto cercando un modo per presentare WiFi disponibili in un'app per iPhone. Finora la mia ricerca ha portato ai seguenti:Elenco/Ricerca per WiFis disponibile per iPhone

  • applicazioni che implementano (ndr) un tale funzionalità sono stati rimossi da AppStore (significa che non è possibile distribuire l'applicazione tramite AppStore che va bene per me)
  • Apple nasconde la funzionalità necessaria per una scansione in un framework privato e non è possibile trovare spiegazioni/commenti/esempi su "come utilizzare"
  • http://code.google.com/p/iphone-wireless sembra essere molto promettente. comunque, non riesco a capire come includere le fonti consegnate nel mio codice in modo che funzioni su un dispositivo

Anche gli adattamenti menzionati htt: //code.google.com/p/iphone- wireless/issues/detail? id = 26 non mi ha ottenuto i risultati desiderati. Il progresso è stato più finire con un messaggio

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

dopo aver lanciato l'applicazione su un dispositivo (iPhone 3GS; iOS 3.1.3).

codice sorgente utilizzato che procudes l'errore è qui:

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); 

Anche se provare una delle altre righe di commento, ma non funziona: programma ha ricevuto EXC_BAD_ACCESS e molti

warning: check_safe_call: could not restore current frame

warning: Unable to restore previously selected frame.

Quello che sto cercando sono suggerimenti su come includere iphone-wireless nel mio progetto e su come modificare il codice dato? Un'alternativa sarebbe un suggerimento su come cercare WiFis nel proprio ambiente.

Sarebbe bello se qualcuno potesse aiutare.

+0

appena provato: sebbene il codice mi avvisi durante il runtime; stampa WiFis trovato. Ci deve essere un approccio migliore di questo buggy? Sarebbe bello almeno aprire e chiudere correttamente l'accesso all'hardware WiFi (che non sembra funzionare con il codice precedente) 0o –

risposta

5

Per un esempio di utilizzo wireless iPhone, è possibile controllare la seguente post,

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

Ci troverete anche un progetto di esempio sviluppata con XCode 4.2.

Come lei ha menzionato, questo è solo per progetti di ricerca o privati, non possiamo distribuire.

Buona fortuna,

Guvener

+0

Avete caricato altrove?Sembra che il link sopra sia inattivo. – Razgriz

1

percorso è cambiato in 3.X e al di là, da:

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

a:

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

check this fuori. Ho creato un repository in GitHub per questo.

+0

Funziona su iphone6 ​​+ su iOS8. –

+0

Può leggere RSSI di ogni rete? –

+0

analizza solo i dispositivi connessi alla stessa rete e non i punti di accesso/wifi disponibili. – Razgriz