Есть ли способ получить список предпочтительных (= сохраненных) sisid wifi на MacOS с Swift 3.0?Получение списка предпочтительных сетей Wi-Fi на Mac с Swift 3
Я нашел несколько примеров, которые устарели и (удивительно) работают только на iOS.
Есть ли способ получить список предпочтительных (= сохраненных) sisid wifi на MacOS с Swift 3.0?Получение списка предпочтительных сетей Wi-Fi на Mac с Swift 3
Я нашел несколько примеров, которые устарели и (удивительно) работают только на iOS.
Предпочитаемые сети хранятся в PLIST в рамках системы преференций NSUserDefaults
. Пока я не вижу API для доступа к этим именам напрямую, вы можете использовать команду defaults
оболочки или NSTask
для доступа к значениям:
defaults read /Library/Preferences/SystemConfiguration/com.apple.airport.preferences | grep SSIDString
Обратите внимание, что в этом списке не только все SSIDs, что компьютер , но список синхронизирован с любым устройством, поддерживающим iCloud.
Связанные обсуждения здесь: OS X Daily - See a List of All Wi-Fi Networks a Mac Has Previously Connected To
Это может быть не самый красивый код когда-либо, но он работает в Swift 3.0.
func shell(arguments: [String] = []) -> (String? , Int32) {
let task = Process()
task.launchPath = "/bin/bash"
task.arguments = arguments
let pipe = Pipe()
task.standardOutput = pipe
task.standardError = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output = String(data: data, encoding: .utf8)
let terminationStatus = task.terminationStatus
return (output, terminationStatus)
}
Расширения:
extension String {
func stringByReplacingFirstOccurrenceOfString(
target: String, withString replaceString: String) -> String
{
if let range = self.range(of: target) {
return self.replacingCharacters(in: range, with: replaceString)
}
return self
}
}
extension String {
func stringByReplacingLastOccurrenceOfString(
target: String, withString replaceString: String) -> String
{
if let range = self.range(of: target, options: String.CompareOptions.backwards) {
return self.replacingCharacters(in: range, with: replaceString)
}
return self
}
}
Получить и очистить SSIDs в WiFi в
let (output, terminationStatus) = shell(arguments: ["-c", "defaults read /Library/Preferences/SystemConfiguration/com.apple.airport.preferences | grep SSIDString"])
if (terminationStatus == 0) {
let arrayOfWifi = output?.components(separatedBy: CharacterSet.newlines)
for var aWifi in arrayOfWifi! {
aWifi = aWifi.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
if (aWifi.hasPrefix("SSIDString = ")) {
aWifi = aWifi.stringByReplacingFirstOccurrenceOfString(target: "SSIDString = ", withString: "")
}
if (aWifi.hasPrefix("\"")) {
aWifi = aWifi.stringByReplacingFirstOccurrenceOfString(target: "\"", withString: "")
}
if (aWifi.hasSuffix("\";")) {
aWifi = aWifi.stringByReplacingLastOccurrenceOfString(target: "\";", withString: "")
}
if (aWifi.hasSuffix(";")) {
aWifi = aWifi.stringByReplacingLastOccurrenceOfString(target: ";", withString: "")
}
aWifi = aWifi.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
print(aWifi)
}
}
}
Мой ответ [здесь] (http://stackoverflow.com/a/35806639/2227743) должно помочь вы - я полагаю, вы можете найти предпочтительные/сохраненные в списке, разобрав результаты. – Moritz
Исправьте меня, если я ошибаюсь, но ваше решение, похоже, предоставляет доступные в настоящее время сети. Я хочу получить те, с которыми компьютер подключился в течение своей жизни. – l3aronsansgland
Вы правы. Я думал, что список будет включать их, но, по-видимому, нет. – Moritz