もうそろそろ新機能の話題は飽きてきた...。これで最後にしたいものです。
AppleScript のいざという時の奥の手。GUI Scripting。ここにもセキュリティの魔の手がのびてきました...。
いや。悪いことではないんですけどね。
GUI Scripting の使用/不使用は、従来はシステム環境設定の「アクセシビリティ」で一括して管理されていました。
これが OS X Mavericks では「セキュリティとプライバシー」の「プライバシー」タブにある「アクセシビリティ」で管理されるようになりました。
このため Mavericks 以前では使用を許可すると全てのアプリケーションでの使用が可能でしたが、Mavericks 以後ではアプリケーションごとに個別に使用を許可するように変更されました。
...困ったものです。以前まではアプレットの起動時に GUI Scripting が許可されているかどうかを調べ、許可されていなかったらアプレットから許可を行うことができたのですが、今後はこの方法が使えないようになったのです。
具体的には次のような処理はできません。
(* スクリプト初期化処理... *)
tell application "System Events"
set bool to UI elements enabled
if not bool then
-- GUI Scripting が利用できないなら
set UI elements enabled to true
end if
end tell
(* 以降の処理 *)
System Events の System Events Suite の application クラスにあった UI Elements Enabled 属性は、Process Suite の application クラスの属性に変更されています。かといって、各アプリケーション毎の状況を調べられるわけではなく、読み出しのみの属性になっています。
現状、起動時に UI Elements enabled を設定するようなアプレットやアプリケーションはその処理の時点で、処理が終了します(UI Elements enabled 属性が読み出しのみになっているのでエラーになる)。
今後は、アプレットの起動時などにシステム環境設定を開いて、アプレットやアプリケーションごとに『手動』でアクセシビリティに追加してもらう必要があります。
AppleScript にかぎったことではなく、アクセシビリティにアクセスするようなアプリケーションは(許可しない限り)軒並み同じ目に遭っているので仕方はないのですが...。
また、アプリケーション単位での許可ですので、例えば、AppleScript Editor で作っていたスクリプトをスクリプトメニューから実行させると、実行できなかったりします。AppleScript Editor だけをアクセスビリティに追加してもだめなのです。
スクリプトを利用するアプリケーション、ここでは System UI Server も追加する必要があります。もし、Terminal から osascript でスクリプトを利用するなら、Terminal も追加する必要があります。これは、Automator で作ったアプリケーションでも同様です(もちろん、アクセシビリティに関連する操作をするものだけですが)。
で、問題は AppleScript で作られたアプレットやドロップレットです。これらは毎回利用の許可を求められることがあります。なぜかというと、ここに詳しいです(やっと、日本語訳されました)。
簡単にいうと『property の値が毎回変わるため、同一のアプリケーションとして認識されない』ためです。ここにはこの問題の解決法が書かれているのですが...、まぁ、書かれているようにセキュリティの脆弱性を招くため『自分で利用するもの』だけに適用するのがいいでしょうし、でも、なるべく使わない方がいいかもしれません。
最後に。アクセシビリティに関する Terminal コマンドに tccutil というものがあります。
これはアクセシビリティにアクセスするアプリケーションの一覧をリセットすることができます(要管理者権限)。例えば、以下のようにすると『連絡先』にアクセスするアプリケーションをリセットすることができます。
$ tccutil reset AddressBook
アクセスビリティなら、
$ tccutil reset Accessibility
となります。
現状ではリセットのみ利用できます。その他の操作はできないのですが、アップデートで機能が追加されたりするのかな?
0 件のコメント :
コメントを投稿