72661


<https://developer.apple.com/documentation/systemconfiguration/1437812-scdynamicstorecopyvalue>  
が公式ドキュメントですが、SCDynamicStoreCopyValueのkeyに具体的に何が指定できるのか明記されていません。単に文字列が指定できることしかわかりません。

<https://stackoverflow.com/a/42093698/1979953> に

> var global = SCDynamicStoreCopyValue(store, "State:/Network/Global/IPv4" as
> CFString)!

と

`"State:/Network/Global/IPv4"` を与えている例がありますが、他には何が指定できるのでしょうか？  
他にもNetworkに関連する関数を調べていますが、与えるものが Enum
ではくて文字列ばかりなので、何を指定できるのかわかりません。可能であればどのようにすれば、与えるべき文字列がわかるのかも教えていただけると幸いです。（一応GitHubで検索して他の文字列を与えている使用例は見つけましたが、この方法では場当たりすぎてどのような機能（キー）があるのか全体像がわかりません）


CC BY-SA 4.0
2020-12-15T01:29:34.913
72657
2020-12-15T03:36:46.173
9008
question
swift macos
SCDynamicStoreCopyValueのkeyには、いったい何が指定できるんでしょうか？


> どのようにすれば、与えるべき文字列がわかるのか

きちんと記述したドキュメントは見つけられませんでしたので、この部分についてだけ。

実施に格納されている全ての情報のキーは、次のようなコードで取得できるようです。  
[`SCDynamicStoreCopyKeyList`](https://developer.apple.com/documentation/systemconfiguration/1437799-scdynamicstorecopykeylist)

[code]

    import Foundation
    import SystemConfiguration
    
    let store = SCDynamicStoreCreate(nil, "test" as CFString, nil, nil)
    if let list = SCDynamicStoreCopyKeyList(store, ".*" as CFString) as? [String] {
        print("\(list.count) entries")
        list.sorted().forEach {key in
            print(key)
        }
    } else {
        print("SCDynamicStoreCopyKeyList->nil")
    }
    
[/code]

出力:

[code]

    94 entries
    Plugin:IPConfiguration
    Plugin:InterfaceNamer
    Plugin:KernelEventMonitor
    Setup:
    Setup:/
    Setup:/Network/Global/IPv4
    Setup:/Network/HostNames
    Setup:/Network/Interface/en1/AirPort
    Setup:/Network/Service/03C1116E-7462-41BB-94B6-1F6AC63FBD10
    Setup:/Network/Service/03C1116E-7462-41BB-94B6-1F6AC63FBD10/IPv4
     : (略)
    State:/Network/Service/F78AAAF8-DD3B-404A-A3E4-D5E037A47765/IPv4
    State:/Network/mDNSResponder/DebugState
    State:/Users/ConsoleUser
    com.apple.DirectoryService.NotifyTypeStandard:DirectoryNodeAdded
    com.apple.opendirectoryd.node:/Contacts
    com.apple.opendirectoryd.node:/Search
    com.apple.sharing
    com.apple.sharing:/AutoUnlock/Enabled
    com.apple.sharing:/AutoUnlock/InProgress
    com.apple.smb
    
[/code]

また同じ情報が、macOSに標準搭載されている`scutil`コマンドでも得られるようです。([参考記事](https://erikberglund.github.io/2018/Get-
the-currently-logged-in-user,-in-Bash/))

[code]

    OOPers-mini:~ dev$ scutil
    > list
      subKey [0] = Plugin:IPConfiguration
      subKey [1] = Plugin:InterfaceNamer
      subKey [2] = Plugin:KernelEventMonitor
      subKey [3] = Setup:
      subKey [4] = Setup:/
      subKey [5] = Setup:/Network/Global/IPv4
      subKey [6] = Setup:/Network/HostNames
      subKey [7] = Setup:/Network/Interface/en1/AirPort
      subKey [8] = Setup:/Network/Service/03C1116E-7462-41BB-94B6-1F6AC63FBD10
      subKey [9] = Setup:/Network/Service/03C1116E-7462-41BB-94B6-1F6AC63FBD10/IPv4
        :(略)
      subKey [84] = State:/Network/Service/F78AAAF8-DD3B-404A-A3E4-D5E037A47765/IPv4
      subKey [85] = State:/Network/mDNSResponder/DebugState
      subKey [86] = State:/Users/ConsoleUser
      subKey [87] = com.apple.DirectoryService.NotifyTypeStandard:DirectoryNodeAdded
      subKey [88] = com.apple.opendirectoryd.node:/Contacts
      subKey [89] = com.apple.opendirectoryd.node:/Search
      subKey [90] = com.apple.sharing
      subKey [91] = com.apple.sharing:/AutoUnlock/Enabled
      subKey [92] = com.apple.sharing:/AutoUnlock/InProgress
      subKey [93] = com.apple.smb
    > quit
    OOPers-mini:~ dev$ 
    
[/code]

各キーに対応する値がいったい何を表しているのかがわからないと意味がないかもしれませんが、「keyに具体的に何が指定できるのか」については一応わかりますよと言うことで。


CC BY-SA 4.0
2020-12-15T03:36:46.173
72661
2020-12-15T03:36:46.173
13972
72657
answer