Macos 检索可以在给定URL打开文件的所有应用程序包标识符
如何检索可以在给定URL打开文件的所有应用程序包ID?就像给定URL上的文件是.xml一样,我希望获得可以打开.xml的所有应用程序包ID的数组。您可以使用“启动服务”来获得具有功能的应用程序的包标识符数组 代码可能如下所示:Macos 检索可以在给定URL打开文件的所有应用程序包标识符,macos,cocoa,uti,Macos,Cocoa,Uti,如何检索可以在给定URL打开文件的所有应用程序包ID?就像给定URL上的文件是.xml一样,我希望获得可以打开.xml的所有应用程序包ID的数组。您可以使用“启动服务”来获得具有功能的应用程序的包标识符数组 代码可能如下所示: NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"xml"]; NSStri
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*
函数的类中,并将其添加到目标的linkbinary With Libraries
构建阶段。(在OS X 10.8 SDK中,它似乎可以正常工作,无需与之链接)。您可以使用“启动服务”来获取功能应用程序的捆绑包标识符数组
代码可能如下所示:
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*
函数的类中,并将其添加到目标的linkbinary With Libraries
构建阶段。(在OSX10.8SDK中,在没有链接的情况下,它似乎可以正常工作)