2012-10-29 5 views
5

私は無線信号強度を判断する能力に依存するOS Xアプリケーションを作成していますが、サンドボックスに使用するエンタイトルメントを把握することはできません。Sandboxing coreWLAN?

私は

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]]; 

を使用するたびに、私はXcodeで検査したすべての資格を有しているにも関わらず、エラーThe operation couldn't be completed. (com.apple.coreWLAN.error error 1.)を取得します。どのような資格が失われていますか?

CoreWLANWirelessManagerサンプルプロジェクトにも同じ問題があります。

+0

運がありましたか? –

+0

残念ながら、私はしませんでした。あなたはなにか考えはありますか? –

+0

CWInterfaceオブジェクトでrssiプロパティを使用できます。これは、 "現在の総受信信号強度表示(RSSI)測定値(dBm)"をインターフェイスに表示します。 "これは、サンドボックス環境で動作します。 –

答えて

0

dlfcn.hライブラリを使用してApple80211プライベートフレームワークを使用したい場合があります。 iphoneの例では、ここで見つけることができます:

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

は、ソースファイルをダウンロードし、スキャナモジュールを調査します。要約すると

、あなたはこのような何かを思い付くだろう:(Appleは拒否されますあなたがあなたのiOSアプリケーションでプライベートなフレームワークを使用する場合は、App Storeでそれらを公開することができませんことを

#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"]; 
} 

は注意あなたのアプリはApple80211フレームワークの公開文書がないためです)。あなたの質問はOSX開発に関するものなので、これはあなたのケースには当てはまりません。

希望します。
Farzan Doroodgar

+1

資格とサンドボックスの目的は、OS Xのアプリケーションストアにアプリケーションを配布できるようにすることでした。サンドボックスをオフにすると、CWInterfaceは完全に機能します。 –

0

CoreWLANはサンドボックスアプリケーションではまったく使用できないようです。

アップルの開発者向けドキュメントでは、「App Sandboxを使用すると、システム設定のフレームワーク、CoreWLANフレームワーク、または他の同様のAPIを使用して、システムのネットワーク設定を変更することはできません」と表示されます。 https://forums.developer.apple.com/thread/11307

0

Mac OS X 10.11.1に同梱されているWifi Diagnosticsアプリケーションの使用権はどのようになっていますか?/System/Library/CoreServices/Applications /にあります。エンタイトルメントの確認私は次のものがあることを知っています:com.apple.wifi.associate、com.apple.wifi.scan、com.apple.wifi.set_channel、com.apple.wifi.start_autojoin、com.apple.wireless-diagnostics、およびcom.apple.wireless-diagnostics.basic_reportを参照してください。

私たちは単なる死体で、これを得ることができない砂場で働いていますか?

+0

これは良い考えですが、アップル以外のアプリケーションでもそのエンタイトルメントが動作するのか、使用できないのか分からないので、これは答えよりも実際にはコメントです。 – blm

+0

私のアプリケーションエンタイトルメントに 'com.apple.wifi.scan'を追加しようとしましたが、このエラーがありました:' 5/30/16 9:57:13.925 AM taskgated [526]:殺されたネット。istumbler [pid 42688] com.apple.wifi.scanエンタイトルメントの使用が許可されていないため(エラーコード-67050) ' – alfwatt

関連する問題