メインメニューを開く

「Xamarin.Mac/アクセシビリティの許可の有無を取得する」を編集中

警告: ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。ログインまたはアカウントを作成すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。

この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。

最新版 編集中の文章
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フレームワークを使用する==
82行目: 60行目:
  
 
==関連項目==
 
==関連項目==
*[[Xamarin.Mac/アクセシビリティの設定変更を検知する]]
 
 
*[[Xamarin.Mac/Global Event Monitorでキー入力を監視する]]
 
*[[Xamarin.Mac/Global Event Monitorでキー入力を監視する]]
 
*[[Xamarin.Mac/OSのバージョンを取得する]]
 
*[[Xamarin.Mac/OSのバージョンを取得する]]

MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細はMonoBook:著作権を参照)。 著作権保護されている作品は、許諾なしに投稿しないでください!

このページを編集するには、下記の確認用の質問に回答してください (詳細):

取り消し 編集の仕方 (新しいウィンドウで開きます)

このページで使用されているテンプレート:

このページは 1 個の隠しカテゴリに属しています: