UTI и ассоциации расширений файлов - PullRequest
5 голосов
/ 15 мая 2011

В моем приложении я хотел включить плагин QuickLook, который считывает несистемное расширение, также используемое другими приложениями (давайте используем RAR для этого примера). Я объявляю расширение как Exported UTI в Info.plist пакета моего приложения следующим образом:

<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
            <string>public.archive</string>
            <string>com.rarlab.rar-archive</string>
        </array>
        <key>UTTypeDescription</key>
        <string>Custom RAR Archive</string>
        <key>UTTypeIdentifier</key>
        <string>com.my-company.rarx-archive</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>rarx</string>
            </array>
        </dict>
    </dict>
</array>

И я также соответствующим образом импортирую RAR UTI:

<key>UTImportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeConformsTo</key>
        <array>
            <string>public.data</string>
            <string>public.archive</string>
        </array>
        <key>UTTypeDescription</key>
        <string>RAR Archive</string>
        <key>UTTypeIconFile</key>
        <string>RAR</string>
        <key>UTTypeIdentifier</key>
        <string>com.rarlab.rar-archive</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array>
                <string>rar</string>
                <string>rarx</string>
            </array>
        </dict>
    </dict>
</array>

Файлы RARX, похоже, никогда не связываются с моим приложением после его запуска. Чтобы проверить связь, я использовал mdls примерно так:

mdls -name kMDItemContentTypeTree "/Users/Me/.../A File.rarx"
>>> kMDItemContentTypeTree = (
    "com.another-company.rarx-archive",
    "public.data",
    "public.item",
    "public.archive"
)

Почему мой UTI (com.my-company.rarx-archive) не появляется в этом списке? Я полагаю, что это приводит к тому, что мой плагин Quick Look не запускается, так как файлы связаны с com.another-company.rarx-archive UTI. Вместо этого используется другое приложение в моей системе. Выполнение qlmanage с выводом отладки подтверждает это.

1 Ответ

1 голос
/ 03 июня 2012

Одна из проблем здесь заключается в том, что вы пытаетесь связать одно и то же расширение с двумя разными UTI, которые не могут быть обработаны Launch Services.Импортированное объявление com.rarlab.rar-archive является правильным, и оно назначает все файлы типа rar на com.rarlab.rar-archive, как и следовало ожидать.

Вы излишне объявили объявление Exported, поскольку оно пытается переопределить rar расширение.Вместо этого вы просто хотите использовать объявление Imported и использовать com.rarlab-rar-archive в расширении QuickLook, чтобы объявить, с чем оно может работать.

Пока другое приложение не объявляет QuickLookрасширение, вы должны хорошо объявить это соединение и заставить его работать.Однако, поскольку кажется, что другое приложение уже имеет расширение QuickLook для этого конкретного UTI, я думаю, что вы, возможно, застряли с возможностью его удаления.По моему опыту, конфликтующие расширения QuickLook предоставляются в порядке очереди.

...