首页 > 解决方案 > 不推荐使用 LSSharedFileListInsertItemURL 时,如何从 macOS 10.11 开始添加 LoginItems?

问题描述

如何在 macOS Mojave 上添加 loginItem?

我发现的解决方案:

macOS Swift:如何正确添加应用程序作为登录项

但自 macOS 10.11 起已弃用调用的函数LSSharedFileListInsertItemURL(但仍适用于 Mojave)。

在使用它时,XCode 给出了注释:

'kLSSharedFileListSessionLoginItems' 已弃用:首先在 macOS 10.11 中弃用 - 改用 LaunchAgent、XPCService 或 ServiceManagement API。

根据该说明,我查看了 ServiceManagement。文件 SMLoginItem.h 定义SMLoginItemSetEnabled和文档https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled

启用位于主应用程序包的 Contents/Library/LoginItems 目录中的帮助应用程序。

这不适用于我的情况,因为我想维护不在我的应用程序包中的应用程序的 LoginItems,例如我想添加/Applications/Books.app为 LoginItem。

CFStringRef thePath = (__bridge CFStringRef)@"/Applications/Books.app";
return SMLoginItemSetEnabled(thePath, YES);

以上代码返回

在调用者的包中找不到登录项 /Applications/Books.app

无法启用登录项:/Applications/Books.app: 107: Malformed bundle

其次,如何以可编程的方式从系统中删除 LoginItem?

我没有为 AppleStore 创建应用程序,因此它没有被沙盒化(我已阅读kLSSharedFileListSessionLoginItems已弃用沙盒应用程序)

标签: macoscocoa

解决方案


我在 App Store 和外部都有应用程序。我正在使用每种方法来添加登录项,具体取决于分发方式。目前没有其他方法可以管理此问题。

SMLoginItemSetEnabled仅适用于您自己的应用程序包中的代理。对于 App Store 以外的应用,您可以使用LSSharedFileListInsertItemURL. 它已被弃用,但没有足够的替代品,它仍然在 macOS 10.15 Beta SDK 中可用。请留意明年 API 的进一步变化。


推荐阅读