OSXアプリ【Cocoa】

【Swift/Cocoa】アクセシビリティが有効になっているかを確認&設定を促す【OSX】

下記を然るべきところにコピペして使って下さい。
僕はAppdelegate.swiftのapplicationDidFinishLaunchingに記述してます。(正しいかどうかは別として・・・)

let trusted = kAXTrustedCheckOptionPrompt.takeUnretainedValue()
let privOptions = [String(trusted):true]
let accessEnabled = AXIsProcessTrustedWithOptions(privOptions as CFDictionary?)
if accessEnabled != true {
let alert = NSAlert()
alert.messageText = “アクセシビリティを有効にして下さい”
alert.informativeText = “初回のみアクセシビリティの設定が必要です。このアプリへのアクセスを有効にして下さい。”
let response = alert.runModal()

NSRunningApplication.current().activate(options: NSApplicationActivationOptions.activateIgnoringOtherApps)

if (response == NSModalResponseCancel) {
//if AXIsProcessTrustedWithOptions(privOptions as CFDictionary?) == true {
//} else {
NSApp.terminate(self)
//}
}
}else{
print(“Access OK”)
NSEvent.addGlobalMonitorForEvents(matching: NSEventMask.keyDown, handler: keyDown);
}

アクセシビリティが有効になっていたら、特に何も起こりません。
アクセシビリティが有効になっていなかったら、アラートとアクセシビリティ設定画面を出現させます。

【Swift/Cocoa】タイピングイベント(キーイベント/keydown)をバックグラウンドでも取得する方法【OSX】

タイピングすると「カタカタ」と音がなるアプリを作りたくて、バックグラウンドでもkeydownイベントを取得する方法について調べた。

Appdelegate.swift

//★Appdelegate.swiftのapplicationDidFinishLaunching内のどこかに書く
//ただし、アクセシビリティが有効でないと効果はない
NSEvent.addGlobalMonitorForEvents(matching: NSEventMask.keyDown, handler: keyDown);

//★Appdelegateのclass内のどこかに書く
func keyDown(event:NSEvent!) {
print(“押したよ”)
}

アクセシビリティっていうのは「システム環境設定」→「セキュリティとプライバシー」→「プライバシー」→「アクセシビリティ」で出てくる設定の事です。
ここにXcode、もしくはアプリ自体を追加して下さい。
でないとバックグラウンドでkeydownが反応しません。セキュリティ上危険だからね。

アクセシビリティに追加した後は、一旦アプリを再起動してください。(僕はこれに気づかずハマりました。)

+=+=+=+=+=+

それにしてもswift+cocoaとなると、日本語記事が本当に少ないですね・・・。
UIKitの記事はまだ見かけるんですが・・・。あー辛いっす。