Я пытаюсь запустить команду терминала из приложения, над которым я работаю в Xcode 11.4.
let path = "/usr/bin/defaults"
let arguments = ["defaults delete com.apple.dock; killall Dock"]
let task = Process.launchedProcess(launchPath: path, arguments: arguments)
task.waitUntilExit()
Этот код находится внутри функции @IBAction
, которая подключена к кнопке. У меня есть тестирование, что кнопка действительно вызывает это, так как я заменил приведенный выше код простым print("Hello world")
скриптом, и он отлично работал. Однако, когда у меня есть вышеуказанный код в действии и нажмите его. Ответ:
Command line interface to a user's defaults.
Syntax:
'defaults' [-currentHost | -host <hostname>] followed by one of the following:
read shows all defaults
read <domain> shows defaults for given domain
read <domain> <key> shows defaults for given domain, key
read-type <domain> <key> shows the type for the given domain, key
write <domain> <domain_rep> writes domain (overwrites existing)
write <domain> <key> <value> writes key for domain
rename <domain> <old_key> <new_key> renames old_key to new_key
delete <domain> deletes domain
delete <domain> <key> deletes key in domain
import <domain> <path to plist> writes the plist at path to domain
import <domain> - writes a plist from stdin to domain
export <domain> <path to plist> saves domain as a binary plist to path
export <domain> - writes domain as an xml plist to stdout
domains lists all domains
find <word> lists all entries containing word
help print this help
<domain> is ( <domain_name> | -app <application_name> | -globalDomain )
or a path to a file omitting the '.plist' extension
<value> is one of:
<value_rep>
-string <string_value>
-data <hex_digits>
-int[eger] <integer_value>
-float <floating-point_value>
-bool[ean] (true | false | yes | no)
-date <date_rep>
-array <value1> <value2> ...
-array-add <value1> <value2> ...
-dict <key1> <value1> <key2> <value2> ...
-dict-add <key1> <value1> ...
Если я запускаю вышеописанный скрипт defaults delete com.apple.dock; killall Dock
вручную в терминале, он работает нормально и сбрасывает все настройки доков.
Другая информация
- Приложение является агентом, так как я делаю его как приложение в виде строки состояния / строки меню
- Я работаю в Ma c OS 10.15.4 Catalina
- Я также попытался запустить
defaults write com.apple.dock persistent-apps -array-add
'{"tile-type"="spacer-tile";}'; killall Dock
, который снова работал в терминале, но не при запуске из приложения. - Я также попытался поместить эти команды в файл внутри проекта XCode, например
spacer.command
, и затем изменить let arguments = ["defaults delete com.apple.dock; killall Dock"]
строка до let arguments = ["spacer.command"]
. Однако он выдает тот же результат.
Моя проблема в том, что вместо выполнения полной команды код swift просто запускает первое слово defaults
, потому что если вы сделаете это в терминале, вы получите тот же результат. Зачем это делать? а кто-нибудь знает как это исправить?