2015-07-14 7 views
1

У меня есть приложение, которое должно перезапустить приложение док-станции. Я попытался это как с Apple, Script:Перезагрузите док из приложения

var errorDict: NSDictionary? = nil 
let appleScript = NSAppleScript(source: "tell application \"Dock\" to quit") 
var error = appleScript?.executeAndReturnError(&errorDict) 

if let errorDict = errorDict { 
    println("An error occured: \(errorDict)") 
} 

... и NSTask:

let task = NSTask() 
task.launchPath = "/usr/bin/killall" 
task.arguments = ["Dock"] 
task.launch() 

... и еще NSTask:

func restartFinder() { 
    let task = NSTask() 
    task.launchPath = "/bin/bash" 
    task.arguments = ["killall Dock"] 
    task.launch() 
} 

Тем не менее, кажется, мое приложение не разрешено его перезапускать. Я хотел бы выпустить свое приложение в AppStore, но как я могу перезапустить док?

Ошибка при использовании Apple, сценарий:

An error occured: { 
    NSAppleScriptErrorAppName = Dock; 
    NSAppleScriptErrorBriefMessage = "Application isn\U2019t running."; 
    NSAppleScriptErrorMessage = "Dock got an error: Application isn\U2019t running."; 
    NSAppleScriptErrorNumber = "-600"; 
    NSAppleScriptErrorRange = "NSRange: {27, 4}"; 
} 

Ошибка при использовании NSTask:

killall: warning: kill -TERM 255: Operation not permitted 

Update
Я также пробовал с STPrivilegedTask, который не работал я тоже. Я также не получил окно auth.

+0

Вы не можете сделать это из песочницы. Что вы пытаетесь достичь? – duskwuff

+0

Я пытаюсь перезапустить Dock, потому что я изменил ключ 'mcx-expose-disabled' для' com.apple.dock', используя 'CFPreferencesSetAppValue'. Чтобы изменения вступили в силу, мне нужно перезапустить Dock. –

+0

Вы не можете писать в настройках док-станции из изолированного приложения, насколько я знаю? – duskwuff

ответ

1

Я хотел бы попробовать использовать Applescript, но вместо того, чтобы, как это:

var errorDict: NSDictionary? = nil 
let appleScript = NSAppleScript(source: "do shell script \"killall Dock\" with administrator " + 
"privileges") 
var error = appleScript?.executeAndReturnError(&errorDict) 

if let errorDict = errorDict { 
    println("An error occured: \(errorDict)") 
} 

Таким образом, он выполняет скрипт (как через терминал) с правами администратора. Проблема в том, что это задача, обычно выполняемая только системой или пользователем, для чего требуется ввести пароль администратора.

+0

Thnx. Однако это дало мне следующую ошибку: 'NSAppleScriptErrorMessage =" Имя пользователя или пароль администратора было неправильным. ";' С 'NSAppleScriptErrorRange =" NSRange: {0, 60} ";'. –

+0

Просил вас: «Myapp просит внести изменения». И спросите пароль? Вы можете попытаться «удалить с правами администратора» – BobRon

+0

Или, ваш пароль просто не так? Возможно, у вас нет административных привилегий? – BobRon

Смежные вопросы