2012-10-29 21 views
5

Tôi đang viết một ứng dụng OS X phụ thuộc vào khả năng xác định cường độ tín hiệu không dây, nhưng tôi không thể tìm ra các quyền sử dụng để sandbox nó.Sandboxing coreWLAN?

Bất cứ khi nào tôi sử dụng

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

tôi nhận được lỗi The operation couldn't be completed. (com.apple.coreWLAN.error error 1.) mặc dù có tất cả các quyền lợi kiểm tra trong XCode. Tôi bị mất quyền lợi gì?

Dự án mẫu CoreWLANWirelessManager có cùng vấn đề.

+0

Bạn có may mắn không? –

+0

Thật không may, tôi đã không. Bạn có bất cứ ý tưởng? –

+0

Bạn có thể thử sử dụng thuộc tính rssi trên đối tượng CWInterface. Nó cho thấy "phép đo chỉ báo cường độ tín hiệu (RSSI) tổng hợp hiện tại (dBm) cho giao diện.". Nó hoạt động trong môi trường sandbox. –

Trả lời

0

Bạn có thể muốn sử dụng khung công tác riêng của Apple80211 bằng cách sử dụng thư viện dlfcn.h. Một ví dụ iphone có thể được tìm thấy ở đây:

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

Tải file nguồn và điều tra mô-đun máy quét.

Nói tóm lại, bạn sẽ đưa ra một cái gì đó như thế này:

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

Lưu ý rằng nếu bạn sử dụng khuôn khổ riêng trong iOS ứng dụng, bạn sẽ không thể xuất bản chúng trên App Store (Apple sẽ từ chối ứng dụng của bạn vì không có tài liệu công khai cho khung công tác Apple80211). nhưng vì câu hỏi của bạn liên quan đến phát triển OSX, điều này không áp dụng cho trường hợp của bạn.

Hy vọng điều đó sẽ hữu ích.
Farzan Doroodgar

+1

Mục tiêu của tôi với quyền lợi và hộp cát là để có thể phân phối ứng dụng trên kho ứng dụng OS X. Nếu tôi tắt hộp cát, CWInterface sẽ hoạt động hoàn hảo. –

0

CoreWLAN dường như không có sẵn cho tất cả các ứng dụng hộp cát.

Tài liệu dành cho nhà phát triển của Apple cho biết "Với ứng dụng Sandbox, ứng dụng của bạn không thể sửa đổi cấu hình mạng của hệ thống (cho dù với khung Cấu hình hệ thống, khung CoreWLAN hoặc các API tương tự khác)", có nghĩa là đọc nhưng không ghi cài đặt có thể là OK, nhưng điều đó dường như không hoạt động trong thực tế và điều này được xác nhận bởi một bài đăng của Apple DTS: https://forums.developer.apple.com/thread/11307

0

Làm thế nào về các quyền dành cho ứng dụng Chẩn đoán Wifi đi kèm với Mac OS X 10.11.1, nằm tại/System/Library/CoreServices/Applications /. Kiểm tra các quyền lợi tôi thấy rằng nó sở hữu những điều sau đây: com.apple.wifi.associate, com.apple.wifi.scan, com.apple.wifi.set_channel, com.apple.wifi.start_autojoin, com.apple.wireless- diagnostics, và com.apple.wireless-diagnostics.basic_report.

Chúng ta chỉ là những người làm việc trong một hộp cát không thể có được những thứ này?

+0

Đây là một suy nghĩ tốt, nhưng như bạn không biết nếu các quyền đó sẽ hoạt động hoặc có thể được sử dụng bởi các ứng dụng không phải của Apple, điều này thực sự là một nhận xét hơn là một câu trả lời. – blm

+0

Tôi đã cố gắng thêm 'com.apple.wifi.scan' vào các quyền của ứng dụng và nhận được lỗi này:' 5/30/16 9: 57: 13.925 AM được giao nhiệm vụ [526]: mạng bị giết.istumbler [pid 42688] vì việc sử dụng quyền com.apple.wifi.scan không được phép (mã lỗi -67050) ' – alfwatt

Các vấn đề liên quan