gpt4 book ai didi

objective-c - 使用助手启用 macOS 应用程序自动登录时出错

转载 作者:太空狗 更新时间:2023-10-30 03:15:34 25 4
gpt4 key购买 nike

我正在尝试按照 Tim 的教程在登录时自动启动我的应用程序:http://blog.timschroeder.net/2012/07/03/the-launch-at-login-sandbox-project/

我按照信中的说明进行操作,但是当我重新登录到我的计算机时出现错误,如下所示:

Jan 10 12:55:01 pc61 com.apple.xpc.launchd[1] (com.myApp.macgap.helper[25725]): Could not resolve CFBundleIdentifier specified by service: -10814: com.myApp.macgap.helper
Jan 10 12:55:01 pc61 com.apple.xpc.launchd[1] (com.myApp.macgap.helper): Service only ran for 0 seconds. Pushing respawn out by 10 seconds.

大纲:

  • 我有一个名为“myApp”的主应用程序(ID:com.myApp.macgap)
  • 在该应用程序中,我有一个 ID 为:com.myApp.macgap.helper 的助手应用程序
  • 当您启动主应用程序并转到首选项时,您可以选择启用自动登录(以符合 Apple 合规性规则)
  • 我退出我的计算机,重新登录并查看控制台以查看发生了什么(这就是我获得上面代码的方式)

另一点值得一提的是,当我在应用程序上执行“显示包内容”并双击助手应用程序时,它会启动主应用程序...

最佳答案

这一切都取决于 launchd 和 launchctl 的工作方式,正如已经回答的那样,常规用例通常可以通过重新安装应用程序并确保该应用程序位于应用程序文件夹中来解决。但是@byb 正在谈论另一种情况,当这种情况发生在您的开发机器上时——这可能是由无效的 launchd 配置引起的。

当您运行 SMLoginItemSetEnabled 时,它会在 launchd 服务中注册您的包标识符以及其他信息。稍后,当您的应用发生更改、清理或发生其他事情时,launchd 会接收到这些信息,launchd 可能会禁用该特定登录项。显然,有时这并不顺利,使用 SMLoginItemSetEnabled 的连续调用将无法按预期工作,或者代理/助手应用根本无法启动。

首先要尝试的是简单地更改启动器的包标识符。如果这样可以解决问题,请尝试找出原始文件有什么问题。运行 launchctl print-disabled "user/$(id -u)" 以显示禁用的服务和登录项关联。如果输出包含您遇到问题的包标识符——您很幸运。

我没有找到使用 launchctl 按名称删除禁用服务的方法,只能通过手动编辑配置文件来完成。因为它们是系统拥有的,所以您将无法简单地单击和编辑,而是以 root 身份启动 Xcode 并删除必要的引用。

sudo /Applications/Xcode.app/Contents/MacOS/Xcode "/private/var/db/com.apple.xpc.launchd/loginitems.$(id -u).plist"
sudo /Applications/Xcode.app/Contents/MacOS/Xcode "/private/var/db/com.apple.xpc.launchd/disabled.$(id -u).plist"

重新启动,运行 launchctl print-disabled "user/$(id -u)" 以确认删除的项目不再在列表中。再次尝试 SMLoginItemSetEnabled,希望它现在能按预期工作。

关于objective-c - 使用助手启用 macOS 应用程序自动登录时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27876046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com