检索可以在给定URL处打开文件的所有应用程序包标识符

时间:2012-10-09 09:01:32

标签: macos cocoa uti

如何检索可以在给定网址上打开文件的所有应用包ID?就像给定URL的文件是.xml一样,我想得到所有可以打开.xml的应用程序包ID的数组。

1 个答案:

答案 0 :(得分:1)

您可以使用启动服务“LSCopyAllRoleHandlersForContentType()获取有能力的应用程序的包标识符数组。

代码可能如下所示:

NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"sample"
                                         withExtension:@"xml"];

NSString *utiType = nil;
NSError *error = nil;

BOOL success = [fileURL getResourceValue:&utiType
                         forKey:NSURLTypeIdentifierKey error:&error];

if (!success) {
    NSLog(@"getResourceValue:forKey:error: returned error == %@", error);
}

NSArray *bundleIdentifiers = [(NSArray *)LSCopyAllRoleHandlersForContentType(
                         (CFStringRef)utiType, kLSRolesAll) autorelease];

NSLog(@"bundleIdentifiers == %@", bundleIdentifiers);

在最新版本的OS X中,Launch Services是CoreServices.framework伞形框架的一部分。您可能需要在要调用LS*函数的类中#import它,并将其添加到目标的Link Binary With Libraries构建阶段。 (如果没有在OS X 10.8 SDK中链接它,它似乎工作正常。)