1

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

4

1 回答 1

1

您可以使用 Launch Services'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 的最新版本中,启动服务是CoreServices.framework伞形框架的一部分。您可能需要在要调用LS*函数的类中#import 它,并将其添加到Link Binary With Libraries目标的构建阶段。(在 OS X 10.8 SDK 中没有链接的情况下,它似乎在这里工作正常)。

于 2012-10-09T12:55:05.463 回答