システム画面の特定の画面を開く
- 例えば
Privacy & Security
は下記の2通りのやり方で開くことができる - 一つは
.prefPane
ファイルを開く方法で、もう一方はscheme
で指定して開く方法 - どちらも動きは同じだが、その設定画面のさらに詳細を開きたい際にはSchemeを使うと良い
Button("\"プライバシーとセキュリティ\"を開く (.prefPane経由)") {
let url = URL(filePath: "/System/Library/PreferencePanes/Security.prefPane", directoryHint: .notDirectory)
NSWorkspace.shared.open(url)
}
Button("\"プライバシーとセキュリティ\"を開く (Scheme経由)") {
guard let url = URL(string: "x-apple.systempreferences:com.apple.settings.PrivacySecurity.extension") else {
return
}
NSWorkspace.shared.open(url)
}
- Swiftではなくターミナルで試したい場合は以下
open "/System/Library/PreferencePanes/Security.prefPane"
open "x-apple.systempreferences:com.apple.settings.PrivacySecurity.extension"
.prefPane
の選択
-
.prefPane
ファイルは/System/Library/PreferencePanes
以下に配置されているので利用したいものを選択すればOK
schemeのペインIDの選択
-
x-apple.systempreferences:com.apple.settings.PrivacySecurity.extension
のcom.apple.settings.PrivacySecurity.extension
の部分を以降ペインID
と呼ぶ - システム設定のサイドバーの
ペインID
を知るには以下のplistを参照する/System/Applications/System Settings.app/Contents/Resources/Sidebar.plist
- 参考: https://github.com/bvanpeski/SystemPreferences/blob/main/macos_preferencepanes-Ventura.md#finding-settings-sections
- または後述のApple Scriptからも取得できる
- またこのplistに含まれない詳細設定もあり、その際は下記をターミナルで実行するとペインIDの一覧が取得できる
for pref in $(strings "/System/Applications/System Settings.app/Contents/MacOS/System Settings" | awk '/^com.apple./ {print $1 }'); do echo "$pref"; done
(出力結果)
com.apple.systempreferences.debug
com.apple.ClassroomSettings
com.apple.CD-DVD-Settings.extension
com.apple.preferences.ClassKitPreferencePane
...
ペインIDとアンカーの取得
- 例えば
Privacy & Security
>Camera
の設定を開きたい - これはSchemeの後ろに
?Privacy_Camera
とアンカーをつけるとできる
x-apple.systempreferences:com.apple.settings.PrivacySecurity.extension?Privacy_Camera
- この
Privacy_Camera
というアンカーの文字列をどうやって取得するか - これはシステム設定を開いた状態で
Script Editor.app
から下記のApple Scriptを実行し、現在開いているペインIDとその中にあるアンカーが取得できる
-- Open System Preferences.app and click into desired pane/setting. Then, run this script to find out name (Pane ID) and any anchors.
tell application "System Settings"
set AppleScript's text item delimiters to ", "
set CurrentPane to the id of the current pane
get the name of every anchor of pane id CurrentPane
set CurrentAnchors to get the name of every anchor of pane id CurrentPane
set the clipboard to CurrentPane
display dialog "Current Pane ID: " & CurrentPane & return & return & "Pane ID has been copied to the clipboard." & return & return & "Current Anchors: " & return & (CurrentAnchors as string)
end tell
- 下記のようにペインIDとアンカーがそれぞれ取得できる
com.apple.settings.PrivacySecurity.extension
Privacy_Camera
-
また取得できない一部アンカーに関しては、下記のplistから取得できるとのこと
-
/System/Library/PreferencePanes/Security.prefPane/Contents/Resources/PrivacyTCCServices.plist
-
しかしこれでも
Privacy & Security
>Local Network
のアンカーなど一部取得できないものがあったのでこれは今後の課題 -
(もしご存じの方がいましたら教えていただけると助かります…🙏)
参考
- bvanpeski/SystemPreferences
- macOS 10.15 System Preference Panes
- macOSでアクセシビリティアクセス権限を利用するアプリケーション開発の知見
-
com.apple.preference.datetime
などはmacOS14以降でDeprecated-
preferences
->settings
と呼び方が変わった影響と思われる - SystemPreferences
-