在沙盒Mac应用程序中生成Quicktime

时间:2015-04-16 10:54:19

标签: objective-c macos quicktime launching-application appstore-sandbox

我曾经问过一个关于我在AVPlayerView上遇到的问题。稍微玩弄它之后,我实际上喜欢我的mac应用程序看起来并运行得更好,而不是用AVPlayerView打开一个新窗口,它启动QuickTime,并告诉它打开我的http视频网址。我想出了几种方法来实现这一点,所有这些方法都可以在没有沙盒的情况下工作,但没有一种方法可以使用。我目前正在使用NSTask来实现

open -a "Quicktime Player" "http://example.com/video.m4v"

同样,这是有效的,但只有当我的应用程序没有沙盒时。有没有办法在沙盒应用程序中执行此操作? 提前感谢任何意见或建议。

1 个答案:

答案 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]);
}