セキュリティ系の勉強・その他開発メモとか雑談. Twitter, ブログカテゴリ一覧
本ブログはあくまでセキュリティに関する情報共有の一環として作成したものであり,公開されているシステム等に許可なく実行するなど、違法な行為を助長するものではありません.

【Swift5】AXIsProcessTrustedWithOptions(_:) アクセシビリティのダイアログ(Window)が表示されない[MacOS]

//



情報が乗ってないわけではないのですが、日本語のMacOSの解説が少ないので残しておきます。この記事での原因はaddGlobalMonitorForEventsです。

developer.apple.com

f:id:thinline196:20191224092338p:plain


環境

xcode Version 11.2.1 (11B500)
Apple Swift version 5.1.2 (swiftlang-1100.0.278 clang-1100.0.33.9)



コード

コード自体は割と転がっています。新規Cocoa Projectを作って、AppDelegateapplicationDidFinishLaunching()メソッドに記述します。AXIsProcessTrustedWithOptions()を呼ぶことで、アプリケーションに許可がない時にダイアログを表示することができます。

 let options: NSDictionary = [kAXTrustedCheckOptionPrompt.takeRetainedValue() as NSString: true]
    if !AXIsProcessTrustedWithOptions(options){
     //タイマーでチェックし続けるなどをよくする
   }


原因

僕の場合は、addGlobalMonitorForEvents()(アプリを開いてなくてもバックグラウンドでイベントを仕込める)を利用していたので、AppSandboxを切る必要がありました。左のプロジェクト階層のトップを開いて、Sging&Capabilitiesタブを開きます。(Teamは設定しておくと良いかも) f:id:thinline196:20191224092934p:plain


AppSandboxの右上のxボタンを押して消します。 f:id:thinline196:20191224092940p:plain


これで表示されると思います。