我曾经问过一个关于我在AVPlayerView上遇到的问题。稍微玩弄它之后,我实际上喜欢我的mac应用程序看起来并运行得更好,而不是用AVPlayerView打开一个新窗口,它启动QuickTime,并告诉它打开我的http视频网址。我想出了几种方法来实现这一点,所有这些方法都可以在没有沙盒的情况下工作,但没有一种方法可以使用。我目前正在使用NSTask来实现
open -a "Quicktime Player" "http://example.com/video.m4v"
同样,这是有效的,但只有当我的应用程序没有沙盒时。有没有办法在沙盒应用程序中执行此操作? 提前感谢任何意见或建议。
答案 0 :(得分:0)
默认情况下,Sandbox不允许使用NSTask。使用appropriate entitlement.
要打开quicktime并开始播放电影,您可能最好使用NSWorkspace这样:
[[NSWorkspace sharedWorkspace] openURLs:@[url]
withAppBundleIdentifier:@"com.apple.QuickTimePlayerX"
options:NSWorkspaceLaunchAsync
additionalEventParamDescriptor:NULL
launchIdentifiers:nil];
或者直接进入Launch Services,您甚至可以更好地控制事物的发布方式和方式:
NSURL *appToOpenWith = // get the URL of Quicktime using NSWorkspace URLForApplicationWithBundleIdentifier;
LSLaunchURLSpec inLaunchSpec;
inLaunchSpec.appURL = (__bridge CFURLRef) appToOpenWith;
inLaunchSpec.itemURLs = (__bridge CFArrayRef) ([NSArray arrayWithObject:theNSURLPointingToYourM4V ]);
inLaunchSpec.passThruParams = NULL;
inLaunchSpec.launchFlags = kLSLaunchDefaults; // could be done async... are we here in the main thread?
inLaunchSpec.asyncRefCon = NULL;
CFURLRef outLaunchedURL;
OSStatus diditOpen = LSOpenFromURLSpec (&inLaunchSpec, &outLaunchedURL);
if (noErr != diditOpen) {
NSLog(@"couldn't open selected items with error: %i", diditOpen);
} else {
NSLog(@"opened with: %@", [(__bridge NSURL*)outLaunchedURL description]);
}