2011-01-19 16 views
5

Estoy buscando una forma de presentar WiFi disponible en una aplicación de iPhone. Hasta ahora mi investigación dio como resultado los siguientes:Listar/Buscar WiFi disponible iPhone

  • Aplicaciones que implementan (ed) una funcionalidad tales fueron retirados de la AppStore (significa que no se puede implementar la aplicación a través de AppStore lo cual está bien para mí)
  • Apple oculta la funcionalidad que es necesaria para un escaneo en un marco privado y no puede encontrar explicaciones/comentarios/ejemplos sobre "cómo usar"
  • http://code.google.com/p/iphone-wireless parece ser más prometedor. de todos modos, no puedo encontrar la forma de incluir las fuentes entregadas en mi código para que se ejecute en un dispositivo

Incluso las adaptaciones mencionadas htt: //code.google.com/p/iphone- wireless/issues/detail? id = 26 no me dio los resultados deseados. El mayor progreso se termina con un mensaje

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

después de lanzar la aplicación en un dispositivo (iPhone 3GS; IOS 3.1.3).

código fuente usado que procudes el error está aquí:

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

Incluso si tratara de una de las otras líneas de comentarios, que no funciona: Programa recibido EXC_BAD_ACCESS y varios

warning: check_safe_call: could not restore current frame

warning: Unable to restore previously selected frame.

Lo que estoy buscando son pistas sobre cómo incluir iphone-wireless en mi proyecto y cómo modificar el código dado. Una alternativa sería un consejo sobre cómo buscar WiFis en su entorno.

Estaría bien si alguien pudiera ayudar.

+0

acabo de probarlo: aunque el código me advierte durante el tiempo de ejecución; imprime WiFis encontrado. Debe haber un mejor enfoque que este buggy? Sería bueno al menos abrir y cerrar correctamente el acceso al hardware WiFi (que no parece funcionar con el código anterior) 0o –

Respuesta

5

Para una muestra del uso inalámbrico iPhone, se puede comprobar siguiente post,

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

Allí también encontrará un proyecto de ejemplo desarrollada con XCode 4.2.

Como ha mencionado, esto es solo para investigación o proyectos privados, no podemos distribuir.

Buena suerte,

Guvener

+0

¿Lo has subido a otro sitio?Parece que el enlace de arriba está abajo. – Razgriz

1

ruta ha cambiado en 3.X y más allá, a partir de:

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

a:

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

Comprobar this a cabo. He creado un repositorio en GitHub para eso.

+0

Se ejecuta en iphone6 ​​+ en iOS8. –

+0

¿Puede leer el RSSI de cada red? –

+0

esto solo explora los dispositivos conectados a la misma red y no los puntos de acceso/wifi disponibles. – Razgriz

Cuestiones relacionadas