我有一个沙盒应用程序,并包含一个显示一些 UI 的助手(作为全屏窗口,但也可以是状态项或类似项)。
这工作......大部分时间。但有时它不会;它只是默默地无法启动助手。
由于助手有 UI,我用SMLoginItemSetEnabled
它来加载它,然后NSXPCConnection
与它通信。但有时SMLoginItemSetEnabled
无法启动它,但仍然返回 YES。
这似乎是由于机器上某处应用程序的旧版本所致;这似乎混淆了登录机制。删除旧应用程序可以修复它,但我不能合理地期望用户这样做(有些人喜欢保留旧版本)。
我可以通过将结果与应用程序包中帮助程序的 URL 进行比较来检测这种情况-[NSWorkspace URLForApplicationWithBundleIdentifier:]
,但是必须要求用户删除其他应用程序并不是一个非常优雅的解决方案。
有什么方法可以使SMLoginItemSetEnabled
始终使用当前应用程序包中的登录项,而不是磁盘上其他地方的随机登录项?
或者在最近的操作系统版本中是否有任何改变以支持更优雅的 UI 助手机制?
我已经在这里和其他地方阅读了关于这个主题的许多其他问题,看起来这种笨重的机制仍然是最好的解决方案,但也许我错过了一些东西。