背景
更新完系统,发现自己一个mac应用开机自启失败。
表现为方法调用返回 false
SMLoginItemSetEnabled(loginItemIdentifier as CFString, state)
查询发现macOS 13.0 更新了一个新类 SMAppService
,使用这个类调用register()
and unregister()
解决办法
// 创建登录项
@available(macOS 13.0, *)
private func loginItem() -> SMAppService {
// The bundle identifier of the helper application bundle
return SMAppService.loginItem(identifier: loginItemIdentifier)
}
// 注册登录项
@available(macOS 13.0, *)
func addLoginItem(complate: (_ result: Bool) -> ()) {
do {
try loginItem().register()
saveLoginAutoLaunchState(state: true)
complate(true)
} catch {
print(error)
complate(false)
}
}
// 移除登录项
@available(macOS 13.0, *)
func removeLoginItem(complate: (_ result: Bool) -> ()) {
do {
try loginItem().unregister()
saveLoginAutoLaunchState(state: false)
complate(true)
} catch {
print(error)
complate(false)
}
}
Xcode 需要更新到14.1。正式暂时没更新,可以用RC版
官方文档
https://developer.apple.com/documentation/servicemanagement/smappservice