У меня есть приложение с песочницей и включает помощника, который представляет некоторый пользовательский интерфейс (в виде полноэкранного окна, но может быть элементом статуса или аналогичным).
Это работает... большую часть времени. Но иногда это не так; он просто молча запускает помощника.
Поскольку хелпер имеет UI, я использую SMLoginItemSetEnabled
для его загрузки, а затем NSXPCConnection
для связи с ним. Но иногда SMLoginItemSetEnabled
не запускает его, но все равно возвращает YES.
Это похоже на старую сборку приложения где-то на машине; что, похоже, путает механизм входа. Удаление старого приложения исправляет его, но я не могу разумно ожидать, что пользователи это сделают (некоторым нравится сохранять старые версии).
Я могу обнаружить эту ситуацию, сравнив результат -[NSWorkspace URLForApplicationWithBundleIdentifier:]
с URL-адресом помощника в комплекте приложения, но попросить пользователя удалить другое приложение не очень изящное решение.
Есть ли способ сделать SMLoginItemSetEnabled
всегда использовать элемент входа из текущего пакета приложений, а не какой-нибудь случайный в другом месте на диске?
Или что-то изменилось в последних выпусках ОС для поддержки более элегантного механизма для помощников с пользовательским интерфейсом?
Я прочитал много других вопросов здесь и в другом месте по этой теме, и кажется, что этот неуклюжий механизм по-прежнему является лучшим решением, но, возможно, я что-то пропустил.