15

我正在开发的沙盒 Mac 应用程序有一个非常奇怪的问题。一项要求是用户应该能够在系统启动时启动应用程序。为此,我正在使用http://blog.timschroeder.net/2012/07/03/the-launch-at-login-sandbox-project/中所述的 SMLoginItemSetEnabled() 。

当用户第一次启动应用程序并启用此选项时,我可以看到正在使用launchctl list添加一个条目。当我重新启动系统时,该应用程序没有启动。更奇怪的是,使用launchctl list找到的条目消失了。但是,在/private/var/db/launchd.db/com.apple.launchd.peruser.501/overrides.plist中仍然可以使用类似的条目,其中键Disabled为 false。

当我手动启动应用程序并再次将选项设置为自动启动时,该条目再次在launchctl list中可用。当我重新启动系统时,应用程序将自动启动。最后,由于某种原因 SMLoginItemSetEnabled() 仅在我第二次运行该应用程序时才有效。因此它看起来类似于这个问题:https ://stackoverflow.com/questions/16354295/sandbox-app-with-loginitems-only-work-after-second-app-launch 。但是,没有提供解决方案。

https://stackoverflow.com/questions/16354295/sandbox-app-with-loginitems-only-work-after-second-app-launch

4

1 回答 1

8

如果您像我一样,您可能有额外的副本(由 Xcode 等生成),这似乎使 LaunchServices 感到困惑。

我在这里写了一篇关于它的帖子:macOS 10.11 和更高版本中的登录项

但简短的版本是,用于lsregister -dump查找 LaunchServices 知道的所有副本,删除它们,然后lsregister -kill在完成后用于重置 LaunchServices 数据库。

于 2017-04-07T15:24:24.710 回答