【发布时间】:2020-04-16 08:53:20
【问题描述】:
我正在尝试从我在 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,它可以正常工作并重置所有停靠设置。
其他信息
- 该应用程序是一个代理,因为我将其作为状态/菜单栏 应用
- 我正在运行 Mac 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,而不是运行完整的命令,因为如果你在终端中这样做,你会得到相同的结果。为什么要这样做;有谁知道如何解决它?
【问题讨论】:
-
很确定每个“单词”都应该是一个单独的参数。这不是一个大论点。
标签: swift xcode terminal macos-catalina