Mac OS X 10.10重新排序首选网络。

3
什么是在OS X中以编程方式更改“首选”网络顺序的最佳方法?Objective-C首选项... 我可以使用CoreWLAN来收集列表,甚至添加到其中,但是就重新排序而言,我一筹莫展。我可以创建首选项文件的副本,编辑它并更改优先级顺序,然后使用bash脚本覆盖现有配置,但这似乎有些混乱。我知道networksetup -addpreferredwirelessnetworkatindex命令,但在10.10中不起作用(对于10.9系统而言运行良好)-它会添加但无法正确设置顺序。SystemConfiguration框架?还是其他什么?谢谢!
1个回答

0

我正在寻找一种方法,在使用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];

一些注意事项/免责声明:

  • 我不经常使用OS X。 我在办公室里有一台测试Mac,上面安装了10.7.5。
  • 这是我第一次编写Objective-C代码。 这是一个下午的成果; 因此可能存在错误和丑陋。 你的情况可能会有所不同。
  • 问题指定为10.10。 我使用{{link1:interfaceWithName和interfaceNames(在10.10中已弃用)}}。 我不确定正确的替代方法是什么,但我怀疑{{link2:CWWifiClient}}。
  • 我的方法基于{{link3:这个Ruby程序}}。
  • 出于简洁起见,我删除了错误处理。
  • 我确实尝试过使用networksetup或在.mobileconfig中删除开放网络权限,但两者似乎都不能正常工作。
  • 由于我只是将网络配置文件列表提取到可变数组中,因此可以轻松地适应任何任意排序等。

Greg,我最终运行了类似的东西,但这个更加简洁,并且使用了你提供的代码。我有点担心兼容性问题,但目前这肯定适用于10.10。 - kalikkalik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接