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

Nie*_*aan 11 macos cocoa

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

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

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

/sf/ask/1144800681/

小智 6

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

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

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

  • 应指定其工作的完整路径:/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister (2认同)