2012-10-29 2 views
5

무선 신호 강도를 결정하는 기능에 의존하는 OS X 응용 프로그램을 작성하고 있지만 샌드 박스에 어떤 권한을 사용할지 알아낼 수 없습니다. 내가샌드 박싱 코어 WLAN?

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.)를 얻을. 어떤 권리가 누락 되었습니까?

CoreWLANWirelessManager 샘플 프로젝트에도 동일한 문제가 있습니다.

+0

행운이 있었나요? –

+0

불행히도, 나는하지 않았다. 아이디어가 있습니까? –

+0

CWInterface 객체에서 rssi 속성을 사용해 볼 수 있습니다. 인터페이스에 대한 현재 집계 수신 신호 강도 표시 (RSSI) 측정 값 (dBm)을 보여줍니다. ". 샌드 박스 환경에서 작동합니다. –

답변

0

dlfcn.h 라이브러리를 사용하여 Apple80211 개인 프레임 워크를 사용할 수 있습니다. 아이폰의 예는 여기에서 찾을 수 있습니다 :

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

소스 파일을 다운로드하고 스캐너 모듈을 조사합니다. 요약

,이 같은 결과가 올 것이다 : 당신이 당신의 iOS 앱에서 개인 프레임 워크를 사용하는 경우, 당신은 앱 스토어에 게시 할 수 없습니다 것을

#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을 샌드 박스 응용 프로그램에 사용할 수없는 것 같습니다.

Apple 개발자 문서에 "App Sandbox를 사용하면 시스템 구성 프레임 워크, CoreWLAN 프레임 워크 또는 기타 유사한 API를 사용하여 시스템의 네트워크 구성을 수정할 수 없습니다." 괜찮을 수도 있지만 실제로 작동하지 않는 것 같습니다. Apple DTS의 게시물에 의해 확인되었습니다. 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

이것은 좋은 생각입니다.하지만 Apple 제품이 아닌 다른 응용 프로그램에서 작동하거나 사용이 가능한지 여부를 알 수 없으므로 이는 실제로 답변보다 더 많은 의견입니다. – 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

관련 문제