我编写的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]];
尽管在XCode中检查了所有权利,但我收到错误The operation couldn't be completed. (com.apple.coreWLAN.error error 1.)
。我遗失了哪些权利?
CoreWLANWirelessManager示例项目存在同样的问题。
答案 0 :(得分: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上发布它们(Apple将拒绝您的应用,因为Apple80211框架没有公开文档)。但由于您的问题与OSX开发有关,因此不适用于您的情况。
希望它有所帮助。
Farzan Doroodgar
答案 1 :(得分:0)
CoreWLAN似乎根本不适用于沙盒应用。
Apple的开发人员文档指出“使用App Sandbox,您的应用无法修改系统的网络配置(无论是使用系统配置框架,CoreWLAN框架还是其他类似的API)”,这似乎意味着阅读但不是写入设置可能没关系,但这在实践中似乎没有用,Apple DTS的帖子证实了这一点:https://forums.developer.apple.com/thread/11307
答案 2 :(得分:0)
位于/ System / Library / CoreServices / Applications /的Mac OS X 10.11.1附带的Wifi Diagnostics应用程序的权利如何?检查权利我看到它拥有以下内容: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。
我们是否只是在沙箱中工作而无法获得这些人?
答案 3 :(得分:0)