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

Macos 沙盒Mac应用程序并不总是使用SMLoginItemSetEnabled()自动启动,macos,cocoa,Macos,Cocoa,我正在开发的一款沙盒Mac应用程序有一个非常奇怪的问题。一个要求是,用户应该有可能在系统启动时启动应用程序。为此,我使用了SMLoginItemSetEnabled(),如中所述 当用户第一次启动应用程序并启用此选项时,我可以看到正在使用launchctl列表将一个条目添加到launchctl。重新启动系统时,应用程序未启动。更奇怪的是,使用launchctl list找到的条目消失了。但是,在/private/var/db/launchd.db/com.apple.launchd.peruse

我正在开发的一款沙盒Mac应用程序有一个非常奇怪的问题。一个要求是,用户应该有可能在系统启动时启动应用程序。为此,我使用了SMLoginItemSetEnabled(),如中所述

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

当我手动启动应用程序并再次将选项设置为自动启动时,该条目在launchctl列表中再次可用。当我重新启动系统时,应用程序将自动启动。最后,由于某些原因,SMLoginItemSetEnabled()只在我第二次运行应用程序时起作用。因此,它看起来类似于此问题:。但是,没有提供解决方案


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

我在这里写了一篇关于它的帖子:


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

应指定其工作的完整路径:/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregisterrelated:必须使用开发人员ID证书签名,并且必须放在Applications文件夹中