

SwiftでmacOS上で動作するアプリを製作しています。

そこに画像[1](https://i.stack.imgur.com/6k2Km.png)に示した赤枠の部分である、現在選択されている「ネットワーク環境」の名称を取得したいです。

SSIDの取得は以下のコードで取得できました。

[code]

    import CoreWLAN
    
    let SSID_Name : String = {
        return CWWiFiClient()?.interface(withName: nil)?.ssid() ?? ""
    }()
    
[/code]

以上のようなコードで試行錯誤をしてみましたが、わかりませんでした。

ネットで探してもそれらしい情報が見つかりません。  
何か方法がありましたら、ご教示願いたいです。  
よろしくお願いします。

[![ネットワーク環境の名称を取得したい](https://i.stack.imgur.com/6k2Km.png)](https://i.stack.imgur.com/6k2Km.png)


CC BY-SA 3.0
2017-01-20T07:40:34.313
32018
2017-07-21T18:04:45.583
2017-07-21T18:04:45.583
754
20317
question
swift xcode macos
SwiftでmacOSの「ネットワーク環境」の名前を取得する方法


実際の情報はこちらにあるようです。

[code]

    /Library/Preferences/SystemConfiguration/preferences.plist
    
[/code]

SystemConfigurationで調べてみると、いくつかAppleの公式ドキュメントが見つかります。

[System Configuration Programming
Guidelines](https://developer.apple.com/library/content/documentation/Networking/Conceptual/SystemConfigFrameworks/SC_RevHistory/SC_RevHistory.html#//apple_ref/doc/uid/TP40001065-CH211-BAJDAJDJ)

API Reference
[SystemConfiguration](https://developer.apple.com/reference/systemconfiguration)

[SCNetworkConfiguration](https://developer.apple.com/reference/systemconfiguration/1655031-scnetworkconfiguration)

preferences.plistの中では`Sets`なんてところに実際のデータがあったので、ここら辺が怪しそうです。

> Configuring Network Sets
>
> [`func
> SCNetworkSetCopyAll(SCPreferences)`](https://developer.apple.com/reference/systemconfiguration/1517220-scnetworksetcopyall)  
>  Returns all available sets for the specified preferences session.

他のAPI関数も試行錯誤で試してみると、こんなコードでうちのMac(10.11.5)のネットワーク環境(Location:)の名称が取得できました。

[code]

    import Foundation
    import SystemConfiguration
    
    //デフォルトのシステム設定(SCPreferences)を取得する
    let prefs = SCPreferencesCreate(nil, "process-name" as CFString, nil)!
    //システム設定から[SCNetworkSet]を取得する
    if let sets = SCNetworkSetCopyAll(prefs) as? [SCNetworkSet] {
        for set in sets {
            //SCNetworkSetからユーザ定義名称を取得する
            let userDefinedName = SCNetworkSetGetName(set) as String?
            print(userDefinedName ?? "*no name*")
        }
    } else {
        print("cannot get [SCNetworkSet] from this preference: \(prefs)")
    }
    
[/code]

SandBox環境ではどうなるのかまでは試していませんが、以上ご参考までに。


CC BY-SA 3.0
2017-01-20T11:52:31.267
32027
2017-01-20T11:52:31.267
13972
32018
answer