我想要一个命令行工具的 Cocoa 等价物open(1)
,特别是对于这种形式的用法:
open -a <SomeApplication> <SomeFile> --args <Arg1> <Arg2> ...
以 QuickTime 为例。以下命令行将使用 QuickTime 打开文件,参数可以控制 QuickTime 是否在启动时播放文件。
open -a "QuickTime Player" a.mp4 --args -MGPlayMovieOnOpen 0 # or 1
我已阅读Launching an Mac App with Objective-C/Cocoa。prosseek 的答案,我认为相当于open -a <App> <File>
,当我不指定任何参数时效果很好。ughoavgfhw 的答案,我认为相当于open -a <App> --args <Arg1> <Arg2> ...
,当我不指定要打开的任何文件时效果很好。但两者都不能同时指定文件名和参数。
我还尝试将文件名附加到参数列表中,这是 unix 程序常用的方式。似乎有些应用程序可以接受它,但有些不能。QuickTime 提示一个错误,说它无法打开文件。我正在使用以下代码。
NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
NSURL *url = [NSURL fileURLWithPath:[workspace fullPathForApplication:@"QuickTime Player"]];
NSArray *arguments = [NSArray arrayWithObjects:@"-MGPlayMovieOnOpen", @"0", @"a.mp4", nil];
[workspace launchApplicationAtURL:url options:0 configuration:[NSDictionary dictionaryWithObject:arguments forKey:NSWorkspaceLaunchConfigurationArguments] error:nil];
// open -a "QuickTime Player" --args -MGPlayMovieOnOpen 0 a.mp4
似乎打开文件的机制与通常的论点不同。任何人都可以解释的内部结构open(1)
,或者只是给我一个解决方案?谢谢。