feat: 启动时自动检测权限并跳转系统设置

This commit is contained in:
JOJO 2026-04-24 17:23:28 +08:00
parent 1aee169c68
commit 0c1482c983
2 changed files with 57 additions and 24 deletions

View File

@ -16,10 +16,65 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ notification: Notification) {
NSApp.setActivationPolicy(.accessory)
//
//
if !CGPreflightListenEventAccess() {
requestAccessibilityPermission()
} else {
startKeyMonitor()
}
print("[App] Ready")
}
// MARK: - Permissions
private func requestAccessibilityPermission() {
//
NSWorkspace.shared.open(URL(string: "x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility")!)
//
let alert = NSAlert()
alert.messageText = "需要辅助功能权限"
alert.informativeText = """
Voice Input Fn
1.
2. VoiceInput
3.
2
"""
alert.alertStyle = .informational
alert.addButton(withTitle: "继续")
alert.addButton(withTitle: "退出")
if alert.runModal() == .alertFirstButtonReturn {
//
Timer.scheduledTimer(withTimeInterval: 2.0, repeats: true) { [weak self] timer in
if CGPreflightListenEventAccess() {
timer.invalidate()
DispatchQueue.main.async {
self?.startKeyMonitor()
//
let successAlert = NSAlert()
successAlert.messageText = "权限已授权"
successAlert.informativeText = "辅助功能权限已开启Voice Input 正在运行。"
successAlert.alertStyle = .informational
successAlert.runModal()
}
}
}
} else {
NSApp.terminate(nil)
}
}
private func startKeyMonitor() {
let started = keyMonitor.start()
if !started {
showPermissionAlert()
print("[App] Failed to start key monitor")
return
}
keyMonitor.onFnDown = { [weak self] in
@ -29,8 +84,6 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
keyMonitor.onFnUp = { [weak self] in
self?.stopRecording()
}
print("[App] Ready")
}
// MARK: - Recording
@ -134,26 +187,6 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
finalTranscription = ""
}
// MARK: - Permissions
private func showPermissionAlert() {
let alert = NSAlert()
alert.messageText = "Accessibility Permission Required"
alert.informativeText = """
Voice Input needs Accessibility permission to detect the Fn key globally.
Please go to System Settings > Privacy & Security > Accessibility
and enable Voice Input.
"""
alert.alertStyle = .warning
alert.addButton(withTitle: "Open System Settings")
alert.addButton(withTitle: "Later")
if alert.runModal() == .alertFirstButtonReturn {
NSWorkspace.shared.open(URL(string: "x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility")!)
}
}
func applicationWillTerminate(_ notification: Notification) {
keyMonitor.stop()
audioMonitor.stop()

Binary file not shown.