Присвоение UTI типу файла - PullRequest
2 голосов
/ 28 июля 2010

Я пытаюсь добавить 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". Я бы ожидал, что они напечатают то же самое. Есть ли какой-то дополнительный шаг, чтобы заставить работать отображение file-> UTI, или это тот случай, когда Launch Services нужно наверстать упущенное?

Простое использование расширения-> сопоставление UTI не вариант, потому что я хочу использовать некоторые API, которые используют преимущества UTI, и эти API, похоже, используют сопоставление file-> UTI.

Для полноты приведем запись для импортированных типов:

<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 Ответ

7 голосов
/ 28 апреля 2011

Ну, это был почти год, но мне пришлось пересмотреть это сегодня, и я думаю, что наткнулся на то, что я сделал неправильно. Похоже, вам нужно включить public.data как тип, которому вы соответствуете, даже если public.disk-image уже соответствует public.data. Итак, массив UTTypeConformsTo должен выглядеть так:

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

После внесения этого изменения мое сравнение файлов-> UTI и расширения-> UTI теперь дает тот же результат.

...