gpt4 book ai didi

cocoa - 在 OSX 应用程序中显示已知 Wifi 网络列表需要钥匙串(keychain)访问

转载 作者:行者123 更新时间:2023-12-03 17:43:50 26 4
gpt4 key购买 nike

我的 OSX 应用程序需要显示用户已知的 wifi 网络列表。我已经弄清楚如何使用 CoreWLAN 框架来做到这一点。我使用的代码是:

CWInterface *interface = [[CWInterface alloc] init];
NSArray *knownNetworks = interface.configuration.preferredNetworks;

这工作正常,除了当我这样做时,OSX 提示用户说我的应用程序需要对每个存储了密码短语的网络进行钥匙串(keychain)访问。 “preferredNetworks”属性返回 CWWirelessProfile 对象的数组。该类的属性之一是“密码”。我相信这个属性就是我的应用程序需要钥匙串(keychain)访问的原因。

我不需要,甚至不想要用户已知网络的密码。我只关心 SSID。有没有办法在不提取密码的情况下查询已知 SSID 列表?如果我的应用程序没有提示用户它需要钥匙串(keychain)访问,我会更喜欢它。另外,该提示在我的情况下毫无用处,因为无论用户点击“允许”还是“拒绝”,我仍然能够访问网络的 SSID。

最佳答案

事实证明巴伐利亚是正确的;我可以利用系统配置框架来检索已知 wifi 网络的列表,而无需提示用户进行管理访问。这是我最终创建的处理此问题的类:

static NSString *configPath = @"/Library/Preferences/SystemConfiguration/preferences.plist";

@implementation KnownWifiNetworks

/**
This method reads the SystemConfiguration file located at configPath. Its schema is described in Apple's
Documentation at this url:
http://developer.apple.com/library/mac/#documentation/Networking/Conceptual/SystemConfigFrameworks/SC_Components/SC_Components.html

TODO: Cache the results so we don't have the read the file every time?
*/
+ (NSArray *)allKnownNetworks {
NSMutableArray *result = [NSMutableArray arrayWithCapacity:50];
@try {
NSDictionary *config = [NSDictionary dictionaryWithContentsOfFile:configPath];
NSDictionary *sets = [config objectForKey:@"Sets"];
for (NSString *setKey in sets) {
NSDictionary *set = [sets objectForKey:setKey];
NSDictionary *network = [set objectForKey:@"Network"];
NSDictionary *interface = [network objectForKey:@"Interface"];
for(NSString *interfaceKey in interface) {
NSDictionary *bsdInterface = [interface objectForKey:interfaceKey];
for(NSString *namedInterfaceKey in bsdInterface) {
NSDictionary *namedInterface = [bsdInterface objectForKey:namedInterfaceKey];
NSArray *networks = [namedInterface objectForKey:@"PreferredNetworks"];
for (NSDictionary *network in networks) {
NSString *ssid = [network objectForKey:@"SSID_STR"];
[result addObject:ssid];
}
}
}
}
} @catch (NSException * e) {
NSLog(@"Failed to read known networks: %@", e);
}
return result;
}

@end

关于cocoa - 在 OSX 应用程序中显示已知 Wifi 网络列表需要钥匙串(keychain)访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4869416/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com