Mam aplikację piaskownicy i zawiera pomocnika, który prezentuje niektóre UI (jako pełnoekranowe okno, ale może być również pozycja statusu lub podobne).SMLoginItemSetEnabled czasami po cichu nie uruchamia się pomocnika piaskownicy UI
Działa to przez większość czasu. Ale czasami tak się nie dzieje; po prostu cicho nie uruchamia pomocnika.
Ponieważ helper ma interfejs użytkownika, używam SMLoginItemSetEnabled
do jego załadowania, a następnie NSXPCConnection
do komunikowania się z nim. Ale czasami SMLoginItemSetEnabled
nie uruchamia go, a wciąż zwraca TAK.
Wydaje się, że jest to spowodowane starą wersją aplikacji w urządzeniu; to wydaje się mylić mechanizm logowania. Usunięcie starej aplikacji naprawia ją, ale nie mogę rozsądnie oczekiwać, że to zrobią (niektórzy ludzie lubią starsze wersje).
Mogę wykryć tę sytuację, porównując wynik -[NSWorkspace URLForApplicationWithBundleIdentifier:]
z adresem URL helpera w pakiecie aplikacji, ale zmuszenie użytkownika do usunięcia drugiej aplikacji nie jest bardzo eleganckim rozwiązaniem.
Czy jest jakiś sposób, aby SMLoginItemSetEnabled
zawsze używać elementu logowania z bieżącego pakietu aplikacji, a nie losowego innego miejsca na dysku?
A może coś się zmieniło w ostatnich wydaniach systemu operacyjnego, aby obsługiwać bardziej elegancki mechanizm dla pomocników z interfejsem użytkownika?
Przeczytałem wiele innych pytań tutaj i gdzie indziej na ten temat, i wydaje się, że ten niezgrabny mechanizm jest nadal najlepszym rozwiązaniem, ale może coś przeoczyłem.
Dziękuję za odpowiedź @Lionel_A! To była ogromna pomoc. Inną rzeczą, którą odkryłem było to, że przynajmniej jeden samouczek sugerował usunięcie MainMenu.xib i ViewController.swift. To był pomysł, ponieważ moja aplikacja pomocnicza po prostu upaść. Xcode nie skarżył się, że nie było Xib podczas kompilacji. – drootang