macos - 不推荐使用 LSSharedFileListInsertItemURL 时,如何从 macOS 10.11 开始添加 LoginItems?
问题描述
如何在 macOS Mojave 上添加 loginItem?
我发现的解决方案:
但自 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
已弃用沙盒应用程序)
解决方案
我在 App Store 和外部都有应用程序。我正在使用每种方法来添加登录项,具体取决于分发方式。目前没有其他方法可以管理此问题。
SMLoginItemSetEnabled
仅适用于您自己的应用程序包中的代理。对于 App Store 以外的应用,您可以使用LSSharedFileListInsertItemURL
. 它已被弃用,但没有足够的替代品,它仍然在 macOS 10.15 Beta SDK 中可用。请留意明年 API 的进一步变化。
推荐阅读
- java - java.net.http.HttpClient 中的超时未按预期工作
- ionic-framework - 使用 firebaseui 通过电子邮件、facebook 或 google 登录后如何将用户重定向到新页面?
- c# - 如何禁用新创建的邮件项目的收件人地址栏?
- kotlin - 如何在 ktor 中接收 POST 数组参数?
- windows-10 - 通过 CRAN 安装 IRkernel 可以在我的 conda 环境中工作吗?
- selenium-webdriver - 我们如何清除用于 Selenium 自动化的 Internet Explorer 的 cookie
- dialogflow-es - 响应后在谷歌操作中禁用麦克风
- node.js - 完成安装后 IPFS 无法在浏览器上运行
- vim - 在 Vim 中,如何设置在插件加载后运行的自动命令?
- javascript - 如何在 if 语句中使用按钮值和对象值来检查正确答案(进行测验)