Я ищу способ представить доступный WiFis в приложении для iPhone. До сих пор мое исследование привело к следующему:Список/Сканирование доступных WiFis iPhone
- приложения, которые реализуют (Ed) такая функциональность была удалена из AppStore (означает, что вы не можете развернуть приложение через AppStore, который отлично подходит для меня)
- Apple скрывает функциональность, необходимую для сканирования в частной структуре, и вы не можете найти никаких объяснений/комментариев/примеров на «как использовать»
- http://code.google.com/p/iphone-wireless представляется наиболее перспективным. во всяком случае, я не могу понять, как включить поставляемые источники в мой код, чтобы он работал на устройстве
Даже упоминаемые адаптеры htt: //code.google.com/p/iphone- wireless/issues/detail? id = 26 не получил желаемых результатов. Наибольший прогресс был в конечном итоге с сообщением
dlopen error: dlopen(/System/Library/SystemConfiguration/Aeropuerto.bundle/Aeropuerto, 1): image not found failed: __Apple80211Associate
после запуска приложения на устройстве (iPhone 3GS, IOS 3.1.3).
Б исходный код, который 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 в вашей среде.
Было бы неплохо, если бы кто-то мог помочь.
только что пробовал: хотя код предупреждает меня во время выполнения; он распечатывает найденный WiFis. Должен быть лучший подход, чем этот багги? Было бы неплохо хотя бы правильно открыть и закрыть доступ к Wi-Fi-аппарату (который, похоже, не работает с указанным выше кодом) 0o –