Sandboxed Mac应用程序并不总是使用SMLoginItemSetEnabled()自动启动

时间:2013-09-10 06:47:07

标签: macos cocoa

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

当用户第一次启动应用程序并启用此选项时,我可以看到使用 launchctl list 将条目添加到 launchctl 。当我重新启动系统时,应用程序未启动。更奇怪的是,使用 launchctl list 找到的条目已经消失。但是, /private/var/db/launchd.db/com.apple.launchd.peruser.501/overrides.plist 中仍然可以使用键已禁用的类似条目是假的。

当我手动启动应用程序并再次将选项设置为自动启动时,该条目将再次出现在 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

1 个答案:

答案 0 :(得分:5)

如果你像我一样,你可能有额外的副本(由Xcode等生成),这似乎会混淆LaunchServices。

我在这里写了一篇关于它的帖子:Microservices using Spring Boot, Jersey, Swagger and Docker

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

相关问题