我正在开发的沙盒 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 。但是,没有提供解决方案。