
TCCリセット(サービス名指定)
【Safari・FireFox用Script Editorで開く】 |
| ソース | |
|---|---|
| 001 | #!/usr/bin/env osascript |
| 002 | ----+----1----+----2----+-----3----+----4----+----5----+----6----+----7 |
| 003 | (* |
| 004 | TCC Transparency, Consent, and ControlのDBをリセットします。 |
| 005 | v1 初回作成 |
| 006 | v1.1 macOS13に対応 |
| 007 | v2 macOS15に対応 複数処理できるようにした |
| 008 | v2.1 macOS26対応 |
| 009 | v2.2 macOS27beta2対応 |
| 010 | |
| 011 | com.cocolog-nifty.quicktimer.icefloe *) |
| 012 | ----+----1----+----2----+-----3----+----4----+----5----+----6----+----7 |
| 013 | ##自分環境がos12なので2.8にしているだけです |
| 014 | use AppleScript version "2.8" |
| 015 | use framework "Foundation" |
| 016 | use scripting additions |
| 017 | |
| 018 | property refMe : a reference to current application |
| 019 | |
| 020 | ############################## |
| 021 | #サービスリストを取得する |
| 022 | ############################## |
| 023 | set strFilePathTCCD to ("/System/Library/PrivateFrameworks/TCC.framework/Support/tccd") as text |
| 024 | set strCmd to ("/usr/bin/strings \"" & strFilePathTCCD & "\" | grep '^kTCCService'") as text |
| 025 | set listResponse to doZshShellScript(strCmd) |
| 026 | set strResponse to (item 2 of listResponse) |
| 027 | |
| 028 | #サービス名に整形して(kTCCServiceを削除) |
| 029 | set strDelim to AppleScript's text item delimiters |
| 030 | set AppleScript's text item delimiters to "kTCCService" |
| 031 | set listDelim to every text item of strResponse |
| 032 | set AppleScript's text item delimiters to "" |
| 033 | set strResponse to listDelim as text |
| 034 | set AppleScript's text item delimiters to strDelim |
| 035 | |
| 036 | #改行区切りでリスト化 |
| 037 | set strDelim to AppleScript's text item delimiters |
| 038 | set AppleScript's text item delimiters to return |
| 039 | set listServiceName to every text item of strResponse |
| 040 | set AppleScript's text item delimiters to strDelim |
| 041 | |
| 042 | #ARRAYにして |
| 043 | set ocidServiceNameArray to refMe's NSArray's arrayWithArray:(listServiceName) |
| 044 | #空の項目を削除 |
| 045 | #対象の文字数が0以上の項目を残す=空の項目が削除される |
| 046 | set appPredicate to refMe's NSPredicate's predicateWithFormat:("SELF.length > 0") |
| 047 | set ocidServiceNameArray to ocidServiceNameArray's filteredArrayUsingPredicate:(appPredicate) |
| 048 | #ソート |
| 049 | set ocidSortedArray to ocidServiceNameArray's sortedArrayUsingSelector:("localizedStandardCompare:") |
| 050 | #ダイアログ用にリストに戻す |
| 051 | set listServiceName to ocidSortedArray as list |
| 052 | |
| 053 | ############################## |
| 054 | #####ダイアログを前面に |
| 055 | ############################## |
| 056 | set strName to (name of current application) as text |
| 057 | if strName is "osascript" then |
| 058 | tell application "System Events" to activate |
| 059 | else |
| 060 | tell current application to activate |
| 061 | end if |
| 062 | ############################## |
| 063 | #####ダイアログ |
| 064 | ############################## |
| 065 | set strPrompt to ("リセットするTCCサービスを選んでください" & return & "kTCCServiceLiverpoolは位置情報" & return & "kTCCServiceUbiquityはiCloud" & return & "kTCCServiceWillowはHOMEKit" & return & "オートメーションはkTCCServiceAppleEvents") |
| 066 | try |
| 067 | tell application "System Events" |
| 068 | activate |
| 069 | set valueResponse to (choose from list listServiceName with title "選んでください" with prompt strPrompt default items (item 3 of listServiceName) with multiple selections allowed without empty selection allowed) |
| 070 | end tell |
| 071 | on error |
| 072 | log "エラーしました" |
| 073 | return "エラーしました" |
| 074 | end try |
| 075 | if (class of valueResponse) is boolean then |
| 076 | log "Error キャンセルしました" |
| 077 | error "ユーザによってキャンセルされました。" number -128 |
| 078 | else if (class of valueResponse) is list then |
| 079 | if valueResponse is {} then |
| 080 | log "Error 何も選んでいません" |
| 081 | return false |
| 082 | else |
| 083 | set listResponse to valueResponse as list |
| 084 | end if |
| 085 | end if |
| 086 | #選んだ数だけ繰り返し |
| 087 | repeat with itemServiceName in listResponse |
| 088 | set strServiceName to itemServiceName as text |
| 089 | |
| 090 | ###TCCのサービス名でリセット ユーザー |
| 091 | set strCmd to ("/usr/bin/tccutil reset \"" & strServiceName & "\"") as text |
| 092 | #通常実行 |
| 093 | log doZshShellScript(strCmd) |
| 094 | |
| 095 | ###TCCのサービス名でリセット ローカル(SUDO) |
| 096 | set strCmd to ("/usr/bin/tccutil reset \"" & strServiceName & "\"") as text |
| 097 | #sudo実行 |
| 098 | log doZshShellScriptSudo(strCmd) |
| 099 | |
| 100 | |
| 101 | end repeat |
| 102 | |
| 103 | try |
| 104 | with timeout of 3 seconds |
| 105 | tell application "System Events" to quit |
| 106 | end timeout |
| 107 | on error strErrMes number numErrNo |
| 108 | log "Quit System Events" & strErrMes & numErrNo |
| 109 | return false |
| 110 | end try |
| 111 | |
| 112 | |
| 113 | return |
| 114 | |
| 115 | |
| 116 | ########################## |
| 117 | # 【SUDO】ZSH 実行 |
| 118 | to doZshShellScriptSudo(argCommandText) |
| 119 | set strCmd to argCommandText as text |
| 120 | log "コマンド開始" & return & strCmd & return |
| 121 | set strExec to ("/bin/zsh -l -c '/usr/bin/sudo " & strCmd & "'") as text |
| 122 | ########## |
| 123 | #コマンド実行 |
| 124 | try |
| 125 | set strResnponse to (do shell script strExec) as text |
| 126 | log "コマンド終了" |
| 127 | on error |
| 128 | return {false, missing value} |
| 129 | end try |
| 130 | return {true, strResnponse} |
| 131 | end doZshShellScriptSudo |
| 132 | |
| 133 | ########################## |
| 134 | # 【通常】ZSH 実行 |
| 135 | to doZshShellScript(argCommandText) |
| 136 | set strCmd to argCommandText as text |
| 137 | log "コマンド開始" & return & strCmd & return |
| 138 | set strExec to ("/bin/zsh -l -c '" & strCmd & "'") as text |
| 139 | ########## |
| 140 | #コマンド実行 |
| 141 | try |
| 142 | set strResnponse to (do shell script strExec) as text |
| 143 | log "コマンド終了" |
| 144 | on error |
| 145 | return {false, missing value} |
| 146 | end try |
| 147 | return {true, strResnponse} |
| 148 | end doZshShellScript |
| 149 | |
| 150 | |
| 151 | |
| 152 | |
| AppleScriptで生成しました | |
