在SOLStumbler for wifi列表中出错



在我的应用程序中,我需要获取wifi的详细信息,通过这个我获得了连接的wifi详细信息,我想要获取wifi列表,所以我使用了私有API SOLStumbler,通过这个,我在中得到了exc_bad_access错误

apple80211Open(&airportHandle);

实际代码为:

NSMutableDictionary *networks; //Key: MAC Address (BSSID)
    void *libHandle;
    void *airportHandle;    
    int (*apple80211Open)(void *);
    int (*apple80211Bind)(void *, NSString *);
    int (*apple80211Close)(void *);
    int (*associate)(void *, NSDictionary*, NSString*);
    int (*apple80211Scan)(void *, NSArray **, void *);

 - (id)init
{
    self = [super init];
    networks = [[NSMutableDictionary alloc] init];
    libHandle = dlopen("/System/Library/SystemConfiguration/IPConfiguration.bundle/IPConfiguration", RTLD_LAZY);
//   libHandle = dlopen("/System/Library/SystemConfiguration/WiFiManager.bundle/WiFiManager", RTLD_LAZY);
//   libHandle = dlopen("/System/Library/PrivateFrameworks/MobileWiFi.framework/MobileWiFi", RTLD_LAZY);
    char *error;
    if (libHandle == NULL && (error = dlerror()) != NULL)  {
        NSLog(@"err ...r%s",error);
        exit(1);
    }
    else{
        NSLog(@"not null");
    }

    apple80211Open = dlsym(libHandle, "Apple80211Open");
    apple80211Bind = dlsym(libHandle, "Apple80211BindToInterface");
    apple80211Close = dlsym(libHandle, "Apple80211Close");
    apple80211Scan = dlsym(libHandle, "Apple80211Scan");
    applecopy= dlsym(libHandle,  "Apple80211GetInfoCopy");
    apple80211Open(&airportHandle);
    apple80211Bind(airportHandle, @"en0");
    return self;
}

苹果不接受上述方法,因为他们使用的是私有的API,请尝试使用以下方法获取SSID和BSSID,而不使用专用API。

- (id)fetchSSIDInfo {
      NSArray *ifs = (__bridge_transfer NSArray *)CNCopySupportedInterfaces();
 NSLog(@"Supported interfaces: %@", ifs);
 NSDictionary *info;
 for (NSString *ifnam in ifs) {
     info = (__bridge_transfer NSDictionary   *)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
     NSLog(@"%@ => %@", ifnam, info);
     if (info && [info count]) { break; }
 }
 return info;}

最新更新