Às vezes, SMLoginItemSetEnabled falha silenciosamente ao iniciar o auxiliar da interface do usuário em área restrita

Eu tenho um aplicativo que está na área restrita e inclui um auxiliar que apresenta alguma interface do usuário (como uma janela de tela cheia, mas também pode ser um item de status ou semelhante).

Isso funciona ... na maioria das vezes. Mas às vezes não; apenas silenciosamente falha ao iniciar o auxiliar.

Como o auxiliar tem interface do usuário, eu usoSMLoginItemSetEnabled para carregá-lo, entãoNSXPCConnection para se comunicar com ele. Mas às vezesSMLoginItemSetEnabled falha ao iniciá-lo, enquanto ainda retorna YES.

Isso parece dever-se a uma versão antiga do aplicativo em algum lugar da máquina; isso parece confundir o mecanismo de login. A exclusão do aplicativo antigo o corrige, mas não posso esperar que os usuários façam isso (algumas pessoas gostam de manter versões antigas).

Eu posso detectar essa situação comparando o resultado de-[NSWorkspace URLForApplicationWithBundleIdentifier:] com o URL do auxiliar no pacote de aplicativos, mas ter que pedir ao usuário para remover o outro aplicativo não é uma solução muito elegante.

Existe alguma maneira de fazerSMLoginItemSetEnabled sempre usa o item de logon do pacote atual de aplicativos, em vez de um item aleatório em outro lugar do disco?

Ou alguma coisa mudou nas versões recentes do sistema operacional para oferecer suporte a um mecanismo mais elegante para os auxiliares da interface do usuário?

Eu já li muitas outras perguntas aqui e em outros lugares sobre esse tópico, e parece que esse mecanismo desajeitado ainda é a melhor solução, mas talvez eu tenha perdido alguma coisa.

questionAnswers(3)

yourAnswerToTheQuestion