Список / Сканирование доступных Wi-Fi iPhone - PullRequest
5 голосов
/ 19 января 2011

Я ищу способ представить доступный Wi-Fi в приложении для iPhone. Пока что мои исследования привели к следующему:

  • Приложения, которые реализуют (редактируют) такую ​​функциональность, были удалены из AppStore (это означает, что вы не можете развернуть приложение через AppStore, что мне подходит)
  • Apple скрывает функциональность, необходимую для сканирования, в частной среде, и вы не можете найти никаких объяснений / комментариев / примеров о том, «как использовать»
  • http://code.google.com/p/iphone-wireless представляется наиболее перспективным. во всяком случае, я не могу понять, как включить доставленные исходники в мой код, чтобы он работал на устройстве

Даже упомянутые настройки https:// //.g.g.com.com/p/iphone-wireless/issues/detail? Id = 26 не дали мне желаемых результатов. Наибольший прогресс заканчивался

Ошибка dlopen: dlopen (/System/Library/SystemConfiguration/Aeropuerto.bundle/Aeropuerto, 1): изображение не найдено не удалось: __Apple80211Associate

сообщение после запуска приложения на устройстве (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);

Даже если попробовать одну из других закомментированных строк, это не сработает: Программа получила EXC_BAD_ACCESS и несколько

предупреждение: check_safe_call: не удалось восстановить текущий кадр

предупреждение: невозможно восстановить ранее выбранный кадр.

Что я ищу, это советы о том, как включить iphone-wireless в мой проект и как изменить данный код? Альтернативой может быть совет о том, как сканировать WiFis в вашей среде.

Было бы неплохо, если бы кто-то мог помочь.

Ответы [ 3 ]

5 голосов
/ 06 ноября 2011

Пример использования беспроводной сети iphone можно проверить в следующем сообщении:

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

Там же вы найдете пример проекта, разработанного с использованием XCode 4.2.1007 * Как вы упомянули, это только для исследовательских или частных проектов, мы не можем распространять.

Удачи,

Гвенер

1 голос
/ 24 февраля 2014

Проверьте это . Для этого я создал репозиторий в GitHub.

1 голос
/ 28 мая 2012

путь изменен в 3.X и выше, с:

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

до:

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