#はじめに
macで他のアプリのウィンドウを移動させるアプリケーションを作りたいと思い、色々と調べたところ
の記事が参考になりました。
しかし実装中、上記の記事の制限事項の回避をしていなかったため、AXUIElement
を操作するAXUIElementCopyAttributeValue
やAXUIElementSetAttributeValue
を使うための権限がアプリに付与されておらず、うまくオブジェクトの情報を取得できずにはまってしまいました。
そこで忘れないうちに、制限を回避するためのアクセシビリティの権限をアプリに付与する方法を残しておくことにしました。
#解決方法
1. SandBoxをオフにする
Xcodeで自動生成されるアプリ名.entitlements
ファイルのApp sandboxをNOに変更する
アクセシビリティの API はApp SandBox環境では叩けないようなので、SandBoxの設定を外します。
2. アクセシビリティの権限を付与する
以下のコードを挿入する。
let options: NSDictionary = [kAXTrustedCheckOptionPrompt.takeUnretainedValue() as String : true]
let accessEnabled = AXIsProcessTrustedWithOptions(options)
if !accessEnabled {
print("Access Not Enabled")
}
AXIsProcessTrustedWithOptions
でアプリにアクセシビリティの権限があるかどうか確認し、ない場合は権限を与えるかどうかのダイアログが表示されるので、システム環境設定で許可を与えます。
#おわりに
わかる人にとっては簡単なことでも、知識がないと苦労しますね。
今回初めてまともなアプリを制作してますが、ちゃんとしたエンジニアへの道はまだまだ先が長そうです。