Mac OS X 10.10 重新排序首选网络
Mac OS X 10.10 Reorder preferred networks
以编程方式更改 OS X 中 "preferred" 网络顺序的最佳方法是什么? Objective-C 首选...
我可以使用 CoreWLAN 来收集列表,甚至可以添加到列表中,但就重新排序而言,我不知所措。我可以创建首选项文件的副本,编辑它并更改优先顺序,然后使用 bash 脚本覆盖现有配置,但这看起来很乱。
我知道 networksetup -addpreferredwirelessnetworkatindex 命令,但它在 10.10 中不能正常工作(在 10.9 系统中工作正常)- 它添加了但没有正确设置顺序。
系统配置框架?还有别的吗?
谢谢!
在使用 EAP-TTLS 将用户从开放无线网络转换到 WPA2E 网络后,我一直在寻找一种方法来实现这一点。由于用户首先连接到开放网络,因此它在 首选网络 列表中保持较高位置。
这是我想出的:
CWInterface *interface = [CWInterface interfaceWithName:[
[CWInterface interfaceNames] anyObject]
];
CWMutableConfiguration *config = [CWMutableConfiguration
configurationWithConfiguration:interface.configuration
];
NSMutableArray *networks = [NSMutableArray arrayWithArray:
[config.networkProfiles array]
];
//Remove URI_Open (if present) and
//move URI_Secure (if present) to index 0
for (CWNetworkProfile *profile in [networks copy]) {
if ([[profile ssid] isEqualToString:@"URI_Secure"]) {
[networks removeObject:profile];
} else if ([[profile ssid] isEqualToString:@"URI_Open"]) {
CWNetworkProfile *tmp = profile;
[networks removeObject:tmp];
[networks insertObject:tmp atIndex:0];
}
}
config.networkProfiles = [NSOrderedSet orderedSetWithArray:networks];
SFAuthorization *auth = [SFAuthorization authorization];
BOOL authResult = [auth obtainWithRight:"system.preferences"
flags:(
kAuthorizationFlagExtendRights |
kAuthorizationFlagInteractionAllowed |
kAuthorizationFlagPreAuthorize
) error:nil
];
NSError *error = nil;
[interface commitConfiguration:config authorization:auth error:&error];
一些notes/disclaimers:
- 我不经常使用 OS X。我的办公室有一项测试 Mac。它已安装 10.7.5。
- 这是我在Objective-C写的第一篇文章。这是一个下午的结果;因此它可能破损且丑陋。 YMMV.
- 指定问题 10.10。我用了 interfaceWithName and interfaceNames, which are deprecated in 10.10. I am not sure what the proper replacement is, but I suspect CWWifiClient.
- 我的方法大致基于 this ruby program。
- 为简洁起见,我删除了错误处理。
- 我确实考虑过使用 networksetup 或删除 .mobileconfig 中的开放网络,但似乎都不太合适。
- 因为我只是将网络配置文件列表拉出到一个可变数组中,所以这很容易适应任何任意排序等。
以编程方式更改 OS X 中 "preferred" 网络顺序的最佳方法是什么? Objective-C 首选...
我可以使用 CoreWLAN 来收集列表,甚至可以添加到列表中,但就重新排序而言,我不知所措。我可以创建首选项文件的副本,编辑它并更改优先顺序,然后使用 bash 脚本覆盖现有配置,但这看起来很乱。
我知道 networksetup -addpreferredwirelessnetworkatindex 命令,但它在 10.10 中不能正常工作(在 10.9 系统中工作正常)- 它添加了但没有正确设置顺序。
系统配置框架?还有别的吗?
谢谢!
在使用 EAP-TTLS 将用户从开放无线网络转换到 WPA2E 网络后,我一直在寻找一种方法来实现这一点。由于用户首先连接到开放网络,因此它在 首选网络 列表中保持较高位置。
这是我想出的:
CWInterface *interface = [CWInterface interfaceWithName:[
[CWInterface interfaceNames] anyObject]
];
CWMutableConfiguration *config = [CWMutableConfiguration
configurationWithConfiguration:interface.configuration
];
NSMutableArray *networks = [NSMutableArray arrayWithArray:
[config.networkProfiles array]
];
//Remove URI_Open (if present) and
//move URI_Secure (if present) to index 0
for (CWNetworkProfile *profile in [networks copy]) {
if ([[profile ssid] isEqualToString:@"URI_Secure"]) {
[networks removeObject:profile];
} else if ([[profile ssid] isEqualToString:@"URI_Open"]) {
CWNetworkProfile *tmp = profile;
[networks removeObject:tmp];
[networks insertObject:tmp atIndex:0];
}
}
config.networkProfiles = [NSOrderedSet orderedSetWithArray:networks];
SFAuthorization *auth = [SFAuthorization authorization];
BOOL authResult = [auth obtainWithRight:"system.preferences"
flags:(
kAuthorizationFlagExtendRights |
kAuthorizationFlagInteractionAllowed |
kAuthorizationFlagPreAuthorize
) error:nil
];
NSError *error = nil;
[interface commitConfiguration:config authorization:auth error:&error];
一些notes/disclaimers:
- 我不经常使用 OS X。我的办公室有一项测试 Mac。它已安装 10.7.5。
- 这是我在Objective-C写的第一篇文章。这是一个下午的结果;因此它可能破损且丑陋。 YMMV.
- 指定问题 10.10。我用了 interfaceWithName and interfaceNames, which are deprecated in 10.10. I am not sure what the proper replacement is, but I suspect CWWifiClient.
- 我的方法大致基于 this ruby program。
- 为简洁起见,我删除了错误处理。
- 我确实考虑过使用 networksetup 或删除 .mobileconfig 中的开放网络,但似乎都不太合适。
- 因为我只是将网络配置文件列表拉出到一个可变数组中,所以这很容易适应任何任意排序等。