2013-03-06 12 views
5

Mam aplikacji Main.app i aplikacji Helper.app w folderze Main.app/Library/LoginItems. Main.app może zostać uruchomiony przez użytkownika, a użytkownik może następnie ustawić Helper.app jako element logowania. (przy użyciu SMLoginItemSetEnabled()), działa to doskonale. Kiedy użytkownik ustawia Helper.app jako element logowania, jest również uruchamiany.Uruchomienie Mac OS X (LoginItem) APP pomocnika z głównej aplikacji

Należy jednak uruchomić program Helper.app bez ustawiania go jako elementu logowania. Próbowałem to zrobić z

[[NSWorkspace sharedWorkspace] launchApplication: newPath]; 

co daje lsboxd: nie pozwalając, aby uruchomić proces ... błąd iz

[NSTask launchedTaskWithLaunchPath:newPath arguments: [NSArray array]]; 

wich daje zaprzeczyć zabronione-sandbox- reinit Błąd. (? Przypuszczalnie dlatego, że Helper.app jest wewnątrz Main.app)

newpath znajduje się w następujący sposób:

NSMutableArray *pathComponents = [NSMutableArray arrayWithArray:[[[NSBundle mainBundle] bundlePath] pathComponents]]; 
[pathComponents addObject:@"Contents"]; 
[pathComponents addObject:@"Library"]; 
[pathComponents addObject:@"LoginItems"]; 
[pathComponents addObject:@"Helper.app"]; 
[pathComponents addObject:@"Contents"]; 
[pathComponents addObject:@"MacOS"]; 
[pathComponents addObject:@"Helper"]; 
NSString *newPath = [NSString pathWithComponents:pathComponents]; 

Jak mogę rozwiązać ten problem? :)

Dzięki

+0

http://stackoverflow.com/questions/12971549/mac-os-sandbox-launching-main-application-from-helper - to * może * być problem podpisanie który odchodzi raz Aplikacja znajduje się w sklepie z aplikacjami – Petesh

+0

1Password (z procesem 1Password Helper) wydaje się być w stanie to zrobić i są one piaskownicy. Naprawdę zastanawiam się, jak to osiągnąć. –

+0

Szukałem tego również i po prostu wypróbowałem to tak, jak to opisałeś (z wyjątkiem tego, że na stałe utworzyłem ścieżkę, naprawdę nie rozumiem, dlaczego robisz to tak, jak robisz) i zadziałało to od razu. Nie wiem, co robisz źle (lub jeśli robię coś złego, co sprawia, że ​​działa to dla mnie). – Sitses

Odpowiedz

0

Można również użyć NSTask i launchctl. Przykład Możesz też użyć NSTask i skryptu bash. Przykład:

#Run Menu 
if [ $(ps -u $USERNAME | grep -v grep | grep -m1 '/Library/Menu/Menu.app/Contents/MacOS/Menu' | awk '{print $5}') ]; then 
    echo "Menu already running"; 
else 
    echo "Menu not running" 
    if [ $(users $USERNAME) == $USERNAME ]; then 
     echo "User logined" 
     echo "running menu for user $USERNAME" 
     sudo -u $USERNAME /Library/Menu/Menu.app/Contents/MacOS/Menu& 
    else 
     echo "User not logined" 
    fi 
fi