diff --git a/HeliPort/Info.plist b/HeliPort/Info.plist
index 085d43c..23e043f 100644
--- a/HeliPort/Info.plist
+++ b/HeliPort/Info.plist
@@ -44,6 +44,18 @@
+ SMAppService
+
+ LoginItems
+
+
+ Identifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)-Launcher
+ Enabled
+
+
+
+
NSSupportsAutomaticTermination
NSSupportsSuddenTermination
diff --git a/HeliPort/LoginItemManager.swift b/HeliPort/LoginItemManager.swift
index 7d5e0ed..31d938a 100644
--- a/HeliPort/LoginItemManager.swift
+++ b/HeliPort/LoginItemManager.swift
@@ -21,20 +21,38 @@ class LoginItemManager {
private static let launcherId = Bundle.main.bundleIdentifier! + "-Launcher"
public class func isEnabled() -> Bool {
+ if #available(macOS 13.0, *) {
+ return SMAppService.mainApp.status == .enabled
+ } else {
+ guard let jobs =
+ (LoginItemManager.self as DeprecationWarningWorkaround.Type).jobsDict
+ else {
+ return false
+ }
- guard let jobs =
- (LoginItemManager.self as DeprecationWarningWorkaround.Type).jobsDict
- else {
- return false
- }
-
- let job = jobs.first { $0["Label"] as? String? == launcherId }
+ let job = jobs.first { $0["Label"] as? String? == launcherId }
- return job?["OnDemand"] as? Bool ?? false
+ return job?["OnDemand"] as? Bool ?? false
+ }
}
public class func setStatus(enabled: Bool) {
- SMLoginItemSetEnabled(launcherId as CFString, enabled)
+ if #available(macOS 13.0, *) {
+ do {
+ if enabled {
+ if SMAppService.mainApp.status == .enabled {
+ try? SMAppService.mainApp.unregister()
+ }
+ try SMAppService.mainApp.register()
+ } else {
+ try SMAppService.mainApp.unregister()
+ }
+ } catch {
+ Log.error("Failed to \(enabled ? "enable" : "disable") login item: \(error.localizedDescription)")
+ }
+ } else {
+ SMLoginItemSetEnabled(launcherId as CFString, enabled)
+ }
}
}
@@ -48,4 +66,4 @@ extension LoginItemManager: DeprecationWarningWorkaround {
static var jobsDict: [[String: AnyObject]]? {
SMCopyAllJobDictionaries(kSMDomainUserLaunchd)?.takeRetainedValue() as? [[String: AnyObject]]
}
-}
+}
\ No newline at end of file