2016-01-21 9 views
0

Я создаю проект для приложения os x с помощью xpcservices, который запускается loginItems. это означает, что услуга основана в приложении в пути: {APP_NAME} .app/Содержание/Библиотека/LoginItems и кто несет ответственность за запуск службы является основным приложением:как я могу удалить XPCService по сценарию

NSXPCConnection *connection = [[NSXPCConnection alloc] initWithLoginItemName:@"{SERVICE_NAME}.app" error:&error]; 

Я построил деинсталлятор, для удаление всех файлов, которые я установил. и мне нужно удалить эту услугу. команда я использовал для этого:

launchctl remove SERVICE_NAME 

это отлично работает, если я запустить его из терминала, но если я запустить его из сценария это удалить службу из «Activity Monitor», но сервис все еще в Список запуска с статусом -5. , поэтому, если я устанавливаю новую версию, вы берете предыдущую версию, которая была установлена.

Запуск сценария из xcode на NSTask. ошибки нет. он делает то, что должен делать сценарий. Я даже установить привилегии администратора:

/usr/bin/osascript -e 'do shell script \"SCRIPT_NAME args 2>&1 etc\" with administrator privileges' 

Почему это не удалить, как я сделал это в терминале?

пс: его работы при запуске его из Xcode (даже приложение в режиме выпуска)

ответ

0

Чтобы удалить правильно элемент входа вы должны сделать это в коде: пропуск ложного в SMLoginItemSetEnabled:

SMLoginItemSetEnabled((__bridge CFStringRef)loginItemBundleId, false)