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

时间:2015-01-22 18:59:59

标签: objective-c macos bash cocoa corewlan

以编程方式更改"首选"的顺序的最佳方式是什么? OS X中的网络? Objective-C首选...

我可以使用CoreWLAN收集列表,甚至可以添加它,但就重新订购而言,我不知所措。我可以创建首选项文件的副本,编辑它并更改优先顺序,然后使用bash脚本来覆盖现有配置,但这似乎很麻烦。

我知道networksetup -addpreferredwirelessnetworkatindex命令,但它在10.10中无法正常工作(适用于10.9系统) - 它添加但未正确设置顺序。

SystemConfiguration框架?还有别的吗?

谢谢!

1 个答案:

答案 0 :(得分: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中写过的第一篇文章。这是一个下午的结果;因此它可能破碎和丑陋。 YMMV。
  • 指明的问题10.10。我用了interfaceWithName and interfaceNames, which are deprecated in 10.10。我不确定适当的替代品是什么,但我怀疑是CWWifiClient
  • 我的方法基于this ruby program
  • 为简洁起见,我删除了错误处理。
  • 我确实考虑过在.mobileconfig中使用networksetup或删除开放网络,但似乎都没有正常工作。
  • 由于我只是将网络配置文件列表拉入可变数组,因此很容易适应任意排序等。