2017-02-22 4 views
1

MacOSでSwift 3.0を使用している場合、優先する(=保存した)wifiのssidのリストを取得する方法はありますか?Macで優先Wi-Fiネットワークの一覧をSwift 3で取得する

iOSで廃止され、(驚くほど)実行可能な例がいくつか見つかりました。

Network Preferences

+0

[ここ](http://stackoverflow.com/a/35806639/2227743)私の答えを助けるべきですあなたは、結果を解析することによって、リスト内の優先/保存されたものを見つけることができると思います。 – Moritz

+0

私が間違っている場合は私を修正してください。しかし、あなたのソリューションは現在利用可能なネットワークを提供しているようです。私はコンピュータが生涯に接続されているものを手に入れたいです。 – l3aronsansgland

+0

あなたはそうです。私はリストにはそれらが含まれると思ったが、明らかにそうではないと思った。 – Moritz

答えて

1

優先ネットワークは、システム環境設定NSUserDefaultsの一部としてのplistに格納されています。私はあなたが値にアクセスするdefaultsシェルコマンドまたはNSTaskを使用することができ、直接これらの名前にアクセスするためのAPIが表示されませんが:このリストにないだけですべてがコンピュータのSSIDであることを

defaults read /Library/Preferences/SystemConfiguration/com.apple.airport.preferences | grep SSIDString 

注意は接続されていますが、リストはiCloud対応のデバイスと同期されています。

ここに関連の議論:OS X Daily - See a List of All Wi-Fi Networks a Mac Has Previously Connected To

0

これは、これまでで最も美しいコードではないかもしれませんが、それはスウィフト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 
    } 
} 

無線LANのSSIDを取得し、きれいに

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) 
     } 
    } 
} 
関連する問題