Macはシステム環境設定で優先するネットワークインターフェイスを変更することが出来きます。
最優先のデバイスは、接続中のデバイスの中で、優先度が最も高いデバイスが選択されます。
これをコードで取得したかったため、調べてみると、SystemConfigurationフレームワークを使えば可能だと分かりました。
import Foundation
import SystemConfiguration
var processName = ProcessInfo.processInfo.processName as CFString
var dynamicStore = SCDynamicStoreCreate(kCFAllocatorDefault, processName, nil, nil)
var ipv4Key = SCDynamicStoreKeyCreateNetworkGlobalEntity(
kCFAllocatorDefault, kSCDynamicStoreDomainState, kSCEntNetIPv4)
if let ipv4Interface = SCDynamicStoreCopyValue(dynamicStore, ipv4Key) as? [CFString: Any] {
if let primaryInterface = ipv4Interface[kSCDynamicStorePropNetPrimaryInterface] as? String {
print("PrimaryInterface: \(primaryInterface)")
}
}
2018/02/10 22:40 追記
「kSCEntNetIPv4」を「kSCEntNetIPv6」にしたらどうなるかが気になったので、試してみると、同じようにプライマリインターフェイスが取得できました。
それと、システム環境設定で順番を明示的に変更したときや、プライマリインターフェイスを切断したときに、直ぐに反映されるのかも試してみると、直ぐに反映されました。
試したOSは、macOS 10.13.3 High Sierraです。