5

ワイヤレス信号強度を判断する機能に依存する OS X アプリケーションを作成していますが、それをサンドボックス化するために使用する資格がわかりません。

私が使うたびに

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

The operation couldn't be completed. (com.apple.coreWLAN.error error 1.)XCode ですべての資格がチェックされているにもかかわらず、エラーが発生します。不足している資格は何ですか?

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

4

4 に答える 4

0

/System/Library/CoreServices/Applications/ にある Mac OS X 10.11.1 に同梱されている Wifi 診断アプリの資格はどうですか。資格を確認すると、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.

私たちは、これらを取得できないサンドボックスで作業している単なる人間ですか?

于 2015-11-18T20:21:16.637 に答える
0

ここに画像の説明を入力

Outgoing Connections (Client) を確認する必要があると思います。

于 2019-05-30T23:24:49.783 に答える
0

dlfcn.h ライブラリを使用して、Apple80211 プライベート フレームワークを使用することをお勧めします。iPhone の例は次の場所にあります。

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

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

要約すると、次のようなものになります。

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

iOS アプリでプライベート フレームワークを使用する場合、それらを App Store で公開できないことに注意してください (Apple80211 フレームワークの公開ドキュメントがないため、Apple はアプリを拒否します)。しかし、あなたの質問はOSX開発に関するものであるため、これはあなたのケースには当てはまりません.

それが役に立てば幸い。

于 2013-04-25T02:28:39.890 に答える