feed

2021年03月09日, 編集履歴

tccutilでmacOSアプリのプライバシー設定をリセットする

macOSアプリのプライバシー設定をリセットしたい時はtccutilコマンドを使う。

macOSアプリが連絡先やカレンダー情報等、カメラ等の使用、そしてアクセシビリティ機能の使用や他のアプリの操作をしようとする際には、対応するプライバシー設定で許諾を得る必要がある。たいていは、それらの機能の初回使用時に許諾を促すダイアログを出すようにしているはずである。

ここで問題になるのは、許諾を促すダイアログは通常一度しか表示されないということである。許諾を得られていれば問題ないが、一度拒否された場合は再度アプリ側が要求しても表示されない。以降はシステム環境設定の「セキュリティとプライバシー」設定から手動操作をする必要がある。したがって、一度拒否された後は自前でダイアログ等を表示して、手動での許諾操作を促してやらなければならない。

アプリの開発側としては、最初の許諾が得られた後の挙動はもちろん、拒否された場合の挙動も確認する必要がある。システム環境設定からGUI操作でプライバシー設定をリセットすることができるが、許諾後・拒否後の挙動を何度も確認しなければならない時は面倒である。また「オートメーション」のプライバシー設定に関しては、システム環境設定からでは完全なリセットができない(削除ボタンがない。なんで?)。

そこで「tccutil」コマンドの登場である。tccutilを使うことで、プライバシー設定のリセットができる。

基本的な使用方法は、

$ tccutil command service [bundle_id]

である。

commandは唯一のサブコマンドであるresetを指定する。

serviceはプライバシー設定の種類を指定する。種類は検索すれば出てくるが、service-list的なサブコマンドで一覧を出力して欲しい。Allを指定するとすべてのプライバシー設定が対象となる。開発中のアプリの挙動確認をする時は、Allと後述のbundle_idを組み合わせればよい。

bundle_idはリセットしたいアプリのバンドルIDを指定する。指定がない場合はその種類のプライバシー設定すべてをリセットする。

まとめると、

$ tccutil reset All com.genjiapp.Silver-Baton

のようになる。上記コマンドを実行すると、すべてのプライバシー設定からバンドルIDcom.genjiapp.Silver-Batonを持つアプリが削除される(リセットされる)。