forked from laishulu/macism
-
-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathLaunchManager.swift
More file actions
98 lines (87 loc) · 3.5 KB
/
LaunchManager.swift
File metadata and controls
98 lines (87 loc) · 3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import Cocoa
import ServiceManagement
class LaunchManager {
static let shared = LaunchManager()
private init() {
// 初始化时同步开机启动状态到 UserPreferences
UserPreferences.shared.launchAtLogin = isLaunchAtLoginEnabled()
}
func isLaunchAtLoginEnabled() -> Bool {
if #available(macOS 13.0, *) {
return SMAppService.mainApp.status == .enabled
} else {
// 对于旧版本的 macOS,检查登录项
if let loginItems = try? FileManager.default.contentsOfDirectory(atPath: "/Users/\(NSUserName())/Library/Application Support/com.apple.backgroundtaskmanagementagent/BackgroundItems.btm") {
let isEnabled = loginItems.contains(where: { $0.contains("MacVimSwitch") })
print("检查开机启动状态: \(isEnabled)")
return isEnabled
}
return false
}
}
func toggleLaunchAtLogin() -> Bool {
if #available(macOS 13.0, *) {
do {
let service = SMAppService.mainApp
if service.status == .enabled {
try service.unregister()
} else {
try service.register()
}
// 验证操作是否成功
let newState = isLaunchAtLoginEnabled()
UserPreferences.shared.launchAtLogin = newState
return true
} catch {
print("设置开机启动失败: \(error)")
return false
}
} else {
// 对于旧版本的 macOS,使用 AppleScript
let bundlePath = Bundle.main.bundlePath
let currentState = isLaunchAtLoginEnabled()
var success = false
if currentState {
// 使用 AppleScript 移除登录项
let script = """
tell application "System Events"
delete login item "MacVimSwitch"
end tell
"""
var error: NSDictionary?
if let scriptObject = NSAppleScript(source: script) {
scriptObject.executeAndReturnError(&error)
if let error = error {
print("Error removing login item: \(error)")
} else {
success = true
}
}
} else {
// 使用 AppleScript 添加登录项
let script = """
tell application "System Events"
make new login item at end with properties {path:"\(bundlePath)", hidden:false}
end tell
"""
var error: NSDictionary?
if let scriptObject = NSAppleScript(source: script) {
scriptObject.executeAndReturnError(&error)
if let error = error {
print("Error adding login item: \(error)")
} else {
success = true
}
}
}
// 验证操作是否成功
let newState = isLaunchAtLoginEnabled()
success = success && (newState != currentState)
// 更新 UserPreferences
if success {
UserPreferences.shared.launchAtLogin = newState
}
return success
}
}
}