2012-10-29 5 views
5

Kablosuz sinyal gücünü belirleme yeteneğine bağlı olan bir OS X uygulaması yazıyorum, ancak bunu korumalı alan olarak kullanmak için hangi yetkileri kullanacağımı anlayamıyorum. BenSandboxing çekirdeğiWLAN?

NSMutableArray *scanResults; 
CWInterface *currentInterface = [CWInterface interface]; 
NSLog(@"currInterface: %@\n", currentInterface); 
NSMutableDictionary *signalsDict = [[NSMutableDictionary alloc] init]; 
    NSError *err = nil; 
    scanResults = [NSMutableSet setWithSet:[currentInterface scanForNetworksWithSSID:nil error:&err]]; 

her kullandığınızda

ben XCode kontrol tüm haklarını olmasına rağmen hatayı The operation couldn't be completed. (com.apple.coreWLAN.error error 1.) olsun. Hangi haklar eksik?

CoreWLANWirelessManager örnek projesinde aynı sorun var.

+0

Hiç şansınız oldu mu? –

+0

Maalesef, yapmadım. Hiç fikrin var mı? –

+0

CWInterface nesnesinde rssi özelliğini kullanmayı deneyebilirsiniz. "Arabirim için geçerli toplam sinyal gücü göstergesi (RSSI) ölçümü (dBm)" gösterir. Kum havuzu ortamında çalışır. –

cevap

0

Apple80211 özel çerçevesini dlfcn.h kütüphanesini kullanarak kullanmak isteyebilirsiniz. Bir iphone örneği burada bulunabilir:

http://www.csse.uwa.edu.au/~chris/iphone/APlogger/

kaynak dosyasını indirin ve tarayıcı modülü araştırmak. Özetle

, böyle bir şey ile gelecek: Eğer iOS uygulamalarında özel çerçeveler kullanırsanız, App Store üzerinde yayınlamak mümkün olmayacaktır

#define IF_NAME "en0" 
#include <dlfcn.h> 

- (void)performScan 
{ 
    int (*open)(void *); 
    int (*bind)(void *, NSString *); 
    int (*close)(void *); 
    int (*scan)(void *, NSArray **, void *); 
    void *libHandle; 
    void *airportHandle; 

    libHandle = dlopen("/System/Library/Frameworks/Preferences.framework/Preferences", RTLD_LAZY); 
    open = dlsym(libHandle, "Apple80211Open"); 
    bind = dlsym(libHandle, "Apple80211BindToInterface"); 
    scan = dlsym(libHandle, "Apple80211Scan"); 
    close = dlsym(libHandle, "Apple80211Close"); 

    open(&airportHandle); 
    bind(airportHandle, @IF_NAME); 
    NSArray  *found; 
    NSDictionary *params = [[NSDictionary alloc] init]; 
    scan(airportHandle, &found, params); 

    int nnw = [found count]; 
    for(int i=0 ; i < nnw ; i++) { 
     NSDictionary *nw = [found objectAtIndex:i]; 
     NSString *ssid = [self fixSSID:nw]; 
     // RSSI indicates signal strength 
     int rssi = [[nw objectForKey:@"RSSI"] intValue]; 
    } 
    // Cleanup 
    close(airportHandle); 
    dlclose(libHandle); 
} 

-(NSString *)fixSSID:(NSDictionary *)nw 
{ 
    if ([[nw objectForKey:@"HIDDEN_NETWORK"] boolValue]) 
    return @"<hidden>"; 
    else 
    return [nw objectForKey:@"SSID_STR"]; 
} 

Not (Elma reddedecektir uygulamanız Apple80211 çerçevesi için genel bir belge olmadığı için). Ancak sorunuz OSX geliştirmeyle ilgili olduğundan, durumunuz için geçerli değildir.

Yardım edin.
Farzan Doroodgar

+1

Yetkilendirme ve korumalı alandaki amacım, uygulamayı OS X uygulama mağazasında dağıtabilmekti. Kum havuzunu kapatırsam CWInterface mükemmel çalışır. –

0

CoreWLAN hiç korumalı alan uygulamalar için mevcut görünmüyor.

Apple'ın geliştirici belgelerinde "Uygulama Sandbox'ında, uygulamanız sistemin ağ yapılandırmasını değiştiremez (Sistem Yapılandırması çerçevesi, CoreWLAN çerçevesi veya diğer benzer API'lerle birlikte)" Tamam olabilir, ancak bu pratikte işe yaramıyor ve bu bir yayın tarafından Apple DTS tarafından onaylandı: https://forums.developer.apple.com/thread/11307

0

Mac OS X 10.11.1 ile birlikte gelen Wifi Diagnostics uygulamasının yetkileri hakkında nasıl/System/Library/CoreServices/Applications/adresinde bulunur. Hakların kontrol edilmesi, aşağıdakileri gördüğümü görüyorum: com.apple.wifi.associate, com.apple.wifi.scan, com.apple.wifi.set_channel, com.apple.wifi.start_autojoin, com.apple.wireless-diagnostics, ve com.apple.wireless-diagnostics.basic_report.

Bir sandboxta çalışan faniler, bunları elde edemiyoruz mu?

+0

Bu iyi bir fikirdir, ancak bu hakların Apple dışı uygulamalar tarafından işe yarayıp yaramayacağını bilmediğinizden, bu bir cevaptan çok bir yorumdur. – blm

+0

Uygulama yetkilerim için "com.apple.wifi.scan" ifadesini eklemeye çalıştım ve şu hatayı aldım: 5/30/16 9: 57: 13,925 AM görevlendirildi [526]: net.istumbler [pid 42688] çünkü com.apple.wifi.scan yetkisinin kullanılmasına izin verilmiyor (Hata kodu -67050) – alfwatt