24/7 twenty-four seven

iOS/OS X application programing topics.

try! Swift 2024 「Accessibility APIを使ってアプリケーションを拡張する」

先日のtry! Swift 2024にて「Accessibility APIを使ってアプリケーションを拡張する」という発表をしました。

tryswift.jp

スライド: speakerdeck.com

台本とアニメーション付きのスライド: github.com

サンプルコード: github.com

Accessibility APIとはUIテストや自動化システムなどで使われている、別のプロセスからアプリケーションの情報を読み取ったりボタンを押したりなど操作することができるAPIです。

スクリーンリーダーやボイスオーバーなどで自身のアプリケーションを操作可能にすることもAccessibility APIの役割ですが、今回は自身をアクセシブルにすることではなく他のアプリケーションを操作することで機能を付け足したりできる、ということを題材にお話ししました。

VS Codeや一部のIDEではAIの機能が統合されていてエディタから使えたりしますが、そのような機能を任意のテキストエディタやブラウザ、その他のアプリケーションで利用できるような拡張機能をAccessibility APIを使えば提供できる、という話です。

以下は講演の中で紹介した技術のデモです。

チャットAIアシスタント

Accessibility APIを使って他のアプリケーションが表示するテキストを取得、グローバルホットキーを監視して指定のホットキーの組み合わせが押されたタイミングでAIアシスタントに指示を出すテキストウインドウを表示する。

インラインAIアシスタント

テキスト入力を監視し、あらかじめ決められたキーワード(/assist)の後に入力されたテキストをAIアシスタントへのプロンプトとして、結果を直接テキストエディタに反映する。

Comic Translator

マンガのセリフを翻訳する。

Accessibility APIでは表示されている画像を取得することはできないので、Accessibility APIはウインドウの座標を特定するために使用して、内容は別途ScreenCaptureKit.frameworkを使用して座標のスクリーンショットを取得して表示中の画像を得る。

VisionKit.frameworkを使ったOCRは縦書きも正確にテキストに変換してくれるのでそれを利用する。なぜかVision.frameworkではうまくいかない。

VisionKit.frameworkだとOCRしたテキストの座標などは取れないのでUIを工夫する必要がありそう。

AXUIElementInspector

ルート要素のAXUIElementを作成してツリー構造を辿る、取得できる要素の名前をAPIを通じて取得する、などAccessibility APIの基本的な使い方を一通り学ぶことができるサンプル。

CarbonHotKey

Carbon APIを使ったキー入力の監視のサンプルコード。特別なパーミッションを取得しなくても動作するという特徴がある。

おいしい朝ごはん

会期中に訪れた朝から開いていて朝食メニューがあるお店を紹介します。

gdyg500.gorp.jp

ビストロ ロジウラ(Bistro Rojiura)。初日の朝ごはん。とてもおいしい。時間の制約がなかったら3日間ここに行ってたと思う。

朝8時から開いているので時間に余裕をもっていける。

ただしベルサール渋谷ファーストへは自転車でも10分以上かかるので歩くのは少し遠い。

buymestand.com

バイ ミー スタンド(BUY ME STAND)。おいしいサンドウィッチのお店。ボリュームがあっておいしい。

ハンバーガー屋さんにあるような紙の袋があるのでそれを使ってトーストに卵焼きやベーコンをはさんでガブっと食べる。おいしい。

会場のベルサール渋谷ファーストがある通り沿いにあって歩いてもたぶん6、7分だと思う。ただ線路を越えるので坂を登ることになる。

bread-espresso.jp

パンとエスプレッソとまちあわせ。宮下パークにあるお店。普通においしいけど宮下パークにあるお店って感じのお店。

発表で使ったもの

今回スライドに使うフォントをヒラギノUDにしてみました。ちょっとみやすくなった気がします。

8BitDo Microというカードサイズのすごい小さいゲームコントローラ。かわいい。キー設定のアプリがiPad用だけどMacでも普通に動くのでこれをKeynoteのスライドが移動できるキーに設定してリモコンとして使った。台にMacを置くとちょっと低いけどこれで操作することで前を向いて喋ることができます。

www.8bitdo.com