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