最近在研究如何让敲木鱼支持开机自动启动,从SMLoginltemSetEnabled研究到SMAppService。因为敲木鱼是只支持macOS13版本以上的应用,所以我只需要适配SMAppService就可以了。SMAppService非常方便。

文档

文档地址

mainapp

我们可以用mainApp就可以实现添加本应用的启动项操作。

状态

通过登录启动项状态可以看到目前登录项目是否被开启。

注册登录项

通过register和unregister可以实现添加和删除启动项。

示例

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
import SwiftUI
import ServiceManagement

struct ContentView: View {
@State var launchAtLogin: Bool

init() {
self.launchAtLogin = SMAppService.mainApp.status == .enabled
}

var body: some View {
VStack {
Toggle("launch at login", isOn: $launchAtLogin)
.onChange(of: launchAtLogin) { [oldValue = launchAtLogin] newValue in
do {
if newValue {
try SMAppService.mainApp.register()
} else {
try SMAppService.mainApp.unregister()
}
} catch {
Swift.print(error.localizedDescription)
}
if newValue != (SMAppService.mainApp.status == .enabled) {
launchAtLogin = oldValue
}
}
}
}
}

代码来源地址