将UTI分配给文件类型

时间:2010-07-28 14:26:25

标签: objective-c macos file-type uti

我正在尝试为一对文件类型添加UTI,按扩展名进行匹配。我想我已经正确设置了 - 至少是文件扩展名 - >识别UTI映射(我在info.plist中将其声明为导入类型)。但是,当我尝试从测试文件中删除UTI时,我会回到动态UTI。这是我用来测试这两种情况的示例代码:

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”。我希望他们打印同样的东西。是否有一些额外的步骤可以使文件 - > UTI映射工作,还是需要赶上启动服务的情况?

仅使用扩展名 - > UTI映射不是一种选择,因为我想使用一些利用UTI的API,而这些API似乎正在使用file-> 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>

1 个答案:

答案 0 :(得分:7)

嗯,已经接近一年,但我今天不得不重新解决这个问题,我想我偶然发现了我做错了什么。您似乎需要将public.data作为符合的类型包含在内,即使public.disk-image已符合public.data。因此,UTTypeConformsTo数组应如下所示:

    <key>UTTypeConformsTo</key>
    <array>
        <string>public.data</string>
        <string>public.disk-image</string>
    </array>

进行此更改后,我对file-&gt; UTI和extension-&gt; UTI的上述比较现在产生相同的结果。