2017-02-22 1 views
1

Есть ли способ получить список предпочтительных (= сохраненных) sisid wifi на MacOS с Swift 3.0?Получение списка предпочтительных сетей Wi-Fi на Mac с Swift 3

Я нашел несколько примеров, которые устарели и (удивительно) работают только на iOS.

Network Preferences

+0

Мой ответ [здесь] (http://stackoverflow.com/a/35806639/2227743) должно помочь вы - я полагаю, вы можете найти предпочтительные/сохраненные в списке, разобрав результаты. – Moritz

+0

Исправьте меня, если я ошибаюсь, но ваше решение, похоже, предоставляет доступные в настоящее время сети. Я хочу получить те, с которыми компьютер подключился в течение своей жизни. – l3aronsansgland

+0

Вы правы. Я думал, что список будет включать их, но, по-видимому, нет. – Moritz

ответ

1

Предпочитаемые сети хранятся в 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

0

Это может быть не самый красивый код когда-либо, но он работает в 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) 
     } 
    } 
} 
Смежные вопросы