1

指定された URL でファイルを開くことができるすべてのアプリ バンドル ID を取得する方法は? 指定された URL のファイルが .xml の場合と同様に、.xml を開くことができるすべてのアプリ バンドル ID の配列を取得したいと考えています。

4

1 に答える 1

1

Launch Services を使用LSCopyAllRoleHandlersForContentType()して、対応アプリケーションのバンドル ID の配列を取得できます。

コードは次のようになります。

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包括的なフレームワークの一部です。関数を呼び出すクラスに #import し、ターゲットのビルド フェーズにLS*追加する必要がある場合があります。Link Binary With Libraries(OS X 10.8 SDK でリンクしなくても、ここでは問題なく動作するように見えました)。

于 2012-10-09T12:55:05.463 に答える