xcode WLAN Spots anzeigen

 

VonAntwort von xcodeneuling

Hallo,
bin neu in xcode und spiele damit noch rum und mache kleine apps für mich :)

Jetzt möchte ich ein einfaches App machen, dass mir einfach nur alle WLAN punkte in meiner umgebung Anzeigt.
Im developer vom Apple habe ich recht wenig darüber finden können (oder auch nich alles genug durchsucht).
Im moment weiss ich, dass es etwas mit der UIRequiresPersistentWiFi zutun hat.

Es soll eine Art WLAN Scan sein, aber ohne dass man zu diesen connecten kann, also nur eine Auflistung der momentanen Spots.

Profilfoto von flexo

flexo

@Oliver: Vielleicht will er etwas lernen? ;-)

KisMac und iStumbler sind aber trotzdem eine gute Empfehlung, beide sind OpenSource! Empfehle iStumbler. Beide sind natürlich für OS X und nicht für iOS 4.

Denke als blutiger Anfänger (wie ich aus deinem Alias entnehme) dürfte es aber eine etwas gar schwere Aufgabe sein. Vielleicht mal mit etwas einfacherem beginnen und nur schon XCode mit dem Interface Builder beherrschen :-)

 

xcodeneuling

Danke für die Antworten.

Also kismac und istrumbler sind von den Funktionen schon viel mehr als das was ich eingentlich ursprünglich vorhatte.

Habe eigentlich gedacht, dass es einer einfache Methode geben kann, die mir in einem label einfach nur eine Liste mit WLAN spots zeigt. Nicht mehr und nicht weniger. Die Anwendung soll nur scannen und anzeigen.

 

xcodeneuling

Ich arbeite dran :)
Wie die meinungen hier ist es wirklich nicht so einfach, wie ich es mir vorgestellt habe. Weil in der API nichts über WLAN drin steht, ist von apple wohl so gewollt.
habe mich noch weiter umgeschaut, und auf einer seite folgenden quellcode gefunden.

WifiNetwork.h

#import <Foundation/Foundation.h>
 #import <CoreFoundation/CoreFoundation.h>
 #include <dlfcn.h>
 @interface WifiNetwork : NSObject {
 void *libHandle; 
 void *airportHandle; 
 int (*Apple80211Open)(void *);
 int (*Apple80211BindToInterface)(void *, NSString *);
 int (*Apple80211Close)(void *);
 int (*Apple80211Associate)(void *, NSDictionary *, NSString *);
 int (*Apple80211Scan)(void *, NSArray **, void *);
 int (*Apple80211GetInfoCopy)(void *, void *);
 }
 + (WifiNetwork *) getWifiNetwork; - (int) getInfo:(CFDictionaryRef *) infostruct;
 @end

WiFiNetwork.m

#import "WifiNetwork.h"
 @implementation WifiNetwork static WifiNetwork *network = nil;
 + (WifiNetwork *) getWifiNetwork {
 if (!network) { 
 network = [[WifiNetwork alloc] init];
 } 
return network; 
} 
- (id) init { 
self = [super init];
 libHandle = dlopen("/System/Library/PrivateFrameworks/Apple80211.framework/Apple80211", RTLD_LAZY);
 Apple80211Open  = dlsym(libHandle, "Apple80211Open");
 Apple80211BindToInterface  = dlsym(libHandle, "Apple80211BindToInterface");
 Apple80211Close = dlsym(libHandle, "Apple80211Close");
 Apple80211Associate = dlsym(libHandle, "Apple80211Associate");
 Apple80211Scan  = dlsym(libHandle, "Apple80211Scan");
 Apple80211GetInfoCopy = dlsym(libHandle, "Apple80211GetInfoCopy");
 Apple80211Open(&airportHandle);
 Apple80211BindToInterface(airportHandle, @"en0"); // standard interface return self;
 } 
- (void) dealloc {
 Apple80211Close(airportHandle);
 [super dealloc];
 } 
- (int) getInfo:(CFDictionaryRef *) infostruct { 
return Apple80211GetInfoCopy(airportHandle, infostruct); 
} 
@end

jetzt lese ich noch n paar bücher um mir ein besseres verständniss des codes zu machen.
wenn jemand damit mein ziel, einfach nur die namen der gefundenen wlan netzte anzeigen, erreichen kann wär ich sehr dankbar. :)

Profilfoto von pse

pse

Das sind undokumentierte API-Calls! Für MacOSX gibt es eine Klasse namens CWInterface mit einer Methode scanForNetworksWithParameters, dummerweise scheint es die in iOS nicht zu geben.

Ich bin noch über http://www.wlanbook.com/iphone-wifi-scanner-apps-banned-by-apple/ gestolpert, deren Inhalt wird Dir wohl nicht gefallen:

An email to one developer from Apple stated that because “…There are no published APIs that provide the ability to manipulate the wireless connection or the show level of information regarding the wireless connection as demonstrated in the application….” their app was removed from the app store.

 

xcodeneuling

Das mag wohl sein, ich habe die herkömlichen sachen ja auch schon gemacht, die überall als einstieg angeboten werden. Angefangen mit HelloWorld :)
Jetzt wollte ich etwas anderes versuchen. Und habe ehrlich nicht gedacht, dass es so schwierig sein könnte.
Aber nur weil es schwer ist kann ich is ja dennoch probieren. Die grundlagen verbessere ich weiter mit keinen beispielen aus diversen büchern.

und ja, ich haben diesen Artikel über die bannung der wifi apps schon vorher gelesen. da ich mein app nicht in den store laden möchte wird es wohl auch so gehen :)
über einen bekannten kann ich die sachen auch auf meinem iphone bringen. das reicht mir schon.

habe grade noch etwas zu der api gefunden.
http://code.google.com/p/iphone-wireless/wiki/Apple80211Functions

Profilfoto von flexo

flexo

@xcodeneuling: aha, du wolltest tatsächlich für das iPhone die App schreiben! Dachte immer für OS X, sonst hätte ich dir den Link auch geben können ;-) Dort findest du ja alles für einen Scanner.

Natürlich müsstest du es in einer UITableView anzeigen lassen und nicht in einem Label ;-) Die Tabelle empfand ich am Anfang als sehr verwirrend gelöst im Vergelich z.B. zu C# oder VB. Deshalb vorher ein Beispiel anschauen.

 

xcodeneuling

Habe mit der Tabelle auch schwierigkeiten. Beispiele die ich habe benutzen alle eine .plist und bekommen von dieser die Daten für die Table. Wie ich das jetzt mit dem WLAN scanner mache weiss ich grade garnicht :(

Hättest du einen Ansatz oder eine Lösung für mich? Ich weiss das wenn ich es selber mache ich auch mehr davon lerne, aber im moment komme ich garnicht voran.

Profilfoto von flexo

flexo

Versuchst ja auch gleich einen sehr hohen Berg zu erklimmen in Flip-Flops ;-) Versuch mal die Basics wie Knöpfe/Tabellen etc.  Auch wenn es ein sinnloses Programm ist wirst du Freude haben wenn es läuft!

Ein gutes Tutorial gibts hier: http://www.x02100.de/blog/014_Der_UITableView.html  Die Podcasts sind sehr zu empfehlen. Können per iTunes bequem gedownloadet werden.

Grundsätzlich: die Tabelle fragt dich nach den Einträgen!

Folgende Methode fragt “dich” wie viele Einträge es gibt in der aktuellen Tabelle (hier gibt es 5):
-  (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 5;
}


In der folgenden Methode fragt er dich dann nach jedem einzelnen Eintrag. Da wir bei der oberen Methode 5 angegeben haben, wird er die Methode 5x aufrufen:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
/* hier müssen wir die Zelle (der Eintrag) erstellen */
return cell;
}

Anmelden um neue Antworten zu verfassen

Allegra Leser! Nur angemeldete Nutzer können bei diesem Beitrag Antworten hinterlassen. Jetzt kostenlos registrieren oder mit bestehendem Benutzerprofil anmelden.