「Xamarin.Mac/アクセシビリティの許可の有無を取得する」の版間の差分
| (他の1人の利用者による、間の4版が非表示) | |||
| 1行目: | 1行目: | ||
[[Mac OS X]]のGlobal Event Monitorなどの一部の[[API]]は[[システム環境設定]]にあるアクセシビリティの許可がされていない状態では機能しない。 | [[Mac OS X]]のGlobal Event Monitorなどの一部の[[API]]は[[システム環境設定]]にあるアクセシビリティの許可がされていない状態では機能しない。 | ||
*[[Xamarin.Mac/Global Event Monitorでキー入力を監視する]] | |||
恐ろしいことにアクセシビリティの許可がされていない状態でGlobal Event MonitorなどのAPI呼び出しを行ってもスルーされるだけで[[エラー]]も何も発生しない。 この挙動は確実に半年くらいしてどんな実装だったかを忘れたころにトラブルになり、[[エラー]]も出ないので[[デバッグ]]も捗らず原因不明の[[バグ]] | 恐ろしいことにアクセシビリティの許可がされていない状態でGlobal Event MonitorなどのAPI呼び出しを行ってもスルーされるだけで[[エラー]]も何も発生しない。 この挙動は確実に半年くらいしてどんな実装だったかを忘れたころにトラブルになり、[[エラー]]も出ないので[[デバッグ]]も捗らず原因不明の[[バグ]]に悩まされ、[[デスマーチ]]突入は決定的である。 | ||
これを回避するためアプリ起動時にアクセシビリティの許可がされているかを確認し、未許可であれば警告を出す必要がある。 | これを回避するためアプリ起動時にアクセシビリティの許可がされているかを確認し、未許可であれば警告を出す必要がある。 | ||
==実装:TCC.db== | |||
アクセシビリティの設定は「/Library/Application Support/com.apple.TCC/TCC.db」という[[ファイル]]に保存されている。このファイルの中身は[[SQLite3]]のデータベースとなっており、sqlite3コマンドで普通に開ける。 | |||
ただしroot権限が必要となる。設定値を確認するだけでもroot権限が必要となるので現実的ではないと思うがメモとして残しておく。 | |||
<source lang="bash"> | |||
$ sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db | |||
</source> | |||
TCC.dbのテーブル構成は以下のようになっている。 | |||
<source lang="sql"> | |||
sqlite> .schema | |||
CREATE TABLE admin (key TEXT PRIMARY KEY NOT NULL, value INTEGER NOT NULL); | |||
CREATE TABLE access (service TEXT NOT NULL, client TEXT NOT NULL, client_type INTEGER NOT NULL, allowed INTEGER NOT NULL, prompt_count INTEGER NOT NULL, csreq BLOB, CONSTRAINT key PRIMARY KEY (service, client, client_type)); | |||
CREATE TABLE access_times (service TEXT NOT NULL, client TEXT NOT NULL, client_type INTEGER NOT NULL, last_used_time INTEGER NOT NULL, CONSTRAINT key PRIMARY KEY (service, client, client_type)); | |||
CREATE TABLE access_overrides (service TEXT PRIMARY KEY NOT NULL); | |||
</source> | |||
このうちaccessというテーブルにアクセシビリティの設定値が保存されている。 | |||
<source lang="sql"> | |||
select * from access; | |||
</source> | |||
==実装:ApplicationServicesフレームワークを使用する== | ==実装:ApplicationServicesフレームワークを使用する== | ||
| 60行目: | 82行目: | ||
==関連項目== | ==関連項目== | ||
*[[Xamarin.Mac/Global Event Monitorでキー入力を監視する | *[[Xamarin.Mac/アクセシビリティの設定変更を検知する]] | ||
*[[Xamarin.Mac/Global Event Monitorでキー入力を監視する]] | |||
*[[Xamarin.Mac/OSのバージョンを取得する]] | *[[Xamarin.Mac/OSのバージョンを取得する]] | ||
*[[MonoMac/モーダルウインドウを作成する]] | *[[MonoMac/モーダルウインドウを作成する]] | ||