沙盒化的Mac应用程序并不总是使用SMLoginItemSetEnabled()自动启动。

15
我正在开发一个沙盒化的Mac应用程序,遇到了一个非常奇怪的问题。其中一个要求是用户可以在系统启动时启动该应用程序。为此,我使用SMLoginItemSetEnabled(),如http://blog.timschroeder.net/2012/07/03/the-launch-at-login-sandbox-project/所述。
当用户第一次启动应用程序并启用此选项时,我可以看到使用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


1
它必须使用开发者ID证书签名,并且必须放置在应用程序文件夹中。 - Hiren Gujarati
1个回答

8
如果和我一样,您可能会拥有一些通过Xcode等生成的多余副本,这些副本似乎会导致LaunchServices出现混淆。
我在这里写了一篇文章:macOS 10.11及更新版本中的登录项 但简要介绍一下,使用lsregister -dump查找所有LaunchServices已知的副本并删除它们,然后在完成时使用lsregister -kill重置LaunchServices数据库。

2
应该指定完整路径才能使其工作:/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister - strangetimes
相关:https://dev59.com/9l4c5IYBdhLWcg3wXZUB - pkamb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接