MacOSでSwift 3.0を使用している場合、優先する(=保存した)wifiのssidのリストを取得する方法はありますか?Macで優先Wi-Fiネットワークの一覧をSwift 3で取得する
iOSで廃止され、(驚くほど)実行可能な例がいくつか見つかりました。
MacOSでSwift 3.0を使用している場合、優先する(=保存した)wifiのssidのリストを取得する方法はありますか?Macで優先Wi-Fiネットワークの一覧をSwift 3で取得する
iOSで廃止され、(驚くほど)実行可能な例がいくつか見つかりました。
優先ネットワークは、システム環境設定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
これは、これまでで最も美しいコードではないかもしれませんが、それはスウィフト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)
}
}
}
[ここ](http://stackoverflow.com/a/35806639/2227743)私の答えを助けるべきですあなたは、結果を解析することによって、リスト内の優先/保存されたものを見つけることができると思います。 – Moritz
私が間違っている場合は私を修正してください。しかし、あなたのソリューションは現在利用可能なネットワークを提供しているようです。私はコンピュータが生涯に接続されているものを手に入れたいです。 – l3aronsansgland
あなたはそうです。私はリストにはそれらが含まれると思ったが、明らかにそうではないと思った。 – Moritz