В моем приложении я хотел включить плагин 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
с выводом отладки подтверждает это.