拡張子で一致するファイルタイプのペアにUTIを追加しようとしています。私はそれを適切にセットアップしたと思います-少なくとも、ファイル拡張子-> UTIマッピングは認識されます(info.plistでインポートされたタイプとして宣言しました)。ただし、テスト ファイルから UTI を取得しようとすると、動的 UTI が返されます。これら 2 つのケースをテストするために使用しているサンプル コードを次に示します。
NSString *previewTypeUTI = nil;
NSURL *previewFileURL = [NSURL fileURLWithPath:@"/Users/eblair/Desktop/EWF/thetestfile.myext1"];
[previewFileURL getResourceValue:&previewTypeUTI forKey:NSURLTypeIdentifierKey error:nil];
NSLog(@"%@", previewTypeUTI); // #1
NSString *testUTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (CFStringRef)[previewFileURL pathExtension], NULL);
NSLog(@"%@", testUTI); // #2
[testUTI release];
NSLog #1 は「dyn.########」を出力し、NSLog #2 は「com.mycompany.filetype1」を出力します。私は彼らが同じものを印刷すると思っていたでしょう。file->UTI マッピングを機能させるための追加の手順はありますか、それとも Launch Services が追いつく必要がある場合ですか?
UTI を利用するいくつかの API を使用したいのですが、それらの API はファイル -> UTI マッピングを使用しているように見えるため、拡張機能 -> UTI マッピングを使用するだけではオプションではありません。
完全を期すために、インポートされた型の plist エントリを次に示します。
<key>UTImportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.disk-image</string>
</array>
<key>UTTypeDescription</key>
<string>File Type 1</string>
<key>UTTypeIdentifier</key>
<string>com.mycompany.filetype1</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>myext1</string>
</array>
</dict>
</dict>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.disk-image</string>
</array>
<key>UTTypeDescription</key>
<string>File Type 2</string>
<key>UTTypeIdentifier</key>
<string>com.mycompany.filetype2</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>myext2</string>
</array>
</dict>
</dict>
</array>