2020-02-18T14:32:18+09:00
System Events を使わずに AppleScript から GUI Scripting が使用可能か調べる
OS X 10.10 から導入された JXA (JavaScript for Automation) を使って、System Events を使わずに、GUI Scripting が使用可能かどうか調べて、使用不可だったらダイアログを出すスクリプトを紹介します。オーソドックスに AppleScript を使うより、随分コードが短くなります。
AppleScript から GUI Scripting を使用可能かどうか調べるには、次のような感じで System Events に問い合わせるのが、普通ですね。
そして、もし false が帰ってきたら、ダイアログを表示して、システム環境設定の「セキュリティーとプライバシー」の「プライバシー」タブの「アクセッシビリティー」で設定するように促しますね。
この一連の流れを行う AppleScript ライブラリ GUIScriptingChecker を開発/公開しています。
これはこれで良いのですが、macOS 10.14 から最初に Apple Event を送る際に、承認を求められるようになりました。つまり、GUI Scripting をチェックする際にいちいち System Events への Apple Event の送信を承認しなきゃいけない。うっとおしいですね。
C 言語の API を使うことができれば、Apple Event を送信せずに GUI Scripting が使用可能かチェックできます。AppleScript は C の API にアクセスできませんが、OS X 10.10 から 導入された (JXA) JavaScript for Automation では、それができます。そこで、次のように run script で JXA を実行します。
この方法の何が良いって、次のように OS 側が用意している GUI Scripting の設定を促すダイアログを表示してくれることです。
わざわざ自分でダイアログを表示するコードを書く手間が省けます。
AppleScripter としては、JXA の利用は負けた気がしますが、C の API を実行できる機能には抗えません。