LoginSignup
3
1

More than 1 year has passed since last update.

AXUIElementを操作するために

Last updated at Posted at 2021-09-15

はじめに

macで他のアプリのウィンドウを移動させるアプリケーションを作りたいと思い、色々と調べたところ

の記事が参考になりました。

しかし実装中、上記の記事の制限事項の回避をしていなかったため、AXUIElementを操作するAXUIElementCopyAttributeValueAXUIElementSetAttributeValueを使うための権限がアプリに付与されておらず、うまくオブジェクトの情報を取得できずにはまってしまいました。

そこで忘れないうちに、制限を回避するためのアクセシビリティの権限をアプリに付与する方法を残しておくことにしました。

解決方法

1. SandBoxをオフにする

Xcodeで自動生成されるアプリ名.entitlementsファイルのApp sandboxをNOに変更する
entitlements.png
アクセシビリティの API はApp SandBox環境では叩けないようなので、SandBoxの設定を外します。

2. アクセシビリティの権限を付与する

以下のコードを挿入する。

let options: NSDictionary = [kAXTrustedCheckOptionPrompt.takeUnretainedValue() as String : true]
let accessEnabled = AXIsProcessTrustedWithOptions(options)
if !accessEnabled {
    print("Access Not Enabled")
}

AXIsProcessTrustedWithOptionsでアプリにアクセシビリティの権限があるかどうか確認し、ない場合は権限を与えるかどうかのダイアログが表示されるので、システム環境設定で許可を与えます。

おわりに

わかる人にとっては簡単なことでも、知識がないと苦労しますね。
今回初めてまともなアプリを制作してますが、ちゃんとしたエンジニアへの道はまだまだ先が長そうです。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1