20260622

TCCリセット(サービス名指定)

TCCリセット(サービス名指定)

NOTE記事一覧ですnote.com

【Safari・FireFox用Script Editorで開く】 |

TCCリセット(サービス名指定).scpt.scpt
ソース
001#!/usr/bin/env osascript
002----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
003(*
004TCC Transparency, Consent, and ControlのDBをリセットします。
005v1 初回作成
006v1.1 macOS13に対応
007v2 macOS15に対応 複数処理できるようにした
008v2.1 macOS26対応
009v2.2 macOS27beta2対応
010
011com.cocolog-nifty.quicktimer.icefloe *)
012----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
013##自分環境がos12なので2.8にしているだけです
014use AppleScript version "2.8"
015use framework "Foundation"
016use scripting additions
017
018property refMe : a reference to current application
019
020##############################
021#サービスリストを取得する
022##############################
023set strFilePathTCCD to ("/System/Library/PrivateFrameworks/TCC.framework/Support/tccd") as text
024set strCmd to ("/usr/bin/strings \"" & strFilePathTCCD & "\" | grep '^kTCCService'") as text
025set listResponse to doZshShellScript(strCmd)
026set strResponse to (item 2 of listResponse)
027
028#サービス名に整形して(kTCCServiceを削除)
029set strDelim to AppleScript's text item delimiters
030set AppleScript's text item delimiters to "kTCCService"
031set listDelim to every text item of strResponse
032set AppleScript's text item delimiters to ""
033set strResponse to listDelim as text
034set AppleScript's text item delimiters to strDelim
035
036#改行区切りでリスト化
037set strDelim to AppleScript's text item delimiters
038set AppleScript's text item delimiters to return
039set listServiceName to every text item of strResponse
040set AppleScript's text item delimiters to strDelim
041
042#ARRAYにして
043set ocidServiceNameArray to refMe's NSArray's arrayWithArray:(listServiceName)
044#空の項目を削除
045#対象の文字数が0以上の項目を残す=空の項目が削除される
046set appPredicate to refMe's NSPredicate's predicateWithFormat:("SELF.length > 0")
047set ocidServiceNameArray to ocidServiceNameArray's filteredArrayUsingPredicate:(appPredicate)
048#ソート
049set ocidSortedArray to ocidServiceNameArray's sortedArrayUsingSelector:("localizedStandardCompare:")
050#ダイアログ用にリストに戻す
051set listServiceName to ocidSortedArray as list
052
053##############################
054#####ダイアログを前面に
055##############################
056set strName to (name of current application) as text
057if strName is "osascript" then
058   tell application "System Events" to activate
059else
060   tell current application to activate
061end if
062##############################
063#####ダイアログ
064##############################
065set strPrompt to ("リセットするTCCサービスを選んでください" & return & "kTCCServiceLiverpoolは位置情報" & return & "kTCCServiceUbiquityはiCloud" & return & "kTCCServiceWillowはHOMEKit" & return & "オートメーションはkTCCServiceAppleEvents")
066try
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
071on error
072   log "エラーしました"
073   return "エラーしました"
074end try
075if (class of valueResponse) is boolean then
076   log "Error キャンセルしました"
077   error "ユーザによってキャンセルされました。" number -128
078else 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
085end if
086#選んだ数だけ繰り返し
087repeat 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   
101end repeat
102
103try
104   with timeout of 3 seconds
105      tell application "System Events" to quit
106   end timeout
107on error strErrMes number numErrNo
108   log "Quit System Events" & strErrMes & numErrNo
109   return false
110end try
111
112
113return
114
115
116##########################
117# 【SUDO】ZSH 実行
118to 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}
131end doZshShellScriptSudo
132
133##########################
134# 【通常】ZSH 実行
135to 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}
148end doZshShellScript
149
150
151
152
AppleScriptで生成しました