2010-06-18 11 views
0

J'ai un client logiciel Mac qui configure un Mac pour une nouvelle connexion Internet via un modem DSL. Certains appareils disposent d'un point d'accès Wi-Fi et le logiciel configure donc le Mac de l'utilisateur pour qu'il puisse également s'y connecter sans fil.Persistance de connexion AirPort créée par programme

Cela fonctionne très bien sur Mac OS X 10.4.x à 10.6.x (ce dernier via le framework CoreWLAN maintenant). Une fois que.

Le problème est que le logiciel AirPort ne sauvegarde pas la connexion, par ex. Aucune entrée de mot de passe Keychain AirPort n'est créée.

Les clients (fournisseurs de services Internet et opérateurs de télécommunications) souhaitent que la connexion AirPort persiste lors des déconnexions/redémarrages, évidemment.

Existe-t-il un moyen de réaliser la sauvegarde d'une connexion AirPort établie? Cadre de configuration du système, CoreWLAN?

Répondre

1

Avec l'API CoreWLAN vous pouvez faire avec le code suivant:


NSArray *airportInterfaces = [CWInterface supportedInterfaces]; 
    if ([airportInterfaces count] <1){ 
     NSRunCriticalAlertPanel(@"Error", @"Airport card no present", @"OK", nil, nil); 
    } 
    //Choose the desired interface . the first one will be enought for this example 
    NSString *interface =[airportInterfaces objectAtIndex:0]; 

    CWInterface *airport = [CWInterface interfaceWithName:interface]; 
    if (!airport){ 
     NSRunCriticalAlertPanel(@"Error", @"Airport card no present", @"OK", nil, nil); 
    } 
    //We want to add a sample WPA2 Personal network 
    CWWirelessProfile *newProfile = [CWWirelessProfile profile]; 
    [newProfile setSsid:@"SSID"]; 
    [newProfile setSecurityMode:[NSNumber numberWithInt:kCWSecurityModeWPA2_PSK]]; 
    [newProfile setPassphrase:@"verysecretpassword"]; 

    CWConfiguration *conf = [airport configuration]; 

    //We first add the profile to the remembered profile set when necessary 
    BOOL configChanged =NO; 
    NSSet *rememberedNetworks = [conf rememberedNetworks]; 
    if (![ rememberedNetworks containsObject:newProfile]){ 
     [conf setRememberedNetworks:[rememberedNetworks setByAddingObject:newProfile]]; 
     configChanged =YES; 
    } 

    //We add to favorites network to allow the system automatically connect to it 

    NSArray *preferredNetworks = [conf preferredNetworks]; 
    if (![preferredNetworks containsObject:newProfile]){ 
     [conf setPreferredNetworks:[preferredNetworks arrayByAddingObject:newProfile]]; 
     configChanged =YES; 
    } 

    if (!configChanged){ 
     return; 
    } 

    //Authorize 
    SFAuthorization *authorization = [SFAuthorization authorization]; 
    BOOL authResult =[authorization obtainWithRight:"system.preferences" 
               flags:(kAuthorizationFlagExtendRights | 
                kAuthorizationFlagInteractionAllowed | 
                kAuthorizationFlagPreAuthorize) 
               error:NULL]; 

    if (!authResult){ 

     NSRunCriticalAlertPanel(@"Error", @"Auth failed", @"OK", nil, nil); 

     return ; 
    } 
    [airport setAuthorization:authorization]; 

    NSError *err =nil;; 
    BOOL saved = [airport commitConfiguration:conf error:&err]; 
    if (!saved && err){ 
     [NSApp presentError:err]; 
     return; 
    } 

    if (!saved){ 
     NSRunCriticalAlertPanel(@"Error", @"Save error", @"OK", nil, nil); 
+0

mises à jour pour 10,9 ou 10,10? Certains de ces articles ne sont pas seulement obsolètes, mais inaccessibles ... – kalikkalik

Questions connexes